MyBatis动态代理和映射器

目录

什么是mapper动态代理?

动态代理的规范

如何使用动态代理

为什么学习映射器

映射器与接口:

映射器的引入

映射器的组成

Select元素结构:

参数传递

多个参数传递

insert元素结构:

主键回填:

为什么要使用resultMap元素

什么是级联?


什么是mapper动态代理?

在接口中有方法的返回值定义,参数的定义,方法名,在sqlMapper.xml 中也对应这接口给予了赋值,这时候dao的实现类就显得多余,这是Mybatis可以帮助我们自动产生实现类,并可以调取方法得到结果,这就是Mybatis的mapper动态代理

动态代理的规范

Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。

Mapper接口开发需要遵循以下规范:

1. Mapper.xml文件中的namespace与mapper接口的类路径相同。

2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同

3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同

4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

如何使用动态代理

使用SqlSession的方法getMapper() 让Mybatis自动生成对应接口的实现对象。

为什么学习映射器

半自动化的体现:配置 SQL 语句,体现了半自动化 和灵活性。

ORM的体现:对象关系映射的实现,数据库表和 POJO 类的映射关系。

映射器与接口:

映射器配置文件和接口绑定:配置文件名对应接口名,id 属性值对应方法名。

映射器的引入

文件路径:用相对路径引入映射器:

<mapper resource=”com/codeup/dao/Mapper.xml”/>

XML:用文件定位符引入映射器:

<mapper url=”file:///var/mappers/Mapper.xml”/>

包名:用包名引入映射器:

<package name=”com.codeup.dao.Mapper”/>

注册类:用类名引入映射器:

<mapper class=”com.codeup.mapper.NewsMapper”/>

映射器的组成

Select元素结构:

属性

说明

id

唯一标识,接口中的方法名;

parameterType

参数的类型;

resultType

结果的类型;

resultMap

复杂的结果集映射关系;

参数传递

XML文件中:配置文件中利用 parameterType 属性设置参数类型,利用#{}设置参数的使用及位置。

接口中:接口中,按照方法的入参方式指定参数类型和参数名称。

输出pojo对象,简单参数,pojo参数

小于:原符号<       替换符号<

小于等于:原符号<=       替换符号<=

多个参数传递

方法1:Map方式

方法2:JavaBean方式

方法3:param数 (数从1开始)

方法4:arg数 (数从0开始)

方法5:@Param

insert元素结构:

属性

说明

id

唯一标识,接口中的方法名;

parameterType

参数的类型;

keyProperty

表示以哪个列作为属性的主键,

不能和keyColumn 同时使用;

keyColumn

指明哪一列是主键,不能和 keyProperty 同时使用;

useGeneratedKeys

使用 JDBC 的 getGeneratedKeys 方式来取有数据库内部生成的主键;(主键回填)

主键回填:

功能:当主键在数据库中为自增字段时,新增成功后,回

填主键。

为什么要使用resultMap元素

定义映射规则:ORM 的特性,POJO 类和数据库的映射关系;

级联操作:多表存在主外键关系时,主表和从表之间的关联操作;

类型转换:数据库字段的类型和 POJO 类属性的类型转换

一对一映射:<associaction>

一对多映射:<collection>

一对一级联映射<association property=””,javaType=””>

一对多级联映射<collection property=””,ofType=””>

使用ofType指定集合中的元素类型

什么是级联?

指多个对象之间的映射关系,建立数据之间的级联关系提高管理效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值