目录 1.使用全局配置处理字段名和属性名不一致的情况 2.resultMap处理字段和属性的映射关系 1.处理一对一映射 2.多对一映射处理 级联方式处理映射关系 使用association处理映射关系 分步查询 3.一对多映射处理 1.
目录
建立 t_emp 表,并添加数据:
建立 t_dept 表,并添加数据:
实体类:Emp
package com.atguigu.mybatis.pojo;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 + '}'; }}
实体类:Dept
package com.atguigu.mybatis.pojo;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 + '\'' + '}'; }}
接口:
public interface EmpMapper { Emp getEmpById(@Param("empId") Integer empId);}
SQL:
select * from t_emp where emp_id = #{empId};
测试:
public void test(){ sqlSessionUtils sqlSessionUtils = new SqlSessionUtils(); SqlSession sqlSession = sqlSessionUtils.getSqlSession(); EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); Emp empById = mapper.getEmpById(1); System.out.println(empById.toString()); }
运行结果:
原因:JAVA中属性名 与 数据库中字段名不一致
select emp_id empId,emp_name empName,age,gender from t_emp where emp_id = #{empId};
例如:字段名user_name,设置了mapUnderscoreToCamelCase,此时字段名就会转换为 userName select * from t_emp where emp_id = #{empId};
resultMap:设置自定义映射
接口:
Emp getEmpAndDeptById(@Param("empId") Integer empId);
测试:
public void test2(){ SqlSessionUtils sqlSessionUtils = new SqlSessionUtils(); SqlSession sqlSession = sqlSessionUtils.getSqlSession(); EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); Emp empAndDeptById = mapper.getEmpAndDeptById(1); System.out.println(empAndDeptById); }
①查询员工信息
Emp getEmpAndDeptByStep(@Param("empId") Integer empId);
select:设置分步查询,查询某个属性的值的sql的标识(namespace.sqlid) column:将sql以及查询结果中的某个字段设置为分步查询的条件②根据员工所对应的部门 id 查询部门信息
Dept getDeptByStep(@Param("deptId") Integer deptId);
测试:
public void test3(){ SqlSessionUtils sqlSessionUtils = new SqlSessionUtils(); SqlSession sqlSession = sqlSessionUtils.getSqlSession(); EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); Emp empAndDeptByStep = mapper.getEmpAndDeptByStep(1); System.out.println(empAndDeptByStep); }
分步查询的优点:可以实现延迟加载 但是必须在核心配置文件中设置全局配置信息:此时就可以实现按需加载,获取的数据是什么,就只会执行相应的 sql 。 此时可通 association和 collection 中的 fetchType 属性设置当前的分步查询是否使用延迟加载, fetchType="lazy(延迟加载) | eager(立即加载)"
- lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载
- aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载
测试:
public void test3(){ SqlSessionUtils sqlSessionUtils = new SqlSessionUtils(); SqlSession sqlSession = sqlSessionUtils.getSqlSession(); EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); Emp empAndDeptByStep = mapper.getEmpAndDeptByStep(1); System.out.println(empAndDeptByStep.getEmpName()); }
未开启延迟加载(执行了2次SQL):
开启延迟加载:
执行了1次SQL:
接口:
Dept getDeptAndEmpByDeptId(@Param("deptId") Integer deptId);
实体类中,添加 emps集合:
DeptMapper.xml:
collection :设置一对多的映射关系 ofType :设置 collection 标签所处理的集合属性中存储数据的类型
测试:
public void test4(){ SqlSessionUtils sqlSessionUtils = new SqlSessionUtils(); SqlSession sqlSession = sqlSessionUtils.getSqlSession(); DeptMapper mapper = sqlSession.getMapper(DeptMapper.class); Dept deptAndEmpByDeptId = mapper.getDeptAndEmpByDeptId(1); System.out.println(deptAndEmpByDeptId); }
运行结果:
Dept getDeptAndEmpByStepOne(@Param("deptId") Integer deptId);
②根据部门 id 查询部门中的所有员工 List getDeptAndEmpByStepTwo(@Param("deptId") Integer deptId);
测试:
public void test5(){ SqlSessionUtils sqlSessionUtils = new SqlSessionUtils(); SqlSession sqlSession = sqlSessionUtils.getSqlSession(); DeptMapper mapper = sqlSession.getMapper(DeptMapper.class); Dept deptAndEmpByStepOne = mapper.getDeptAndEmpByStepOne(1); System.out.println(deptAndEmpByStepOne); }
来源地址:https://blog.csdn.net/Javascript_tsj/article/details/127060402
--结束END--
本文标题: 【MyBatis】自定义映射resultMap
本文链接: https://www.lsjlt.com/news/390114.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0