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

来源:互联网 发布:陈辉太极拳网络公开课 编辑:程序博客网 时间:2024/05/17 09:13

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

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

        ① 先创建一个存储过程(使用Navicat链接的MySql,创建了1000条) 
  1. DROP PROCEDURE
  2. IF EXISTS insert_courseInfo;
  3. DELIMITER ;
  4. CREATE PROCEDURE insert_courseInfo ()
  5. BEGIN
  6. DECLARE
  7. i INT DEFAULT 0 ;
  8. WHILE i < 1000 DO
  9. INSERT INTO `itoo_platform`.`tb_courseinfo` (
  10. `id`,
  11. `comment`,
  12. `operator`,
  13. `versionEndTime`,
  14. `versionStartTime`,
  15. `isDelete`,
  16. `remark`,
  17. `classHour`,
  18. `classPoint`,
  19. `courseCode`,
  20. `courseName`,
  21. `courseTypeId`,
  22. `institutionId`
  23. )
  24. VALUES
  25. (
  26. CONCAT('23', i),
  27. '吴利昌添加',
  28. '吴利昌',
  29. '2015-07-06 15:49:28',
  30. '2015-07-06 15:49:37',
  31. '0',
  32. '吴利昌添加',
  33. '18',
  34. '4',
  35. CONCAT('05', i),
  36. '材料化学',
  37. '1',
  38. '2'
  39. ) ;
  40. SET i = i + 1 ;
  41. END
  42. WHILE ;
  43. END

        ② 然后新建一个查询,调用该存储过程         
  1. CALL insert_courseInfo();
        ③ 执行时间(1000条数据)
            CALL insert_courseInfo();
            Affected rows: 1
            Time: 42.112s
        ④ 执行结果
    其实主要是对CONCAT函数的使用,它可以将字符串与数字进行结合,非常方便。

    第2个问题:删除一条数据之后进行有条件分页模糊查询的时候还能查出来,无条件查询则不会查出来。底层方法应该没问题,但仔细看了看我的有条件分页模糊查询也没啥问题。通过把源代码下载下来,逐步跟踪,终于发现了问题所在:
    1. 我现在的代码
        1. pageEntity.setSelectContent("p.institutionId,p.id,p.institution.institutionName,p.remark,p.maxPeople,p.professionalCode,p.professionalName");
        2. pageEntity.setSelectWhere("p.professionalName like '%" + conditions
        3. + "%' or p.institution.institutionName like '%" + conditions
        4. + "%' or p.professionalCode like '%" + conditions + "%' or p.remark like '%"+conditions+"%'");
    2. 生成的sql语句
        1. 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 '%化学%'
    3. 问题:
      1. 注意生成的sql语句中where后面的条件,and与后面的or应该为一个查询条件,而这条sql语句将会分为两个条件:or和and,这样查出来的数据肯定会查出来isDelete为1的情况。
    4. 解决方法
      1. 应该给and后面的条件加上括号:(),在代码中的setSelectWhere中字符串用括号()括起来
        1. pageEntity.setSelectContent("p.institutionId,p.id,p.institution.institutionName,p.remark,p.maxPeople,p.professionalCode,p.professionalName");
        2. pageEntity.setSelectWhere("(p.professionalName like '%" + conditions
        3. + "%' or p.institution.institutionName like '%" + conditions
        4. + "%' or p.professionalCode like '%" + conditions + "%' or p.remark like '%"+conditions+"%')");

    5. 另外一个问题
      1. 由于底层已经写上了isDelete=0的查询条件,而且跟着and关键字,如果 setSelectWhere中的内容不写的话,sql语句会报错的。。。写上的话,生成的sql语句会有两个isDelete=0...底层方法封装还是有些不完美~不过已经相当不错了,更多的时候我们直接即可,非常方便。
        遇到问题不怕,怕的是一直困在一个思路上,一旦钻了牛角尖,不仅浪费大量的时间,也很影响项目的进展。所以,要给自己规定一定的时间,比如1个小时,如果做不出来就尽快找人。在时间如此紧张的情况下,学习需要放到次席。
0 0
原创粉丝点击