今天是刘小爱自学Java的第115天。web
感谢你的观看,谢谢你。sql

mybatis框架的继续学习,安排以下:数据库
-
对昨天学习的内容作个小结,其中补充一个昨天忽视的问题。 -
数据库无外乎就是增删改查,因此使用mybatis作一个完整的crud操做。 -
最后使用动态代理对代码优化,具体底层实现原理就不深究了,大体知道怎么回事就行。
1、mybatis使用步骤回顾
主要是涉及到配置文件的编写,其中又包含核心配置文件和映射文件。微信

建立mybatis-config.xml核心配置文件。mybatis
建立映射文件编写sql语句,能够建立多个,但每建立一个都要在核心配置文件中说明。架构
构建SqlSessionFactory,再经过该工厂建立SqlSession对象。app
总之sqlSession对象是关键,经过它就能执行sql语句了。框架
而如何找到对应的sql语句并执行?编辑器
就须要在参数中说明sql语句对应的id了。学习
Java实体类和数据表
前面也一直强调过不少次,它们都是一一对应的关系,昨天的代码有一个问题:
在Java中变量名通常采用的是驼峰命名规则,好比userName。
而在数据库中如果多个单词,会用下划线隔开,好比说user_name。

这样的话这两个就无法对应出来,查询结果也会显示userName为空。
昨天我遇到这个问题后的第一反应就是直接将数据库中的字段名给改了,改为username。
但今天看教程的时候也讲到这个问题,解决方法是在sql语句中给字段名取一个别名。
既然讲到了,那就作一个了解吧。
2、mybatis完整的crud
Java经典三层架构中的dao层,也能够叫mapper层,它们其实都是一回事。
映射文件说的也就是这个mapper。
1UserDao接口

数据库四大操做:增删改查
在dao层中编写一个接口,包含这四种操做的方法,其中查询有全表和单条查询。
既然有接口,那么也要有一个和其对应的实现类userDaoImpl,固然该实现类后续可使用动态代理省略掉,暂且先不考虑。
在写实现类以前,咱们要先在mapper配置文件中编写对应的sql语句。
2UserDaoMapper配置文件

老实说,这块就写的有点难受了,其中这个#{字段名}也就至关于预编译中的“?”问号。
查询语句包含查询全部用户和根据条件查询用户,也只有查询语句须要返回值类型。
值得注意的是:
在核心配置文件中要加入该映射文件说明。
3UserDaoImpl实现类

dao层中的代码很纯粹,只用来增删改查。获取sqlSession对象的代码不在dao层中编写。
因此建立构造方法,参数为sqlSession。
也就是说想要使用dao层,就得给传一个sqlSession对象完成初始化。
其中增删改操做中咱们须要调用commit方法提交事务,否则数据库中的数据不会修改。
查询不须要事务提交,这也好理解,自己并无对数据库中的数据进行修改。
4建立测试类

①建立测试类
使用快捷键Ctrl+Shift+T在UserDao接口名上能够快速建立一个对应的测试类。
②设定测试类方法
哪些方法须要测试能够自行选择,其中setUp@Before选择后会建立一个setUp()方法。
这个before是什么意思呢?
就是上述一共有5个要测试的方法,每一个方法运行时都会先执行before方法里的内容。
因此将获取sqlSession对象的操做封装到setUp方法中,每次增删改查时会先获取sqlSession对象。
5最后测试下增长操做

测试代码一运行,分析下其流程:
-
set up()方法会优先执行,从而获取SqlSession对象,并将userDao初始化 -
调用该dao层中的增长方法,执行的也就是其实现类中的insertUser()方法。 -
insertUser()方法中也就是利用sqlSession对象进行增长操做。 -
参数为sql语句对应的映射文件id,和须要增长的数据user。 -
这样在数据库中就增长了一条数据。
3、使用动态代理省略实现类
动态代理能够将dao层接口和映射文件直接链接起来,从而省略了dao层实现类的编写。

再次说明这个mapper层也就是dao层,只不过咱们之前一直把它叫作dao层。
如何将接口和映射文件链接起来呢?须要知足如下条件:
-
映射文件中的命名空间与Mapper接口的全路径一致,也就是上图中最上面的箭头。 -
映射文件中sql语句的id与Mapper接口的方法名保持一致。
说白了其实就是将接口中的方法和sql语句所在的位置对应起来了。
在知足上面的要求后,就可使用动态代理省略实现类的编写了,建立测试类:

使用快捷键Ctrl+Shift+T建立测试类。
其实关键就是sqlSession.getMapper()这个方法,其本质就至关于userMapper的实现类。
实现原理能够查看该方法源码,这里就不作拓展了,知道它和经过实现类的方式同样便可。
这样完成以后就能够直接在测试代码中使用userMapper增删改查。
最后
谢谢你的观看。
若是能够的话,麻烦帮忙点个赞,谢谢你。
本文分享自微信公众号 - 刘小爱(liuxiaoai946)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。