博主信息
博文 18
粉丝 0
评论 0
访问量 23839
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
Mybatis联合查询的实现方法
原创
734人浏览过

目录
1、级联属性封装结果集
实现
2、分步查询
方法
3、级联属性封装结果集
4、分步查询
数据库表结构

department

employee

要求一
现在的要求是输入 id 把 employee 表的对应员工数据查询出来,并且查询出该员工的所处部门信息
public class Employee { private Integer id; private String lastName; private String email; private String gender; private Department dept; setter和getter....... }
public class Department { private Integer id; private String departmentName; setter和getter....... }
1、级联属性封装结果集

实现
这个要求很明显就要用到两个表,想要把部门信息封装到Employee对象的dept字段需要用到resultMap属性

方法一
`<!-- public Employee getEmployee(int id); -->

<select id="getEmployee" resultMap="emp1">
select e.*, d.id did, d.department_name
from employee e,
department d
where e.d_id = d.id
and e.id = #{id}
</select>

<resultMap id="emp1" type="employee">
<id column="id" property="id"/>
<result column="last_name" property="lastName"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
<result column="did" property="dept.id"/>
<result column="department_name" property="dept.departmentName"/>
</resultMap>方法二<!-- public Employee getEmployee(int id); -->

<select id="getEmployee" resultMap="emp2">
select e.*, d.id did, d.department_name
from employee e,
department d
where e.d_id = d.id
and e.id = #{id}
</select>

<resultMap id="emp2" type="employee">
<id column="id" property="id"/>
<result column="last_name" property="lastName"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
<association property="dept" javaType="department">
<id column="did" property="id"/>
<result column="department_name" property="departmentName"/>
</association>
</resultMap>测试@Test
public void test1() {
SqlSession sqlSession = MyTest.getSqlSession();
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
System.out.println(mapper.getEmployee(1));
}`
结果

2、分步查询
方法
DepartmentMapper.xml
`<!-- public Department getDepartment2(int id); -->

<select id="getDepartment2" resultType="department">
select * from department where id = #{id}
</select>EmployeeMaper.xml<!-- public Employee getEmployee2(int id); -->
<!-- 分步查询 -->

<select id="getEmployee2" resultMap="emp3">
select * from employee where id = #{id}
</select>

<resultMap id="emp3" type="employee">
<id column="id" property="id"/>
<result column="last_name" property="lastName"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
<association property="dept" select="com.workhah.mapper.department.DepartmentMapper.getDepartment2" column="d_id"/>
</resultMap>测试@Test
public void test1() {
SqlSession sqlSession = MyTest.getSqlSession();
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
System.out.println(mapper.getEmployee2(1));
}`
结果

要求二

现在的要求是输入 id 把 department 表对应的部门信息查询出来,并且查询该部门下的所有员工信息
public class Employee { private Integer id; private String lastName; private String email; private String gender; setter和getter....... }
public class Department { private Integer id; private String departmentName; private List<Employee> employees; setter和getter....... }

3、级联属性封装结果集
方法
`<!-- public Department getDepartment(int id); -->

<select id="getDepartment" resultMap="dep1">
select d.*, e.id eid, e.last_name, e.email, e.gender
from department d
left join employee e on d.id = e.d_id
where d.id = #{id}
</select>

<resultMap id="dep1" type="department">
<id column="id" property="id"/>
<result column="department_name" property="departmentName"/>
<collection property="employees" ofType="employee">
<id column="eid" property="id"/>
<result column="last_name" property="lastName"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</collection>
</resultMap>测试@Test
public void test2() {
SqlSession sqlSession = MyTest.getSqlSession();
DepartmentMapper mapper = sqlSession.getMapper(DepartmentMapper.class);
System.out.println(mapper.getDepartment(1));
}`
结果

4、分步查询
EmployeeMaper.xml
`<!-- public List<Employee> getEmployeeByDid(int did); -->

<select id="getEmployeeByDid" resultType="employee">
select *
from employee
where d_id = #{did}
</select>DepartmentMapper.xml<!-- public Department getDepartment3(int id); -->

<select id="getDepartment3" resultMap="dep2">
select *
from department
where id = #{id}
</select>

<resultMap id="dep2" type="department">
<id column="id" property="id"/>
<result column="depart_name" property="departName"/>
<collection property="employees" ofType="employee" select="com.workhah.mapper.employee.EmployeeMapper.getEmployeeByDid" column="id"/>
</resultMap>测试@Test
public void test2() {
SqlSession sqlSession = MyTest.getSqlSession();
DepartmentMapper mapper = sqlSession.getMapper(DepartmentMapper.class);
System.out.println(mapper.getDepartment3(1));
}`
结果

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学