这里写目录标题
- 入门
- 第一个程序
- 步骤
- 配置sql,建立数据库连接
- jdbc
- 数据库连接池
- 简介
- 连接池的切换
- 总结
- lombok
- Mybatis基础操作(注解)
- 准备工作
- 类型对应
- 删除
- 简介
- 具体代码
- 预编译
- 简介
- 优点
- 优点1
- 优点2
- 预编译的实现
- 总结
- 新增
- 简介
- 具体代码
- 新增(主键返回)
- 更新
- 简介
- 具体代码
- 查询(根据ID)
- 简介
- 具体代码
- bug
- 简介
- 解决方案
- 着重采用方案三
- 查询(根据条件)
- 简介
- 具体代码
- 基础操作(xml映射文件)
- 简介
- 配置
- 总结
- 动态SQL
- 问题分析
- if标签
- 概要
- 补充
- 总结
- foreach标签
- 简介
- 案例,一般用于批量操作
- sql include标签
- 简介
- 小结
入门
第一个程序
步骤
注意这里主方法是一个接口,上面要加一个Mapper注解,这样就可以系统生成一个实例化对象,并放入IOC池中,成为bean
通过依赖注入的方式,实例化接口,激活接口,之后在测试类中调用接口方法,得到返回值,并通过stream流遍历
配置sql,建立数据库连接
jdbc
数据库连接池
简介
连接池的切换
总结
lombok
用于简化实体类的代码量
效果:
Mybatis基础操作(注解)
准备工作
类型对应
类名与表名保持一致
删除
简介
具体代码
在mapper包下的接口中,定义一个方法,因为是在接口中,所以是抽象方法,没有方法体
之后在方法上面加一个注解,如果是删除,就加删除注解@Delect(“”)
引号里面写具体的sql语句
这里注意有一个变量定义方法:#{id},这里会把抽象方法的参数传入进来
之后去测试类当中,依赖注入,测试调用即可
预编译
简介
传递给数据库的是一个待填入数据的占位符,是一个问号
优点
优点1
优点2
更加安全
例子
sql注入,对于不是预编译的代码,会采用拼接的方式,这样就有bug,可以通过填入的数据更改代码逻辑,如下
经过数据拼接,数据逻辑被更改,所以不安全,而预编译就不会有这样的bug
预编译的实现
一般采用第一个
总结
新增
简介
具体代码
在接口中,当参数有多个时,可以用一个实体类进行封装,之后在注解的语句中,直接#{类的属性值}
而在测试类中,需要定义该类的对象,之后对该对象赋值,并调用接口的对应方法,如下图
(注意上方还有一个依赖注入,用来创建接口对象)
新增(主键返回)
用于添加完数据之后,返回一个主键
代码
这是接口中,在接口上方加入注解 true表示启用注解,id表示将主键封装到对象的id属性中
(注意上方还有一个依赖注入,用来创建接口对象)
之后在测试类中可以输出对象的id,也就是主键,
因为接口包是用来跟数据库联系的,所以接口中只能完成与数据库的联系操作,其他操作大部分放在册数类中进行
而,测试类中利用接口调用方法的操作,实际上可以理解为上传数据至数据库
更新
简介
具体代码
接口中与添加操作差不多,都是利用实体类进行编码
(注意上方还有一个依赖注入,用来创建接口对象)
测试类中,也是创建类的对象,利用对象赋值,这样数据就被封装进了对象里,再利用接口调用方法
查询(根据ID)
简介
具体代码
这是接口中的代码,直接创建一个方法,方法的返回值类型是一个实体类,参数是id值,意思为将查询到的数据封装到一个对象当中
(注意上方还有一个依赖注入,用来创建接口对象)
这是测试类,创建测试方法之后,调用接口方法返回一个对象,直接输出该对象。(之所以可以直接输出该对象,是因为该对象的类在定义时有toString方法,所以直接输出对象,可以输出可读信息)
bug
简介
当数据库中的字段名与实体类的属性名不一致的时候,无法完成自动封装
解决方案
具体代码
着重采用方案三
适用于数据库的字段名与实体类的属性名,区别在于下划线
例如 数据库字段名:user_name 实体类属性名:userName
直接在resources下 application里配置打开自动转换开关,设置为true即可
查询(根据条件)
简介
具体代码
接口方法
这里采用一个拼接函数,可以将字符串拼接起来,防止#{}出现在引号当中,引起错误
因为查询到不止一条记录,所以返回不止一个对象,所以要用一个list<类>集合来保存返回值,参数是查询的条件
(注意上方还有一个依赖注入,用来创建接口对象)
测试类当中,直接传入参数即可
基础操作(xml映射文件)
简介
配置
在resources文件下创建一个包,右键选择Directory 之后不要用点分隔,而是用/,如上图
之后右键创建文件,文件名与接口类的名字保持一致
进入该文件之后,要先去官网复制下来一段配置文本,直接搜“Mybatis中文网 找到配置文件即可”(入门 然后下滑,找到如下图标注的部分即可)
再之后按照如上图所示的格式配置sql语句即可
注意先写一个《mapper》
之后在namespace后面是接口的全路径(一般只需配置一次,因为mapper标签在一个xml文件里只有一个,他是最大的标签),在id后面是接口的方法名,在resultType后面是返回值类型,当返回值为一个实体类时,要写全路径
里面sql语句跟注解写sql一样
以下是关于查找全路径的快捷键
这里有一个小技巧
对于接口方法,选中方法名,直接alt+回车,就可以自动在xml文件里生成相关功能的标签(前提是方法名要有其功能相关的单词,例如本图中的update),并且写好了id,如下图
无返回值,就不用再去写其他标签
总结
包的名称要跟接口一致,而不是真正放在同一个包下
动态SQL
问题分析
因为我们的sql语句,对于某些参数设置死了,用户必须去对这些参数赋值,否则会查询不到,或者更新空值等问题
所以需要动态的进行sql语句的控制
if标签
概要
在xml文件中,先ctrl+alt+v 格式化一下sql代码,之后将where改成where标签,里面每一段sql都用if标签判断,test=“” 引号里面写判断条件
补充
在update语句中,要用逗号拼接,所以这里用set标签,会自动去除标签,注意只能自动去除,不能自动添加,所以在编写时,要加上逗号(以及上面where标签内sql语句要加上and)
总结
foreach标签
简介
案例,一般用于批量操作
xml文件
接口方法
测试类
sql include标签
简介
用于提取出重复性强的代码部分,效果相当于java编码中的方法
具体代码