Mybatis的resultMap和分步查询

当数据可以表项名与javaBean的属性不对应的时候,要是符合驼峰命名法可以在全局配置文件开启驼峰命名法的对应关系例如(数据库:last_name,JavaBean : lastName),此外可以查询是进行重命名。

但是resultMap可以自己设置封装规则。如下
在这里插入图片描述
在这里插入图片描述
他的另一个作用就是进行级联查询
进行级联查询:通过id查员工以及所在部门,(部门是外键)
employee 表
在这里插入图片描述
部门表
在这里插入图片描述
想要执行的查询的语句。

select e.id as id,e.last_name as  last_name,e.email as email,e.gender as gender ,
            e.d_id as d_id,d.dept_name as dept_name from dept as d,employee as e where d.id=e.d_id and e.id=5;

在这里插入图片描述

javaBean如下:
在这里插入图片描述
在这里插入图片描述
级联查询赋值时,按照类访问属性的方式进行赋值,
注意:column属性的值是sql语句查询出来的语句。并且id要放在第一位,不然报错。
在这里插入图片描述
级联查询的另一种引用对象赋值方法:

利用association属性进行查询,
<association>属性就是子对象赋值,property是在emloyee类中,哪一个属性是引用类型,javaType是此属性对应的类,然后进行赋值。

在这里插入图片描述


级联查询之分步查询


还是employee和department类两个,属性如下:

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

public class Employee
{
private Integer id;
private String lastName;
private  String email;
private  String gender;
private  Department department;
 }

EmployeeMapper和DepartmentMapper接口

public interface EmployeeMapperPlus {
    public Employee getEmpANndDeptByIdStep(Integer id);
}
public interface DepartmentMapper {
    public Department getDepById(int id);
}

EmployeeMapper.xmlr和DepartmentMapper.xml接口


***employeeMapper***:

   <resultMap id="myMapStep" type="test.Employee">
        <!--   用id和result都可以封装 id定义主键(底部有优化) result封装普通类 -->
        <id column="id" property="id"></id>
        <result column="last_name" property="lastName"></result>
        <result column="email" property="email"></result>
        <result column="gender" property="gender"></result>
        <association property="department" select="com.company.DepartmentMapper.getDepById" column="d_id"></association>
    </resultMap>
    <select id="getEmpANndDeptByIdStep" resultMap="myMapStep">
        select * from employee where id = #{id}
    </select>
    
  ***DepartmentMapper.xml***:
  
<mapper namespace="com.company.DepartmentMapper">
    <select id="getDepById" resultType="test.Department">
        select id,dept_name from dept where id = #{id}
    </select>
</mapper>

在这里插入图片描述
在这里插入图片描述
延迟加载:
像上面的级联查询,只要在需要查询员工的Department时才查询级联的查询,否则只需要查询第一步查询,而不需要查询department。

例如 :         
Employee employee = mapper.getEmpANndDeptByIdStep(5);
System.out.println(employee.getLastName());
只查询第一步,而不查询department。
只需要在全局配置文件里加上如下设置。
    <settings>
        <setting name="aggressiveLazyLoading" value="false"/>
        <setting name="lazyLoadingEnable" value="true"/>
    </settings>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值