您的位置:首页 > 其它

ITOO3.1开发问题汇总(一)

2015-07-31 23:26 323 查看
第一次进入ITOO,第一次见识到整个架构,光搭建环境就出现了很多错误,5个人中3个为新手的我们,着实费了不少功夫,之后进入开发亦是如此。但总得有这个过程,我们在错误中长大,才更加茁壮。但过了一个阶段必须对以前进行总结,颗粒归仓。否则过一段时间就会忘掉,流失了。 这次主要看一下跟数据库相关的知识。

第1个问题:作为基础系统的一员,给其他系统提供必要的数据是必不可少的。但是总不能一条一条的插入吧?即使用sql语句也是如此。经过一番努力,成功找到一个方法:

① 先创建一个存储过程(使用Navicat链接的MySql,创建了1000条)

DROP PROCEDURE

[code]IF EXISTS insert_courseInfo;

DELIMITER ;


CREATE PROCEDURE insert_courseInfo ()

BEGIN

DECLARE

i INT DEFAULT 0 ;

WHILE i < 1000 DO

INSERT INTO `itoo_platform`.`tb_courseinfo` (

`id`,

`comment`,

`operator`,

`versionEndTime`,

`versionStartTime`,

`isDelete`,

`remark`,

`classHour`,

`classPoint`,

`courseCode`,

`courseName`,

`courseTypeId`,

`institutionId`

)

VALUES

(

CONCAT('23', i),

'吴利昌添加',

'吴利昌',

'2015-07-06 15:49:28',

'2015-07-06 15:49:37',

'0',

'吴利昌添加',

'18',

'4',

CONCAT('05', i),

'材料化学',

'1',

'2'

) ;

SET i = i + 1 ;

END

WHILE ;

END

[/code]

② 然后新建一个查询,调用该存储过程


[code]CALL insert_courseInfo();

[/code]

③ 执行时间(1000条数据)

CALL insert_courseInfo();

Affected rows: 1

Time: 42.112s
④ 执行结果



其实主要是对CONCAT函数的使用,它可以将字符串与数字进行结合,非常方便。

第2个问题:删除一条数据之后进行有条件分页模糊查询的时候还能查出来,无条件查询则不会查出来。底层方法应该没问题,但仔细看了看我的有条件分页模糊查询也没啥问题。通过把源代码下载下来,逐步跟踪,终于发现了问题所在:

我现在的代码

[code]pageEntity.setSelectContent("p.institutionId,p.id,p.institution.institutionName,p.remark,p.maxPeople,p.professionalCode,p.professionalName");

pageEntity.setSelectWhere("p.professionalName like '%" + conditions

+ "%' or p.institution.institutionName like '%" + conditions

+ "%' or p.professionalCode like '%" + conditions + "%' or p.remark like '%"+conditions+"%'");

[/code]

生成的sql语句

[code]SELECT p.institutionId,p.id,p.institution.institutionName,p.remark,p.maxPeople,p.professionalCode,p.professionalName From Professional p where p.isDelete = 0 and p.professionalName like '%化学%' or p.institution.institutionName like '%化学%' or p.professionalCode like '%化学%' or p.remark like '%化学%'

[/code]

问题:

注意生成的sql语句中where后面的条件,and与后面的or应该为一个查询条件,而这条sql语句将会分为两个条件:or和and,这样查出来的数据肯定会查出来isDelete为1的情况。

解决方法

应该给and后面的条件加上括号:(),在代码中的setSelectWhere中字符串用括号()括起来

[code]pageEntity.setSelectContent("p.institutionId,p.id,p.institution.institutionName,p.remark,p.maxPeople,p.professionalCode,p.professionalName");

pageEntity.setSelectWhere("(p.professionalName like '%" + conditions

+ "%' or p.institution.institutionName like '%" + conditions

+ "%' or p.professionalCode like '%" + conditions + "%' or p.remark like '%"+conditions+"%')");

[/code]

另外一个问题

由于底层已经写上了isDelete=0的查询条件,而且跟着and关键字,如果 setSelectWhere中的内容不写的话,sql语句会报错的。。。写上的话,生成的sql语句会有两个isDelete=0...底层方法封装还是有些不完美~不过已经相当不错了,更多的时候我们直接即可,非常方便。

遇到问题不怕,怕的是一直困在一个思路上,一旦钻了牛角尖,不仅浪费大量的时间,也很影响项目的进展。所以,要给自己规定一定的时间,比如1个小时,如果做不出来就尽快找人。在时间如此紧张的情况下,学习需要放到次席。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: