【JavaEE】MyBatis框架要点总结(1)
文章目录
- 【JavaEE】MyBatis框架要点总结(1)
- 1. MyBatis是什么?
- 2. 搭建MyBatis的开发环境
- 2.0 MySQL建库建表
- 2.1 新项目添加MyBatis框架
- 2.2 设置MyBatis的配置
- 2.2.1 设置数据库的连接信息
- 2.2.2 设置xml的保存路径和命名格式
- 2.2.3 有其他配置
- 3. 根据MyBatis的写法完成数据库的操作
- 3.1 创建一个接口
- 3.2 实体类UserInfo
- 3.3 接口中声明方法
- 3.4 在对应的路径下创建xml
- 3.5 在xml中实现方法
- 3.6 检验是否成功
- 4. 推荐的插件MyBatisX
【JavaEE】MyBatis框架要点总结(1)
在之前Spring相关框架的学习中,我们已经知道了如何进行前后端交互信息了,而现在MyBatis的歇息,就是将重要数据进行存储,以及将重要数据从数据库中获取
在之前的网站开发的时候,数据持久化层DAO的重要作用,咱们也能感受得到,这里不进行多的论述
- 前端的一次提交携带的数据,大多数只是数据库的表的一行罢了,而这段数据要保存起来,否则本次提交仅当前页面有效
- 例如,提交用户信息,提交博客信息,删除和修改博客…
- 补充:session存储就不讲了,直接讲数据库存储
- 后端返回的数据可能需要通过数据库来判断,或者返回数据库的数据
- 例如,登录检验,博客列表…
- 此外,还有删除的修改的操作,也需要进行数据库操作…
1. MyBatis是什么?
MyBatis ORM
- Object Relation Mapping
- 即,对象关系映射框架
- MyBatis是一个优秀的 持久层框架 ,它支持自定义SQL、存储过程以及高级映射…
- MyBatis,基于JDBC实现,但是 极大地简化 了之前JDBC等的很多繁琐的操作
- JDBC代码以及设置参数和获取结果集的工作
- 之前JDBC多麻烦,不用我说了吧,传送门:【JavaEE】表白墙再升级(MySQL实现持久化)_s:103的博客-CSDN博客
- 这也是要学习 MyBatis 的原因!
- MyBatis可以通过简单的XML或者注解来配置和映射原始类型、接口和Javc POJO(Plan Old Java Objects,普通老式java对象)为数据库中的记录
也就是说,MyBatis是更简单完成程序和数据库交互的工具框架,用它去增删改查数据库,更加便捷
mybatis – MyBatis 3 | 简介
- 这是官网,可以自行去查阅和学习
- 同样的,并不是只有本文讲的这些方式而已,还有更多更多…并且还可以实现很多很多,开发时需要用到的内容就去学即可!👍
而MyBatis的学习分为两步:
- 搭建MyBatis的开发环境
- 使用MyBatis模式和语法操作数据库
2. 搭建MyBatis的开发环境
2.0 MySQL建库建表
虽然后端代码可以建库建表,但是一般是不会在后端建库建表的
因为前后端约定接口的时候,有哪些数据库和有哪些表都是确定下来的,直接创建即可,在后端进行判定是否存在来进行创建是没有必要的~
这里我建立一个数据库做测试用:
接下来就是一些表和一些数据了,这里我就直接用之后JavaEE进阶版本的博客系统需要用到的表和数据了~
- 放在.sql文件里面
- 方便编辑,不易出错
- 方便后期查看和重复使用
代码地址:test.sql · 游离态/马拉圈2023年8月 - 码云 - 开源中国 (gitee.com)
- 直接粘贴进去~
OK~
后面的操作针对用户表userinfo:
2.1 新项目添加MyBatis框架
创建时勾选MyBatis框架依赖:
MyBatis操作什么数据库呢?
- MySQL Driver,联系MySQL的依赖
也就是MySQL的JDBC依赖,这样,这个项目MyBatis就是针对MySQL JDBC的了
耐心等待~
如果你觉得这两个原本红色不舒服,可以ctrl 选中两个文件,然后添加到Git里:
这样就是绿的~
2.2 设置MyBatis的配置
直接运行项目,会报错~
这是因为加入MySQL Driver后, 没有告知项目是哪个数据源 ,也就是哪个具体的数据库服务器的那一个数据库
- 网络上别的地方的某个数据库
- 本地的某个数据库
这时的
- “保存一个用户信息,id为1,username为小马”没告知数据库,
- 就等同于“叫一份外卖,来一碗螺蛳粉”没告知取货地址一样~
错误信息也差不多那个意思:
2.2.1 设置数据库的连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test_db?characterEncoding=utf8
# MyBatis 基于jdbc实现~ 底层用的就是jdbc:mysql协议,这个地址是本地数据库的地址,test_db就是我们的那个数据库
spring.datasource.username=root
# 用户名,默认固定是root
spring.datasource.password=mmsszsd666
# 密码,是数据库的密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 固定写法,
2.2.2 设置xml的保存路径和命名格式
这些xml文件有什么用具体有什么用后面说,先设置他们在哪和叫什么就行,这样MyBatis框架就能找到它们~
- 这个目录要自己去创建,叫啥都ok
*Mapper
代表的是任意长度的字符串,并且以Mapper.xml结尾
- 即xxxMapper.xml
2.2.3 有其他配置
可参考:SSM常用配置.txt · 游离态/马拉圈2023年8月 - 码云 - 开源中国 (gitee.com)
- 很多,感兴趣的或者有需要的可以去官方了解一下,这里有个推荐的
例如配置,执行SQL语句时,打印SQL相关日志
建议这些常用的配置写在自己的git里面的代码片段里,方便查看
3. 根据MyBatis的写法完成数据库的操作
本文就演示一次基本写法,下一篇文章讲解更多细节以及【增删改查CRUD】各个操作~
常规的写法,包含两个文件:
- 接口:方法的声明(给Service调用)
- XML:实现接口
实现一个查询的操作:
3.1 创建一个接口
数据持久层的包名叫mapper(映射器,映射工具),MyBatis的动作是mapping嘛~
而这个注解也不是普通的接口,我们要用一个注解修饰:
- 并不是@Repository,而是一个新的注解@Mapper
- @Repository下线了✿✿ヽ(°▽°)ノ✿
@Mapper就是数据持久层的标志~
3.2 实体类UserInfo
补充:数据库表的实体类定义在model里
- 数据库的数据,以model里面的类作为载体
3.3 接口中声明方法
有了实体类后,就可以在接口里声明方法了~
3.4 在对应的路径下创建xml
- 位置在之前创建的目录下
resources.mybatis
- 名字要起之前规定的命名方式!
*Mapper.xml
至于这个*
可以是任何正常的字符串来命名,因为这个xml跟接口的映射关系不是根据这个名字的~
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
</mapper>
- 直接复制这个模板就行了~
- 建议保存在代码片段,方便后期查找
mapper属性namespace的值就是对应我们的接口的呀
3.5 在xml中实现方法
这里用到select标签
-
属性id
- 代表重写的方法名
-
另一个属性,你甭管是什么,下节课讲细节,你就看好了~
- 设置resultType属性为一个类,也就是我们返回的类,这里不是List,而是其泛型,也就是实体类,因为实体类才是其核心,如果结果有多个,自然是集合List
-
标签的内部就是执行的sql语句
<select id="getAll" resultType="com.example.demo.model.UserInfo">
select * from userinfo
</select>
这样写就代表了,重写getAll方法为从配置文件中的数据库里的【表userinfo】中查询sql语句后的结果打包成UserInfo集合返回
3.6 检验是否成功
一般数据持久层是service层调用的,所以创建一个service包,一个TestService类:
通过属性注入的获得userMapper接口对象
- 这个时候,这个接口对象的getAll方法已经被重写了(根据那个xml)
调用userMapper的getAll方法~
根据Spring MVC的原理,只有controller层能与接受请求,返回响应,你也发现了只有@RestController没有其他的@RequestService…
- 属性注入获取对应的TestService的Bean对象
调用testService的getAll方法~
- 在这里你就可能感受到了Spring从系统拿对象的特性了,还有“套娃”…
浏览器访问效果:
- List对象返回的json字符串一定带
[ ]
的,无论List里面有0个数据还是1个数据还是多少个数据~IDEA控制台:
- 设置了执行sql就打印相关日志
数据库表的内容:
是不是很方便😀😀😀
- 下一篇文章,就是讲解为什么会这样,逻辑是咋样的,一些细节,以及其他的操作的实现!
4. 推荐的插件MyBatisX
一旦项目大了,mapper里的接口会变多,相应的xml文件也会变多,谁绑定了谁找起来也挺麻烦的
- 如果是xml到mapper,那就比较简单,直接Ctrl点击跳转:
- 但是如果是mapper到xml,则不能跳转,得一个个去找~
- 没有绑定xml的信息~
现在有一个插件,MyBatisX:
安装后,mapper的旁边就会出现一只蓝巾鸟,xml文件旁边就会出现一只红巾鸟
而在代码里,mapper代码的左边栏是一只红巾鸟,xml代码的左边栏则是一只蓝巾鸟
- 当然不会影响打断点~
在mapper代码中点击红巾鸟图案,代表mapper的蓝巾鸟就会去找这只鸟,也就是xml文件,反之,xml中点击鸟图案,就去找另一只鸟,也就是mapper接口
这样就可以快速找到对应的xml和接口了!
文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆!在接下来的MyBatis文章中,将会有更深入的讲解!
代码位置:mybatis_demo/src/main · 游离态/马拉圈2023年8月 - 码云 - 开源中国 (gitee.com)