MyBatis一对多映射关系的处理及分步查询的优点

简介: MyBatis一对多映射关系的处理及分步查询的优点

一、一对多映射关系的处理


       这里一对多是指实体类中某个属性是由许多实体类构成的集合,如部门类中员工属性是一个List集合


方式一:使用<collection>标签


<resultMap>配置:


<resultMap id="getDeptAndEmpByDeptIdResultMap" type="Dept">
    <id column="dept_id" property="deptId"></id>
    <result column="dept_name" property="deptName"></result>
    <collection property="emps" ofType="Emp">
        <id column="emp_id" property="empId"></id>
        <result column="emp_name" property="empName"></result>
        <result column="age" property="age"></result>
        <result column="gender" property="gender"></result>
    </collection>
</resultMap>
<select id="getDeptAndEmpByDeptId"
resultMap="getDeptAndEmpByDeptIdResultMap">
    select *
    from t_dept left join t_emp
    on t_dept.dept_id = t_emp.dept_id
    where t_dept.dept_id = #{deptId}
</select>


方式二:使用分步查询


<resultMap>配置:


查询部门信息


<resultMap id="getDeptAndEmpByDeptIdResultMap" type="Dept">
    <id column="dept_id" property="deptId"></id>
    <result column="dept_name" property="deptName"></result>
    <collection property="emps"
select="com.liaoxiangqian.mapper.EmpMapper.getEmpByDeptId"
        column="dept_id">
</collection>
</resultMap>
<select id="getDeptAndEmpByDeptId"
resultMap="getDeptAndEmpByDeptIdResultMap">
    select * from t_dept where dept_id = #{deptId}
</select>


根据部门id查询员工信息


<resultMap id="getEmpByDeptIdResultMap" type="Emp">
    <id column="emp_id" property="empId"></id>
    <result column="emp_name" property="empName"></result>
    <result column="age" property="age"></result>
    <result column="gender" property="gender"></result>
</resultMap>
<select id="getEmpByDeptId" resultMap="getEmpByDeptIdResultMap">
    select * from t_emp where dept_id = #{deptId}
</select>


二、分步查询的优点


● 分布查询的优点是可以实现延迟加载


● 延迟加载可以避免在分步查询中执行所有的SQL语句,节省资源,实现按需加载


● 需要在核心配置文件中添加如下的配置信息


<settings>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"/>
</settings>


● lazyLoadingEnabled表示全局的延迟加载开关,true表示所有关联对象都会延迟加载,false表示关闭


● aggressiveLazyLoading表示是否加载该对象的所有属性,如果开启则任何方法的调用会加载这个对象的所有属性,如果关闭则是按需加载


● 由于这个配置是在核心配置文件中设定的,所以所有的分步查询都会实现延迟加载,而如果某个查询不需要延迟加载,可以在collection标签或者association标签中的fetchType属性设置是否使用延迟加载,属性值lazy表示延迟加载,属性值eager表示立即加载


目录
相关文章
|
7天前
|
SQL 缓存 Java
mybatis 一对多查询
mybatis 一对多查询
17 0
|
14天前
|
SQL
MyBatis-Plus-Join关联查询
MyBatis-Plus-Join关联查询
|
14天前
|
SQL XML Java
MyBatis-Plus多表关联查询
MyBatis-Plus多表关联查询
|
3天前
|
Java 数据库连接 mybatis
mybatis的一对多
mybatis的一对多
|
12天前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
31 4
|
18天前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
19天前
|
SQL XML API
Mybatis-Plus实现查询操作
Mybatis-Plus实现查询操作
18 0
Mybatis-Plus实现查询操作
|
20天前
|
Java 数据库连接 mybatis
MyBatis-Plus查询工具类
MyBatis-Plus是一个MyBatis的增强工具类库,提供了许多实用的查询工具类。
7 0
|
2月前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
78 1
|
15天前
|
XML Java 数据库连接
Spring Boot与MyBatis:整合与实战
【4月更文挑战第29天】在现代的Java Web应用开发中,持久化层框架扮演了至关重要的角色。MyBatis作为一款优秀的持久化框架,被广泛应用于Java开发中。Spring Boot提供了简化开发流程的功能,而与MyBatis的整合也变得更加便捷。
24 0