今天是刘小爱自学Java的第115天。
感谢你的观看,谢谢你。
mybatis框架的继续学习,安排如下:
主要是涉及到配置文件的编写,其中又包含核心配置文件和映射文件。
创建mybatis-config.xml核心配置文件。
创建映射文件用来编写对应的sql语句,可以创建多个,但每创建一个都要在核心配置文件中说明。
构建SqlSessionFactory,再通过该工程创建SqlSession对象。
总之sqlSession对象是关键,通过它就能执行sql语句了。
而如何找到对应的sql语句并执行?
就需要在参数中说明sql语句对应的id了。
Java实体类和数据表
前面也一直强调过很多次,它们都是一一对应的关系,昨天的代码有一个问题:
在Java中变量名采用的是驼峰命名规则,比如userName。
而在数据库中若是多个单词,会用下划线隔开,比如说user_name。
这样的话这两个就没法对应出来,查询结果也会显示userName为空。
昨天我遇到这个问题后的第一反应就是直接将数据库中的字段名给改了,改成username。
但今天看教程的时候讲到这个问题,其中它的解决方法是在sql语句中给字段名取一个别名。
既然讲到了,那就做一个了解吧。
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最后测试下增加操作
测试代码一运行,分析下其流程:
动态代理在于可以将dao层接口和映射文件直接连接起来,从而省略了dao层实现类的编写。
再次说明这个mapper层也就是dao层,只不过我们以前一直把它叫做dao层。
如何将接口和映射文件连接起来呢?需要满足以下条件:
说白了其实就是将接口中的方法和sql语句所在的位置对应起来了。
在满足上面的要求后,就可以使用动态代理省略实现类的编写了,创建测试类,并编写代码:
使用快捷键Ctrl+Shift+T创建测试类。
其实关键就是sqlSession.getMapper()这个方法,其本质就相当于userMapper的实现类。
实现原理可以查看该方法源码,这里就不做拓展了,知道它和通过实现类的方式一样即可。
这样完成之后就可以直接在测试代码中使用userMapper增删改查。
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。