发表于: 2017-09-03 02:14:03
1 879
这段时间出了趟远门,今天才回家。
今天把mapper.xml收了个尾,然后开始测试。
代码链接:
1.mapper.xml:https://github.com/Cage666/Student/blob/master/config/StudentMapper.xml
2.测试代码:https://github.com/Cage666/Student/blob/master/test/MybatisStuImpl.java
测试过程:
1.开始测试后,在setUpBeforeClass这一步就出了问题:bug大意就是找不到类型为[String,String,Integer]的构造函数。(我在mapper.xml中的resultMap中设定了构造器映射)
解决方法:将Student类的构造函数参数列表中的参数(jnshuId)类型由int改为Integer。由于Integer类型的值可以直接赋给int类型的值,其余部分并未修改。
疑惑:我明明在mapper.xml>resultMap>constructor中id_jnshu的javaType设定的是int,可是程序自动读取为Integer了。
2.Mybatis-mapper.xml中,insert,update,delete的返回值能否设置为boolean?
答:sqlSession中的三个方法的返回值只能是int(影响行数)。接口中的返回值类型随意,没有影响。
3.能否在mapper.xml中,将sql的结果进一步操作(比如获取的Date类型结果,进行toString()操作)?
答:不用这样。如果POJO中的属性是String,Mysql中的数据是DATE,Mybatis会自动把获取到的java.sql.Date值toString()后传给POJO中的属性。
4.先忽略了其他三个测试方法,单独测试queryStuByName方法(通过姓名查询)。
结果:正常,并且可以打印出获取的学生对象的entrytime。(就是这样才获知了第3条的)
5.如何在调用sqlSession中的方法时,传入多个参数?(比如查询时要传入major和jnshuId,但是selectOne函数只支持一个参数)
答:用HashMap<String,Object>传入参数,String为参数名,Object为参数值。(测试代码第65行)
6.测试addStu方法,这里出现了一个很奇怪的现象:
插入方法的测试通过了,并且在测试方法中还查询到了,甚至连数据插入数据库时触发器自动生成的createTime都能打印出来,但是数据库中并没有出现一条新的记录?
通过查询方法的测试,可以知道,数据库信息是没有搞错的。重复测试,一直能成功插入,并且打印出的createTime一直在更新,说明记录的确没有真正插入数据库(因为我把major和jnshuId设为联合唯一索引了,如果第一次成功插入,第二次插入就会失败)。
7.测试delStuById方法,bug提示大意是无法把int型数据转为long型。(这一点很奇怪,在delete函数中直接传入的参数竟然只能以int型读取,而不是自动判定类型)
修改测试方法,不直接在sqlSession.delete()函数中写参数4,而是先定义long型变量id=4,将id传入函数,即测试通过。
这里出现了和6中同样的现象,测试通过,但数据库中的记录并没有被删除。
如图,根据打印结果,查询方法并未出错,然而在79行中查询到的结果为空,看似是删除成功了,但数据库中数据还在。(刷新过了)
7.测试updateStu方法,结果同上,测试通过而数据库未改变。
另外,由测试通过,验证了传入两个参数时,mapper.xml中updateStu中参数的写法:
如图,不设定接收参数的属性:
8.开始找原因:为何测试通过,但数据库中的记录没有变化。
原因:没有进行事务的提交,所以数据没有提交到数据库中。加上一句sqlSession.commit();即可。
在增删改测试代码中加上这一句后一切正常。
9.在此项目中,为了一致性,编写一个简单的Mybatis数据操作类,实现数据操作接口。这样就可以依旧通过原先的方式调用数据操作方法了。
数据操作类代码链接:https://github.com/Cage666/Student/blob/master/src/StudentDAOMybatisImpl.java
至此Mybatis部分完工。
长时间没动,之前写的东西都快忘了。。花了好半天复习之前自己写的东西→_→
明天:
完成任务1:
1.编写主类。功能:向数据库中插入X条数据。可通过多线程提高效率。(两个线程分别生成随机学生数据、插入数据库)
>可以通过多线程提高向数据库中插入数据的效率吗?
>通过批处理插入提高插入效率。
2.进行任务1中的各项测试。
评论