发表于: 2018-04-05 19:47:29
1 447
今天完成的事情
昨天没写日报,因为写完MyBatis练手实例后后一直在调试,发现很多bug,在调试过程中也学习到很多配置上的细节,等完全弄好已经来不及写日报了,所以合并到今天日报里。
关于先写测试类
查了下关于先写测试再写接口,貌似专业名词叫做TDD测试驱动开发,网上资料看了一番,貌似是通过先写测试来想明白业务逻辑咋写。但现在自己做的小例子太太太简单了完全体会不到什么业务需求啥的以及测试驱动开发的必要,感觉自己现在学不来。或许以后做个复杂点的大项目能用上吧,到时候再说吧。
单纯使用MyBatis的实例
整个项目目录如下


首先是MyBatis配置文件


然后是dao层
UserDao


然后是映射文件


dao层自己遇到的难点
自己在这里卡了很久,后来感觉都弄清楚了,又觉得意义不大,心情有点不爽。不知师兄是否也认为我有点跑偏啊?
是否映射文件必须跟dao接口同名且在同一个目录?
现在写日志去Onenote笔记中截图,突然意识到我的问题在哪里了!就是不想放过任何一个细节。比如下面总结的东西的确很详细,而且我还都自己测试了一下。但是我的这种习惯会严重拖慢进度,特别对于这种锦上添花的东西,暂时不学也罢!


获取被影响的行数
直接使用jdbc,或者mysql命令行执行增删改操作,能够返回影响的行数。现在使用MyBatis后,如何获取影响到的行数?——自己经过查阅后认为分两种情况
- 直接使用sqlsession对象执行dao方法——sqlsession的selectXXX等方法定义中返回值类型是int,就是影响的行数
- 获取映射对象执行dao方法——是否有返回值要依靠dao接口中方法的返回值定义。如果设置返回int,也是会返回影响的行数
获取返回的数据条目
不管是返回单条还是多条数据,映射文件中slect标签中配置resultType或者resultMap属性都能行,我还去分析了
- 他们之间分别接受单条或者多条查阅结果的不同表现
- 如果返回的数据字段名与定义的接受返回数据的pojo对象的属性不完全对应如何处理
- 如果没有符合条件的查询结果,两种方式下返回的结果分别是什么类型
笔记在Onenote上总结一大堆,感觉似乎是学到不少东西,但又感觉用处不大,很纠结。更关键的是大把时间花掉了。我理解是了解这些后,以后出现bug的时候能更加容易判断bug原因。就这样吧。
工具类
用于获取sqlsession对象的工厂


service层
执行UserDao中定义的方法有两种方式
- 直接通过sqlsession对象执行selectOne或者selectList方法
- 获取映射对象,通过映射对象直接执行dao接口中定义的方法
网上查阅一番说官方推荐使用映射对象来执行dao方法,但我没弄明白这么做有啥优势吗?这里想请教一下师兄。
service接口


service实现类


sqlsession对象因为不是线程安全的,所以把它的作用域限制在方法范围内,每调用一个方法就重新获取一个sqlsession对象。后面使用Spring来搭配MyBatis以后就解决这个问题了。就可以从始至终使用同一个sqlsession对象了。
最后是测试类


在做测试的时候,同时也查阅了maven中如何跳过测试,可以通过在pom文件中配置maven-surefire-plugin 插件,设置 <skipTests>true</skipTests> 来实现。也可以通过命令行mvn install -Dmaven.test.skip=true 来实现。
明天计划的事情
开始在Spring中使用MyBatis。然后再做个练手项目
遇到的问题
调试中出现了挺多bug,也通过阅读控制台的错误日志,以及junit的错误提示,熟悉了一点查错的思路。当然很多报错的提示也不都准确有点误导性,容易把人引向错误的方向。总之吧眼前的bug都排除了,以后练习多了可能会更加熟练吧。
收获
最大的收获就是感觉要时刻提醒自己不要去琢磨无关痛痒的小细节,更何况我自己花时间去琢磨的细节明显几乎用不到。比如很多都是单独使用MyBatis的时候需要注意的问题,但以后基本都是Spring和MyBatis合用。所以提醒自己一定不要偏离航向。
评论