一:什么是Mybatis
二:Mybatis就是简化jdbc代码的
三:Mybatis的操作步骤
1:在数据库中创建一个表,并添加数据
我们这里就省略了
2:Mybatis通过maven来导入坐标(jar包)
3:编写Mybatis的核心配置文件
注意:引用类的时候用.,路径用//
5:编写Mapper.xml的配置文件(对应的实体类自己写)
5:加载配置文件
四:Mapper代理开发
原先我们执行sql语句的时候,要指定哪个sql语句,sql语句一多找起来很麻烦
现在用Mapper代理,就可以自动识别里面的sql语句,这样找起来更方便,就不用手动找了
1:放到同一目录下
2:映射文件命名空间为接口的全名,id就是这个sql语句的功能,对应的实体类就是你写的那个类
3:在Mapper接口中定义方法,方法名与映射文件中的id保持一致,返回值为List<text>(根据编写的sql语句的功能来)
4:进行编码
过程就是:
1:我们获取这个接口的class文件,他就在当前目录下找映射的命名空间与这个接口的全类名一致的映射文件
2:我们调用接口里面的方法,他就到对应的映射文件里面找到方法和id名字对应的sql语句,并封装对应的实体类,返回一个泛型集合,这个泛型根据实体类
接口的全类名对应映射文件的命名空间
接口里面的方法的名字对应映射文件的id
接口里面的方法的返回值对应映射文件的实体类
代理模式(aop):一个代理对应一个老板
我们去找代理,代理找老板
我们告诉代理要干什么,代理在通知老板要干什么
注意
使用指定包时
MyBatis 通过配置的路径直接解析 XML,再根据 namespace
找到对应的接口和id
绑定接口方法,与文件名无关
使用package代理时
XML 文件名必须与接口名一致 如接口 TextMapper.java
需对应 TextMapper.xml
。若不一致,包扫描无法关联两者
XML 需与接口同级目录 编译后,XML 必须位于 target/classes/com/yunlong/mapper/
下
命名空间和 SQL id
要求不变 仍需匹配接口全限定名和方法名
五:Mybatis核心配置文件
可以设置一个别名来简化对应的实体类代码的简写
类型别名简化
- 未配置时:需在Mapper XML中写完整的类路径(如
resultType="com.yunlong.pojo.User"
) - 配置后:只需写类名如
resultType="User"
六:我们先解决数据库中的字段名和实体类中的成员的名字不一样导致不能封装
1:起别名
2:使用sql片段
3:使用resultmap进行映射
把数据库中的字段名和实体类中的成员的名字不一样进行映射,id就是实体类的名字(因为用的package进行代理,所以只需要写实体类的名字就可以了)
column:表的字段名,property:实体类的属性名
七:使用配置文件完成数据库的增删改查
增:
特殊字符处理:
我们是在xml文件里面写的,所以要符合xml文件的语法,如果遇到特殊字符我们使用以下几种方法
1:使用转义字符
2:CDATA区
多条件查询:
写参数的几种方法
1:散装参数
如果方法中有多个参数,那方法中的参数要使用@param("和sql语句的参数相同"),相当于占位符,这样他就知道传入sql语句的参数是哪个了,占位符和sql语句里面参数保持一致
2:使用对象传入,根据成员的参数依次传入,要求实体类的属性名名和sql语句中的参数名保持一致,对应的上就可以
3:使用键的对象传入,键的名字和sql语句参数的名字一致
动态条件查询
1:先判断传进来的属性值是否为空,在拼接sql语句
改进传入参数的bug
第一种:where后面加1=1
第二种:使用where标签
单条件的动态条件查询
从多个条件中选择一个条件查询,选择哪个将拼接哪个
如果用户一个都没选,那么将报错
choose:相当于java里面的switch
when相当于java里面的case
otherwise相当于java里面的default
改进方案:
1:加入一个otherswise如果用户什么都没选将会拼接这个
2:加入where标签也可以,如果用户什么都没选将会去掉where
添加:
代理:
映射文件:
测试类里面的代码
想要返回主键的值,在映射文件中增加这个,它就把id的值存入到了实体类的对象当中
修改:
利用set标签,避免最后一个用户不修改的话,导致语法错误
删除:
我们要批量删除,我们要遍历数组,map会将数组封装成一个map集合,我们写array就可以了,键是array,值为数组,利用键来遍历,或者使用注解
collection:我们要遍历的数组
item:遍历出来的数
separator:分隔符
open和close:开始和结束的标记
参数传递:
我们在方法中传递的参数,映射文件中参数是如何接收方法中传递的参数
单个参数:里面属性要和映射文件的参数的名称要保持一致
多个参数:将参数封装为map集合,键的名称固定的,值就是传过来的值,
我们通过键来获取值,通过注解我们就可以改变键的名称
我们想要传过来的参数在映射文件中使用,只有两种方法
1:使用默认的map的键
2:使用注解来改变map的键,来使用注解的形式
我们在映射文件的sql语句中我们要使用map的键,它会自动来获取对应的值
八:使用注解完成数据库的增删改查
使用注解开发就不需要写映射文件了,直接在代理的方法上面写注解就可以了
他就不找映射文件了,而是找方法上面对应的注解
怎么写:
一个核心配置文件代表多个数据库,可以切换
一个映射文件,代理,实体类代表数据库中的一张表