MyBatis 系列五 之 关联映射

MyBatis 系列五 之 关联映射

一对多的关联映射

一对多关联查询多表数据

1.1在MyBatis映射文件中做如下配置

<!--一对多单向的连接两表的查询-->
<resultMap type="Dept" id="deptMapper">
<id property="deptNo" column="deptNo"/>
<result property="deptName" column="deptName"/>
<collection property="emps" ofType="Emp">
<id property="empNo" column="empNo"/>
<result property="empName" column="empName"/>
</collection>
</resultMap>
<sql id="columns">
dept.deptNo,deptName,empNo,empName
</sql> <select id="findDeptInfoById" resultMap="deptMapper">
select <include refid="columns"/> from dept,emp
where dept.deptNo=emp.deptNo and dept.deptNo=#{deptNo} </select>

1.2在接口类中定义与映射文件查询语句的id值相同的方法名

package cn.hmy.dao;

import cn.hmy.entity.Dept;

public interface DeptDao {
//根据编号查询部门信息
public Dept findDeptInfoById(Dept dept); }

1.3在测试类中书写一下代码进行测试

package cn.hmy.test;

import java.io.IOException;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test; import cn.hmy.dao.DeptDao;
import cn.hmy.entity.Dept;
import cn.hmy.util.MyBatisUtil; public class MyTest {
DeptDao deptDao;
@Before
public void myBefore(){
SqlSession session = MyBatisUtil.getSession();
deptDao = session.getMapper(DeptDao.class);
} /**
* 根据编号查找部门信息
* @throws IOException
*/
@Test
public void findDeptInfoById() throws IOException{
Dept dept=new Dept();
dept.setDeptNo(3);
Dept dept2 = deptDao.findDeptInfoById(dept);
System.out.println(dept2); } }

一对多的单张表的查询

1.1在MyBatis的映射文件中配置如下文件

<!--一对多单向的单张表的查询  -->
<select id="selectEmpByDeptNo" resultType="Emp">
select empNo,empName from Emp where deptNo=#{deptNo}
</select>
<sql id="columns">
deptNo,deptName
</sql>
<resultMap type="Dept" id="deptMapper">
<id property="deptNo" column="deptNo"/>
<result property="deptName" column="deptName"/>
<collection property="emps" ofType="Emp"
select="selectEmpByDeptNo"
column="deptNo"
/>
</resultMap> <select id="findDeptInfoById" resultMap="deptMapper">
select <include refid="columns"/> from Dept
where deptNo=#{deptNo}
</select>

1.2在接口类中定义与映射文件查询语句的id值相同的方法名

1.3在测试类中书写一下代码进行测试

均如上

多对一的关联映射

多对一多表查询的配置

1.1在MyBatis的映射文件中,配置如下信息

<!-- 一对多单向的连接两表的查询 -->
<resultMap type="Emp" id="empMapper">
<id property="empNo" column="empNo"/>
<result property="empName" column="empName"/>
<association property="dept" javaType="Dept">
<id property="deptNo" column="deptNo"/>
<result property="deptName" column="deptName"/>
</association>
</resultMap>
<sql id="columns">
dept.deptNo,deptName,empNo,empName
</sql> <select id="findEmpById" resultMap="empMapper">
select <include refid="columns"/> from dept,emp
where dept.deptNo=emp.deptNo and empNo=#{empNo} </select>

1.2在接口类中定义一个和映射文件的查询语句的id值相同的方法名

package cn.hmy.dao;

import cn.hmy.entity.Emp;

public interface EmpDao {
//根据员工编号查找员工信息
public Emp findEmpById(Emp emp); }

1.3在测试类中书写如下代码进行测试

package cn.hmy.test;

import java.io.IOException;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test; import cn.hmy.dao.EmpDao;
import cn.hmy.entity.Dept;
import cn.hmy.entity.Emp;
import cn.hmy.util.MyBatisUtil; public class MyTest {
EmpDao empDao;
@Before
public void myBefore(){
SqlSession session = MyBatisUtil.getSession();
empDao = session.getMapper(EmpDao.class);
} /**
* 根据员工编号查找员工信息
* @throws IOException
*/
@Test
public void findEmpById() throws IOException{
Emp emp=new Emp();
emp.setEmpNo(2);
Emp emp2 = empDao.findEmpById(emp);
System.out.println(emp2); } }

多对一的单表的查询配置

1.1在MyBatis的映射文件中配置如下信息

<!-- 多对一单向的连接单表的查询 -->
<select id="selectDeptInfoBydeptNo" resultType="Dept">
select deptNo,deptName from dept where deptNo=#{deptNo}
</select> <resultMap type="Emp" id="empMapper">
<id property="empNo" column="empNo"/>
<result property="empName" column="empName"/>
<association property="dept" javaType="Dept"
select="selectDeptInfoBydeptNo"
column="deptNo"
/>
</resultMap>
<sql id="columns">
empNo,empName,deptNo
</sql> <select id="findEmpById" resultMap="empMapper">
select <include refid="columns"/> from emp
where empNo=#{empNo} </select>

1.2在接口类中定义一个和映射文件的查询语句的id值相同的方法名

1.3在测试类中书写如下代码进行测试

代码同上

MyBatis 系列五 之 关联映射

上一篇:ZooKeeper学习之路 (五)ZooKeeper API的简单使用 增删改查


下一篇:mybatis学习--缓存(一级和二级缓存)