Mybatis——resultMap的使用方法
来源:互联网 发布:域名.net 编辑:程序博客网 时间:2024/06/16 22:21
Employee
public class Employee { private Integer id; private String last_name; private String email; private String gender; private Department department; public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } public Employee(Integer id, String last_name, String email, String gender) { super(); this.id = id; this.last_name = last_name; this.email = email; this.gender = gender; } public Employee(){ } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLast_name() { return last_name; } public void setLast_name(String last_name) { this.last_name = last_name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "Employee [id=" + id + ", last_name=" + last_name + ", email=" + email + ", gender=" + gender + "]"; }}
Department
public class Employee { private Integer id; private String last_name; private String email; private String gender; private Department department; public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } public Employee(Integer id, String last_name, String email, String gender) { super(); this.id = id; this.last_name = last_name; this.email = email; this.gender = gender; } public Employee(){ } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLast_name() { return last_name; } public void setLast_name(String last_name) { this.last_name = last_name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "Employee [id=" + id + ", last_name=" + last_name + ", email=" + email + ", gender=" + gender + "]"; }}
接口 EmployeeMapperPlus.java
public interface EmployeeMapperPlus { public Employee getEmpById(Integer id); public Employee getEmpAndDept(Integer id); public Employee getEmpByIdStep(Integer id); public List<Employee> getEmpsByDeptId(Integer deptId);}
接口DepartmentMapper.java
public interface DepartmentMapper { public Department getDeptById(Integer id); public Department getDeptByIdPlus(Integer id); public Department getDeptByIdStep(Integer id);}
EmployeeMapperPlus.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="com.mybatis.dao.EmployeeMapperPlus"> <!--自定义某个javaBean的封装规则 type:自定义规则的Java类型 id:唯一id方便引用 --> <resultMap type="com.mybatis.bean.Employee" id="MySimpleEmp"> <!--指定主键列的封装规则 id定义主键会底层有优化; column:指定哪一列 property:指定对应的javaBean属性 --> <id column="id" property="id"/> <!-- 定义普通列封装规则 --> <result column="last_name" property="last_name"/> <!-- 其他不指定的列会自动封装:我们只要写resultMap就把全部的映射规则都写上。 --> <result column="email" property="email"/> <result column="gender" property="gender"/> </resultMap> <!-- public Employee getEmpById(Integer id); --> <!-- resultMap:自定义结果集映射规则; --> <select id="getEmpById" resultMap="MySimpleEmp"> select * from tbl_employee where id = #{id} </select> <!-- 场景一: 查询Employee的同时查询员工对应的部门 Employee===Department 一个员工有与之对应的部门信息; id last_name gender d_id did dept_name (private Department dept;) --><!-- 联合查询:级联属性封装结果集 --> <resultMap type="com.mybatis.bean.Employee" id="MyDifEmp"> <id column="id" property="id"/> <result column="last_name" property="last_name"/> <result column="gender" property="gender"/> <result column="did" property="department.id"/> <result column="dept_name" property="department.departmentName"/> </resultMap> <!-- 使用association定义关联的单个对象的封装规则; --> <resultMap type="com.mybatis.bean.Employee" id="MyDifEmp2"> <id column="id" property="id"/> <result column="last_name" property="last_name"/> <result column="gender" property="gender"/> <!-- association可以指定联合的javaBean对象 property="dept":指定哪个属性是联合的对象 javaType:指定这个属性对象的类型[不能省略] --> <association property="department" javaType="com.mybatis.bean.Department"> <id column="did" property="id"/> <result column="dept_name" property="departmentName"/> </association> </resultMap> <!--public Employee getEmpAndDept(Integer id); --> <select id="getEmpAndDept" resultMap="MyDifEmp2"> SELECT e.id id,e.last_name last_name,e.gender gender,e.d_id d_id, d.id did,d.dept_name dept_name FROM tbl_employee e,tbl_dept d WHERE e.d_id=d.id AND e.id=#{id} </select> <!-- 使用association进行分步查询: 1、先按照员工id查询员工信息 2、根据查询员工信息中的d_id值去部门表查出部门信息 3、部门设置到员工中; --> <!-- id last_name email gender d_id --> <resultMap type="com.mybatis.bean.Employee" id="MyEmpByStep"> <id column="id" property="id"/> <result column="last_name" property="last_name"/> <result column="email" property="email"/> <result column="gender" property="gender"/> <!-- association定义关联对象的封装规则 select:表明当前属性是调用select指定的方法查出的结果 column:指定将哪一列的值传给这个方法 流程:使用select指定的方法(传入column指定的这列参数的值)查出对象,并封装给property指定的属性 --> <association property="department" select="com.mybatis.dao.DepartmentMapper.getDeptById" column="d_id"> </association> </resultMap> <!-- public Employee getEmpByIdStep(Integer id);--> <select id="getEmpByIdStep" resultMap="MyEmpByStep"> select * from tbl_employee where id=#{id} </select> <!-- 可以使用延迟加载(懒加载);(按需加载) Employee==>Dept: 我们每次查询Employee对象的时候,都将一起查询出来。 部门信息在我们使用的时候再去查询; 分段查询的基础之上加上两个配置: --> <!-- 场景二: 查询部门的时候将部门对应的所有员工信息也查询出来:注释在DepartmentMapper.xml中 --> <!-- public List<Employee> getEmpsByDeptId(Integer deptId); --> <select id="getEmpsByDeptId" resultType="com.mybatis.bean.Employee"> select * from tbl_employee where d_id=#{deptId} </select> <!-- =======================鉴别器============================ --> <!-- <discriminator javaType=""></discriminator> 鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为 封装Employee: 如果查出的是女生:就把部门信息查询出来,否则不查询; 如果是男生,把last_name这一列的值赋值给email; --> <resultMap type="com.mybatis.bean.Employee" id="MyEmpDis"> <id column="id" property="id"/> <result column="last_name" property="last_name"/> <result column="email" property="email"/> <result column="gender" property="gender"/> <!-- column:指定判定的列名 javaType:列值对应的java类型 --> <discriminator javaType="string" column="gender"> <!--女生 resultType:指定封装的结果类型;不能缺少。/resultMap--> <case value="0" resultType="com.mybatis.bean.Employee"> <association property="dept" select="com.mybatis.dao.DepartmentMapper.getDeptById" column="d_id"> </association> </case> <!--男生 ;如果是男生,把last_name这一列的值赋值给email; --> <case value="1" resultType="com.mybatis.bean.Employee"> <id column="id" property="id"/> <result column="last_name" property="last_name"/> <result column="last_name" property="email"/> <result column="gender" property="gender"/> </case> </discriminator> </resultMap> </mapper>
DepartmentMapper.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="com.mybatis.dao.DepartmentMapper"> <!-- public Department getDeptById(Integer id); --> <select id="getDeptById" resultType="com.mybatis.bean.Department"> select id,dept_name departmentName from tbl_dept where id=#{id} </select> <!--嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则 --> <resultMap type="com.mybatis.bean.Department" id="MyDept"> <id column="did" property="id"/> <result column="dept_name" property="departmentName"/> <!-- collection定义关联集合类型的属性的封装规则 ofType:指定集合里面元素的类型 --> <collection property="emps" ofType="com.mybatis.bean.Employee"> <!-- 定义这个集合中元素的封装规则 --> <id column="eid" property="id"/> <result column="last_name" property="last_name"/> <result column="email" property="email"/> <result column="gender" property="gender"/> </collection> </resultMap> <!-- public Department getDeptByIdPlus(Integer id); --> <select id="getDeptByIdPlus" resultMap="MyDept"> SELECT d.id did,d.dept_name dept_name, e.id eid,e.last_name last_name,e.email email,e.gender gender FROM tbl_dept d LEFT JOIN tbl_employee e ON d.id=e.d_id WHERE d.id=#{id} </select> <!-- collection:分段查询 --> <resultMap type="com.mybatis.bean.Department" id="MyDeptStep"> <id column="id" property="id"/> <result column="dept_name" property="departmentName"/> <collection property="emps" select="com.mybatis.dao.EmployeeMapperPlus.getEmpsByDeptId" column="{deptId=id}"></collection> </resultMap> <!-- public Department getDeptByIdStep(Integer id); --> <select id="getDeptByIdStep" resultMap="MyDeptStep"> select id,dept_name from tbl_dept where id=#{id} </select> <!-- 扩展:多列的值传递过去: 将多列的值封装map传递; column="{key1=column1,key2=column2}" fetchType="lazy":表示使用延迟加载; - lazy:延迟 - eager:立即 --> </mapper>
Test
@Test public void test07() throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try { EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class); /* Employee employee = mapper.getEmpById(1);*/ /*Employee empAndDept = mapper.getEmpAndDept(3); System.out.println(empAndDept); System.out.println(empAndDept.getDepartment());*/ //分布查询 Employee employee = mapper.getEmpByIdStep(3); System.out.println(employee.getLast_name()); /*System.out.println(employee.getDepartment());*/ } finally { openSession.close(); } } @Test public void test08() throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try { DepartmentMapper mapper = openSession.getMapper(DepartmentMapper.class); /*Department department = mapper.getDeptByIdPlus(1); System.out.println(department); System.out.println(department.getEmps());*/ //分布查询 Department department = mapper.getDeptByIdStep(2); System.out.println(department); System.out.println(department.getEmps()); } finally { openSession.close(); } }
阅读全文
0 0
- Mybatis——resultMap的使用方法
- MyBatis的ResultMap使用方法,对象关联写法
- 【Mybatis】——ResultMap学习
- MyBatis 的 resultMap实例
- mybatis的resultMap
- MyBatis 的 resultMap 简介
- Mybatis ResultMap的使用
- mybatis的resultmap
- MyBatis 的 resultMap
- mybatis resultMap的使用
- mybatis的resultMap使用
- MyBatis 的 resultMap 简介
- Mybatis的ResultMap详解
- Mybatis的ResultMap用法
- MyBatis的ResultMap
- MyBatis的resultMap简介
- mybatis常用配置——resultMap
- MyBatis——【resultType和resultMap】
- TypeError: object() takes no parameters
- 读书笔记:《演讲的力量(干货版)》
- 【Oracle】NLS_LANG详解
- windows进程(4)
- 指针传递参数的例子
- Mybatis——resultMap的使用方法
- 求十个数中最大的值
- Our Journey of Dalian Ends
- DHCP服务搭建与使用
- sudoers修改不能在终端使用sudo 和su的解决方法
- 机器学习深入与强化--数学基础(1)
- 6. ZigZag Conversion
- ARKit 在点击的平面上生成物体
- 用sqlserver查询数据的所有表名和行数找到餐饮管理软件菜品表名Course