MyBatis的 Mapper.xml 映射器的详解
1 Schema约束
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
以及映射器的头部信息
<?xml version="1.0" encoding="UTF-8"?>
2 Mapper 根节点
唯一的一个根节点:mapper, 里面只有一个属性, namespace, 命名空间。,值一般为是所在的包路径,或者是 XxxMapper.java 接口所在的包路径。
<mapper namespace="com.hncj.dao.IUserDao" >
3 下属节点
3.1 标签
在根节点 mapper 下的常用节点有:
select | 可以自定义参数,返回结果集 |
---|---|
insert | 插入语句 返回所影响的行数 |
update | 更新语句 返回所影响的行数 |
delete | 删除语句 返回所影响的行数 |
3.2 标签属性
id | 接口层的方法名 |
---|---|
parameterType | SQL语句的参数,可以是自定义类型 |
resultType | SQL语句执行后,返回的结果,可以是自定义类型,自动匹配表字段和类属性 |
resultMap | 映射集的引用,resultMap可以自定义表字段和类属性之间的映射关系 |
4 resultMap结果映射集
可以定义 表字段 和 类属性 映射规则、级联的更新
4.1 resultMap属性
属性名 | 作用 |
---|---|
id | 唯一标识这个resultMap |
type | 封装结果的类型,既结果集的返回值类型 |
<resultMap id="userAccountMap" type="user">
4.2 resultMap 子标签
元素 | 作用 |
---|---|
id | 将结果集标记为id,以方便全局调用 |
result | 配置 数据库表列名 和 类属性 映射关系 |
association | 级联使用 代表一对一关系 |
collection | 级联使用 代表一对多关系 |
一对多的 resultMap配置
<resultMap id="userAccountMap" type="user">
<!--
id 属性用于唯一标识这个 resultMap,
type属性用于封装SQL语句执行后的返回值结果的数据类型
-->
<id property="id" column="id"></id>
<!-- id 标签一般是该表的主键 -->
<!-- colum对应数据库的字段,property对应实体类的属性 -->
<result property="username" column="username"></result>
<result property="address" column="address"></result>
<result property="sex" column="sex"></result>
<result property="birthday" column="birthday"></result>
<!-- 用于指定从表方的引用实体属性的 -->
<!-- collection 一对多的关系映射-->
<collection property="accounts" ofType="account">
<id column="aid" property="id"></id>
<result column="uid" property="uid"></result>
<result column="money" property="money"></result>
</collection>
</resultMap>
一对一配置
<!-- 定义封装account和user的resultMap -->
<resultMap id="accountUserMap" type="account">
<id property="id" column="aid"></id>
<result property="uid" column="uid"></result>
<result property="money" column="money"></result>
<!-- 用于指定从表方的引用实体属性的 -->
<!-- association 一对多的关系映射-->
<association property="user" column="uid" javaType="user">
<id property="id" column="id"></id>
<result column="username" property="username"></result>
<result column="address" property="address"></result>
<result column="sex" property="sex"></result>
<result column="birthday" property="birthday"></result>
</association>
</resultMap>