一、概念

java中很重要的原理,底层在SpringAOP深入研究

Mapper动态代理

MyBatis中的Mapper动态代理:不需要写Dao接口的实现类,框架底层使用动态代理可以自动生成Dao接口的实现类,但写的时候必须遵守一定规范

二、实现步骤

2.1 删除Dao实现类,映射文件放在Dao包中

2.2 namespace必须使用接口的全限定名Mapper动态代理

2.3 id必须是方法名Mapper动态代理

2.4 测试类(看成在业务层使用)

Mapper动态代理

Mapper动态代理

2.5改日志文件配置

1.配置到具体文件

Mapper动态代理

2.配置到包

Mapper动态代理

2.6 自动扫包(不用一个一个添加映射)

名字一样就是默认大小写一样

Mapper动态代理

Mapper动态代理

三、查询

3.0 多参数

3.0.1注解

1.给对象起个别名(一个参数可以不用注解)

Mapper动态代理

别名.调用

Mapper动态代理

2.多个参数

给参数起个别名

Mapper动态代理

根据别名接收参数,否则不识别

Mapper动态代理

有普通参数有对象参数,自己用自己的

Mapper动态代理

Mapper动态代理

3.0.2模糊查询(要把#断开

Mapper动态代理

或者concat拼接

Mapper动态代理

3.1 动态SQL

3.1.1 动态添加条件语句

类似于jstl的c标签,解决如下分页问题(组合查询条件sql)

Mapper动态代理

改进如下(条件里直接写属性,sql语句中要用#{}

Mapper动态代理

再改进(省略where 1=1,外面套一个where标签

Mapper动态代理

3.1.2 条件语句多选一(只执行一个

都不满足,什么都不执行

Mapper动态代理

3.1.3 传数组参数和解析

  1. 系统内建好的别名
Mapper动态代理

​ array Array

Mapper动态代理
  1. where id in (1,3,9)

Mapper动态代理

3.1.4 传集合参数和解析

基本类型参数集合Mapper动态代理

Mapper动态代理

对象集合(一般不这么用)Mapper动态代理

Mapper动态代理

3.1.5 条件语句复用

任何一部分拿出来

Mapper动态代理

3.3 分页查询

  1. mybatis无法直接查询pagebean,只能查询List

  2. 分页要pageBean,去service层去装配,在test层模拟

  3. 查询总条数和数据是两个独立的方法

  4. 条件语句复用(查多少条和查这些条数据对象)

    一个参数的也起了一样的别名,为了可以复用语句

    Mapper动态代理

Mapper动态代理

复用的代码提出来做成片段(自己把resultType加上)

3.3.1查数量

Mapper动态代理

3.3.2 查这些条对象

无法在语句里进行page的计算,在service里算好传过来

Mapper动态代理

3.3.2 实例

Mapper动态代理

3.4 多表查询

3.4.1一对多

3.4.1.1直接使用连接查询(使用resultMap转换标签)

1.查一个

Mapper动态代理

2.查全部

和查一个的转换器是一样的

Mapper动态代理

3.4.1.2 分步查询(子查询)

1.查一个(第一个查的结果里一定要有did,才能传给下面的二次查询,没有did不报错,但只能进行到第一步)

一次查询查不完就不能用resultType

Mapper动态代理

2.查全部

3.4.2 多对一

3.4.3 多对多

3.5 需要注意问题

xml里大于可以识别

Mapper动态代理

小于会被当做标签嵌套无法识别,要用转义字符

Mapper动态代理

相关文章: