mybatis级联分布查询的例子

本文介绍MyBatis中如何通过自定义封装规则实现复杂的关联查询。具体包括定义单个对象的关联规则、指定主键列及普通列的封装规则等。通过一个具体的员工表查询案例,展示了如何将部门号传递给部门表进行联合查询。

一,小知识点

<!--自定义某个javaBean的封装规则  

type="" 自定义规则的java类型
id:唯一id方便引用
-->
<resultMap type="com.array.bean.Emp" id="MyEmp">
<!-- 指定主键列的封装规则
id:定义主键底层有优化
column:制定那一列
property:指定对应的JavaBean属性

-->
<id column="empno" property="empno"/>
<!-- result
定义普通列规则 ,不定义会自动封装,建议将所有的封装规则都写出-->
<result column="ename" property="name"/>
</resultMap>

<!--association 定义关联的单个对象的定义规则  
可以指定联合的javaBean对象 
  property 制定那个对象是级联对象

  javaType:制定属性对象的类型(不可省略)

                     fetchType="lazy"延迟加载 
  fetchType="eager"立即加载

    -->

二,实例

1.根据员工号查询员工表,将部门号往下传

<!--  
  		1.先按照员工id查出员工表
  		2.根据员工表的部门号,查出部门信息
  	-->
  	<!-- public Emp getEmpById(Integer nmpno); -->
  		<!-- select表明当前属性是调用select制定的方法查处的结果
  			column:指定将那一列的值传给这个方法
  				整个流程是:使用select指定的方法(传入column指定的这列参数的值)查出对象,并封装给property属性
  				 -->
  		将员工表的部门号传递给部门表对应的dept对象
  		<association property="dept" select="com.array.dao.IdeptMapper.getDeptById" column="deptno">
                      <!-- 要传递多列的值,将多列的值封装成map
  			    column="{key1 = column1,key2=column2....}"
  		        -->
  		</association>
  	</resultMap>
  	<select id="getEmpByIdStep" resultMap="emp1">
  		select * from emp where empno = #{empno}
  	</select>
	
</mapper>
<?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.array.dao.IdeptMapper">
  		<!-- public Dept getDeptById(Integer deptno); -->
  		<select id="getDeptById" resultType="com.array.bean.Dept">
  			select * from dept where deptno = #{deptno}
  		</select>
  	
  </mapper>

测试代码:

@org.junit.Test
	public void test(){
		String resource = "mybatis-config2.xml";
		SqlSession sqlSession = null;
		try {
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			sqlSession = sessionFactory.openSession();
			EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
			Emp emp = empMapper.getEmpByIdStep(7369);

			
			System.out.println(emp.getDept().getDeptno());
			
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}finally{
			sqlSession.close();
		}
		
	}
	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值