创建数据库t_emp和t_dept

创建对应实体类

package org.example.entity;

public class Emp {
private Integer empId;
private String empName;
private Integer age;
private String gender;
private Dept dept; public Emp() {
} public Emp(Integer empId, String empName, Integer age, String gender, Dept dept) {
this.empId = empId;
this.empName = empName;
this.age = age;
this.gender = gender;
this.dept = dept;
} public Integer getEmpId() {
return empId;
} public void setEmpId(Integer empId) {
this.empId = empId;
} public String getEmpName() {
return empName;
} public void setEmpName(String empName) {
this.empName = empName;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getGender() {
return gender;
} public void setGender(String gender) {
this.gender = gender;
} public Dept getDept() {
return dept;
} public void setDept(Dept dept) {
this.dept = dept;
} @Override
public String toString() {
return "Emp{" +
"empId=" + empId +
", empName='" + empName + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", dept=" + dept +
'}';
}
}
package org.example.entity;

public class Dept {
private Integer deptId;
private String deptName; public Dept() {
} public Dept(Integer deptId, String deptName) {
this.deptId = deptId;
this.deptName = deptName;
} public Integer getDeptId() {
return deptId;
} public void setDeptId(Integer deptId) {
this.deptId = deptId;
} public String getDeptName() {
return deptName;
} public void setDeptName(String deptName) {
this.deptName = deptName;
} @Override
public String toString() {
return "Dept{" +
"deptId=" + deptId +
", deptName='" + deptName + '\'' +
'}';
}
}

mapper接口

public Emp getEmpAndDeptByEmpId(@Param("empId") Integer empId);

处理方式一:级联方式处理

mapper.xml

 <resultMap id="empAndDeptResultMap" 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>
<result column="dept_id" property="dept.deptId"></result>
<result column="dept_name" property="dept.deptName"></result>
</resultMap> <select id="getEmpAndDeptByEmpId" resultMap="empAndDeptResultMap">
SELECT t_emp.*,t_dept.dept_name FROM t_emp left join t_dept on t_emp.dept_id = t_dept.dept_id where t_emp.emp_id = #{empId}
</select>

处理方式二:使用association

mapper.xml

<resultMap id="empAndDeptResultMap" 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>
<!--
association:处理多对一的映射关系(处理实体类类型的属性)
property:设置需要处理映射关系的属性的属性名
javaType:设置需要处理的属性的类型
-->
<association property="dept" javaType="Dept">
<id column="dept_id" property="deptId"></id>
<result column="dept_name" property="deptName"></result>
</association>
</resultMap> <select id="getEmpAndDeptByEmpId" resultMap="empAndDeptResultMap">
SELECT t_emp.*,t_dept.dept_name FROM t_emp left join t_dept on t_emp.dept_id = t_dept.dept_id where t_emp.emp_id = 1
</select>

测试代码

处理方式三:分步查询

创建EmpMapper

public interface EmpMapper {

   public Emp getEmpAndDeptByStepOne(@Param("empId") Integer empId);
}

创建DeptMapper

public interface DeptMapper {

    Dept getEmpAndDeptByStepTwo(@Param("deptId") Integer deptId);
}

EmpMapper.xml

<resultMap id="empAndDeptByStepResultMap" 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>
<!--
property:设置需要处理映射关系的属性的属性名
select:设置分布查询的sql的唯一标识
column:将查询出的某个字段作为分布查询的sql的条件
-->
<association property="dept" column="dept_id" select="org.example.mapper.DeptMapper.getEmpAndDeptByStepTwo">
<id column="dept_id" property="deptId"></id>
<result column="dept_name" property="deptName"></result>
</association>
</resultMap> <select id="getEmpAndDeptByStepOne" resultMap="empAndDeptByStepResultMap">
select *
from t_emp where emp_id = #{empId};
</select>

DeptMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.mapper.DeptMapper"> <select id="getEmpAndDeptByStepTwo" resultType="dept">
select * from t_dept where dept_id = #{deptId}
</select>

</mapper>

测试代码

  @Test
public void testGetEmpAndDeptByStepOne(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = mapper.getEmpAndDeptByStepOne(2);
System.out.println(emp);
sqlSession.close();
}

mybatis懒加载全局配置

    <settings>
<!--标准的日志-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--开启懒加载(开启延迟加载)-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--关闭实时加载-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>

最新文章

  1. 如何通过官方渠道为Windows 10 添加具有中国特色的字体
  2. PHP中静态(static)调用非静态方法详解
  3. matlab 按照某列以行为单位进行排序
  4. CSS background-position 问题
  5. MyEclipse中的重命名
  6. C++公有继承
  7. delphi 设置超链接
  8. 生产环境下JAVA进程高CPU占用故障排查
  9. 长沙Uber优步司机奖励政策(1月25日~1月31日)
  10. 爱的歌我uhegierhiuerh5怕哦一
  11. spring Annotation 组分注塑
  12. 探索Scala(1)-- 运算符重载
  13. zoj1871steps 数学 水
  14. Java学习之计算机基础(二)
  15. Django Rest Framework(二)
  16. c++给数组整体赋初值
  17. linux-CentOS初学terminal命令(2)vi、gcc、g++、./、mv、cp、ifconfig
  18. ESP8266 wifi干扰、钓鱼实现
  19. Codeforces 1009D:Relatively Prime Graph
  20. 通过TortoiseGit来使用Github或Visual Studio Online版本控制管理

热门文章

  1. 多线程爬取wallhaven
  2. vivo 游戏中心低代码平台的提效秘诀
  3. 学习js的一些笔记
  4. [机器学习] Yellowbrick使用笔记8-模型选择可视化
  5. SQLSERVER 的主键索引真的是物理有序吗?
  6. [C++标准模板库:自修教程与参考手册]关于auto_ptr
  7. GreenPlum批量授权(PG未测试)
  8. 手把手教你图文并茂windows10安装VMware创建CentOS-7-x86_64运行linux系统
  9. Java基础学习笔记-关键字、标识符、分隔符
  10. IO多路复用完全解析