MyBatis使用resultMap自定义映射规则与关联映射 -- association -- 分布查询与延迟加载

目录

一、写在前面

二、resultMap自定义映射规则

三、resultMap实现关联映射

方式一:

方式二:在resultMap使用association标签(一对一)

四、分布查询

1、什么时候可以用到分步查询

2、分步查询完成JavaBean 之间关联

DepartmentMapper.xml:

EmployeeMapper.xml:

五、延迟加载

1、什么是延迟加载

2、实现延迟加载

六、一对多 collection


一、写在前面

在MyBatis 的全局配置文件中我们可以通过在settings标签中设置
<setting name="mapUnderscoreToCamelCase" value="true"/>来开启驼峰命名法,实现数据库中的字段名与JavaBean 中属性的关系映射。

在数据库中一般使用单词来定义列名,多个列名之间用’ _ ‘分隔开,比如department_name,在JavaBean 中一般使用驼峰命名来定义属性,所以会定义为departmentName。在默认不开启驼峰命名法的情况下,它们之间是不能够实现关系映射的,在开启对驼峰命名法的支持后,MyBatis 会对数据库中的字段进行驼峰命名转换。

但是有的时候,开启驼峰命名法也不能完成映射,比如数据库字段dept_name对应JavaBean 中的departmentName,这时候就需要我们自定义resultMap关系映射。


二、resultMap自定义映射规则

  • 使用resultMap实现数据库中的dept_name字段与JavaBean 中的departmentName的关系映射。

mapper接口

// 通过id 查询部门信息,返回的是一个Department 对象
    Department getDeptById(Integer id);

sql:

 <!--
   先通过resultMap 定义映射规则
   id:当前命名空间中的一个唯一标识,用于标识一个resultMap 
   type:类的完全限定名, 或者一个类型别名,也就是返回的对应JavaBean 类型
    --> 

<resultMap id="BaseDeptResultMap" type="com.jas.mybatis.bean.Department"> 

     <!-- 
        <id>:与下面<result>标签的区别是可以用于提升性能,所以这里用<id>标签来定义主键的映射关系
        column:数据库中对应的字段名
        property:对应JavaBean 的属性名

        因为可以实现自动映射,所以<id column="id" property="id"/> 在这里也可以省略,
        如果开启了驼峰命名法,对应的映射转换也可以省略
        --> 

    <id column="id" property="id"/> 
    <result column="dept_name"     property="departmentName"/> 
</resultMap> 

<select id="getDeptById" resultMap="BaseDeptResultMap"> 
    SELECT * FROM t_dept WHERE id = #{id} 
</select>

三、resultMap实现关联映射

  • 在根据id 查询员工信息的时候,把员工所在的部门信息也查出来。

Employee员工类:

public class Employee { 
    private Integer id; 
    private String username; 
    private Character gender; 
    private String email; 
    //在Employee 类中定义一个Department 对象,用来封装员工的部门信息 
    private Department department; 

    // 省略get、set 与toString 方法 

}

Department部门类:

public class Department {
    private Integer id;
    private String departmentName;
}  

mapper接口:

    // 根据id 查出员工的信息并把对应的部门信息也查询出来
    Employee getEmpAndDeptById(Integer id);

sql:

方式一:

 <resultMap type="com.jas.mybatis.bean.Employee" id="BaseEmployeeResultMap"> 
    <id column="id" property="id"/> 
    <result column="username" property="username"/>
    <result column="gender" property="gender"/> 
    <result column="email" property="email"/> 
<!-- 
            通过下面两个列名获得数据将封装成Department 对象
            直接通过属性名.属性名的方式指定映射的关系
        --> 
    <result column="d_id" property="department.id"/> 
    <result column="dept_name" property="department.departmentName"/>
</resultMap> 

<select id="getEmpAndDeptById" resultMap="BaseEmployeeResultMap"> 
    SELECT e.id, e.username, e.gender, e.email, e.d_id, d.dept_name 
    FROM t_employee e LEFT JOIN t_dept d 
    ON (e.d_id = d.id) 
    WHERE e.id = #{id} 
</select>

方式二:在resultMap使用association标签(一对一)

 <resultMap type="com.jas.mybatis.bean.Employee"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值