一、概念
java中很重要的原理,底层在SpringAOP深入研究
MyBatis中的Mapper动态代理:不需要写Dao接口的实现类,框架底层使用动态代理可以自动生成Dao接口的实现类,但写的时候必须遵守一定规范
二、实现步骤
2.1 删除Dao实现类,映射文件放在Dao包中
2.2 namespace必须使用接口的全限定名
2.3 id必须是方法名
2.4 测试类(看成在业务层使用)
2.5改日志文件配置
1.配置到具体文件
2.配置到包
2.6 自动扫包(不用一个一个添加映射)
名字一样就是默认大小写一样
三、查询
3.0 多参数
3.0.1注解
1.给对象起个别名(一个参数可以不用注解)
别名.调用
2.多个参数
给参数起个别名
根据别名接收参数,否则不识别
有普通参数有对象参数,自己用自己的
3.0.2模糊查询(要把#断开)
或者concat拼接
3.1 动态SQL
3.1.1 动态添加条件语句
类似于jstl的c标签,解决如下分页问题(组合查询条件sql)
改进如下(条件里直接写属性,sql语句中要用#{})
再改进(省略where 1=1,外面套一个where标签)
3.1.2 条件语句多选一(只执行一个)
都不满足,什么都不执行
3.1.3 传数组参数和解析
- 系统内建好的别名
array Array
- where id in (1,3,9)
3.1.4 传集合参数和解析
基本类型参数集合
对象集合(一般不这么用)
3.1.5 条件语句复用
任何一部分拿出来
3.3 分页查询
-
mybatis无法直接查询pagebean,只能查询List
-
分页要pageBean,去service层去装配,在test层模拟
-
查询总条数和数据是两个独立的方法
-
条件语句复用(查多少条和查这些条数据对象)
一个参数的也起了一样的别名,为了可以复用语句
复用的代码提出来做成片段(自己把resultType加上)
3.3.1查数量
3.3.2 查这些条对象
无法在语句里进行page的计算,在service里算好传过来
3.3.2 实例
3.4 多表查询
3.4.1一对多
一对多的集合属性又叫域属性
3.4.1.1直接使用连接查询(使用resultMap转换标签)
1.查一个
2.查全部
和查一个的转换器是一样的
3.4.1.2 分步查询(子查询)
1.查一个(第一个查的结果里一定要有did,才能传给下面的二次查询,没有did不报错,但只能进行到第一步)
一次查询查不完就不能用resultType
2.查全部
3.4.2 多对一(也就是一对一)
1.全连接
2.子查询
3.4.3 一对一(三张表)
1.全连接
2.子查询
3.4.4 多对多
1.全连接查询
根据学生编号查对应的所有课程
2.子查询
根据学生编号查对应的所有课程,需要成绩中间表来连接
如果还想把成绩也展示出来,再嵌套一个resultMap即可
3.5 需要注意问题
xml里大于可以识别
小于会被当做标签嵌套无法识别,要用转义字符