第一次进入ITOO,第一次见识到整个架构,光搭建环境就出现了很多错误,5个人中3个为新手的我们,着实费了不少功夫,之后进入开发亦是如此。但总得有这个过程,我们在错误中长大,才更加茁壮。但过了一个阶段必须对以前进行总结,颗粒归仓。否则过一段时间就会忘掉,流失了。 这次主要看一下跟数据库相关的知识。
第1个问题:作为基础系统的一员,给其他系统提供必要的数据是必不可少的。但是总不能一条一条的插入吧?即使用sql语句也是如此。经过一番努力,成功找到一个方法:
① 先创建一个存储过程(使用Navicat链接的MySql,创建了1000条)
- DROP PROCEDURE
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
② 然后新建一个查询,调用该存储过程
CALL insert_courseInfo();
③ 执行时间(1000条数据)
CALL insert_courseInfo();
Affected rows: 1
Time: 42.112s
④ 执行结果
其实主要是对CONCAT函数的使用,它可以将字符串与数字进行结合,非常方便。
第2个问题:删除一条数据之后进行有条件分页模糊查询的时候还能查出来,无条件查询则不会查出来。底层方法应该没问题,但仔细看了看我的有条件分页模糊查询也没啥问题。通过把源代码下载下来,逐步跟踪,终于发现了问题所在:
- 我现在的代码
-
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+"%‘");
-
- 生成的sql语句
-
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 ‘%化学%‘
-
- 问题:
- 注意生成的sql语句中where后面的条件,and与后面的or应该为一个查询条件,而这条sql语句将会分为两个条件:or和and,这样查出来的数据肯定会查出来isDelete为1的情况。
- 解决方法
- 应该给and后面的条件加上括号:(),在代码中的setSelectWhere中字符串用括号()括起来
-
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+"%‘)");
- 另外一个问题
- 由于底层已经写上了isDelete=0的查询条件,而且跟着and关键字,如果 setSelectWhere中的内容不写的话,sql语句会报错的。。。写上的话,生成的sql语句会有两个isDelete=0...底层方法封装还是有些不完美~不过已经相当不错了,更多的时候我们直接即可,非常方便。
遇到问题不怕,怕的是一直困在一个思路上,一旦钻了牛角尖,不仅浪费大量的时间,也很影响项目的进展。所以,要给自己规定一定的时间,比如1个小时,如果做不出来就尽快找人。在时间如此紧张的情况下,学习需要放到次席。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-08-10 21:30:33