【框架】115:mybatis的增删改查

目录

    • 一、mybatis使用步骤回顾
    • 二、mybatis完整的crud
    • 三、使用动态代理省略实现类
    • 最后

今天是刘小爱自学Java的第115天。

感谢你的观看,谢谢你。

【框架】115:mybatis的增删改查_第1张图片

mybatis框架的继续学习,安排如下:

  • 对昨天学习的内容做个小结,其中补充一个昨天忽视的问题。
  • 数据库无外乎就是增删改查,所以使用mybatis做一个完整的crud操作。
  • 最后使用动态代理对代码优化,具体底层实现原理就不仔细深究了,大致知道怎么回事就行。

一、mybatis使用步骤回顾

主要是涉及到配置文件的编写,其中又包含核心配置文件和映射文件。

【框架】115:mybatis的增删改查_第2张图片

创建mybatis-config.xml核心配置文件。

创建映射文件用来编写对应的sql语句,可以创建多个,但每创建一个都要在核心配置文件中说明。

构建SqlSessionFactory,再通过该工程创建SqlSession对象。

总之sqlSession对象是关键,通过它就能执行sql语句了。

而如何找到对应的sql语句并执行?

就需要在参数中说明sql语句对应的id了。

Java实体类和数据表

前面也一直强调过很多次,它们都是一一对应的关系,昨天的代码有一个问题:

在Java中变量名采用的是驼峰命名规则,比如userName。

而在数据库中若是多个单词,会用下划线隔开,比如说user_name。

【框架】115:mybatis的增删改查_第3张图片

这样的话这两个就没法对应出来,查询结果也会显示userName为空。

昨天我遇到这个问题后的第一反应就是直接将数据库中的字段名给改了,改成username。

但今天看教程的时候讲到这个问题,其中它的解决方法是在sql语句中给字段名取一个别名。

既然讲到了,那就做一个了解吧。

二、mybatis完整的crud

Java经典三层架构中的dao层,也可以叫mapper层,它们其实都是一回事。

映射文件说的也就是这个mapper。

1UserDao接口

【框架】115:mybatis的增删改查_第4张图片

数据库四大操作:增删改查

在dao层中编写一个接口,包含这四种操作的方法,其中查询有全表和单条查询。

既然有接口,那么也要有一个和其对应的实现类userDaoImpl,当然该实现类后续可以使用动态代理省略掉,暂且先不考虑。

在写实现类之前,我们要先在mapper配置文件中编写对应的sql语句。

2UserDaoMapper配置文件

【框架】115:mybatis的增删改查_第5张图片

老实说,这块就写的有点难受了,其中这个#{字段名}也就相当于预编译中的“?”问号。

查询不需要事务提交,这也好理解,本身并没有对数据库中的数据进行修改。

值得注意的是:

在核心配置文件中要加入该映射文件说明。

3UserDaoImpl实现类

【框架】115:mybatis的增删改查_第6张图片

dao层中的代码很纯粹,只用来增删改查。获取sqlSession对象的代码不在dao层中编写。

所以创建构造方法,参数为sqlSession。

也就是说想要使用dao层,就得给传一个sqlSession对象完成初始化。

其中增删改操作中我们需要调用commit方法提交事务,不然数据库中的数据不会修改。

查询不需要事务提交,这也好理解,本身并没有对数据库中的数据进行修改。

4创建测试类

【框架】115:mybatis的增删改查_第7张图片

①创建测试类

使用快捷键Ctrl+Shift+T在UserDao接口名上可以快速创建一个对应的测试类。

②设定测试类方法

接口中的哪些方法需要测试可以自行选择,其中setUp@Before选择后会创建一个setUp()方法。

这个before是什么意思呢?

就是上述一共有5个要测试的方法,每个方法运行时都会先执行before方法里的内容。

所以将获取sqlSession对象的操作封装到setUp方法中,每次增删改查时会先获取sqlSession对象。

5最后测试下增加操作

【框架】115:mybatis的增删改查_第8张图片

测试代码一运行,分析下其流程:

  • set up()方法会优先执行,从而获取SqlSession对象,并将userDao初始化
  • 调用该dao层中的增加方法,执行的也就是其实现类中的insertUser()方法。
  • insertUser()方法中也就是利用sqlSession对象进行增加操作。
  • 参数为sql语句对应的映射文件id,和需要增加的数据user。
  • 这样在数据库中就增加了一条数据。

三、使用动态代理省略实现类

动态代理在于可以将dao层接口和映射文件直接连接起来,从而省略了dao层实现类的编写。

【框架】115:mybatis的增删改查_第9张图片

再次说明这个mapper层也就是dao层,只不过我们以前一直把它叫做dao层。

如何将接口和映射文件连接起来呢?需要满足以下条件:

  • 映射文件中的命名空间与Mapper接口的全路径一致,也就是上图中最上面的箭头。
  • 映射文件中sql语句的id与Mapper接口的方法名保持一致。

说白了其实就是将接口中的方法和sql语句所在的位置对应起来了

在满足上面的要求后,就可以使用动态代理省略实现类的编写了,创建测试类,并编写代码:

【框架】115:mybatis的增删改查_第10张图片

使用快捷键Ctrl+Shift+T创建测试类。

其实关键就是sqlSession.getMapper()这个方法,其本质就相当于userMapper的实现类。

实现原理可以查看该方法源码,这里就不做拓展了,知道它和通过实现类的方式一样即可。

这样完成之后就可以直接在测试代码中使用userMapper增删改查。

最后

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

你可能感兴趣的:(零基础自学Java,mybatis,java,数据库)