MyBatis的级联查询(association 进行分布查询)

MyBatis的级联查询(分布查询)

 

<!--  使用 association 进行分布查询
	    1  先按照员工id查询员工信息
	    2 根据查询员工信息中的d_id的值去部门表查出部门信息
	    3 部门设置到员工中
	    
	 -->


 

 

 

 

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.cn.mybatis.dao.EmployeeMapperPlus">

	
	<!--  使用 association 进行分布查询
	    1  先按照员工id查询员工信息
	    2 根据查询员工信息中的d_id的值去部门表查出部门信息
	    3 部门设置到员工中
	    
	 -->
	
	<resultMap type="com.cn.zhu.bean.Employee" id="MyEmpByStep">
		<id column="id" property="id"/>
		<result column="last_name" property="lastName"/>
		<result column="email" property="email"/>
		<result column="gender" property="gender"/>
		<!-- association 定义管理对象的封装规则
		   select: 表明当前属性是调用select 指定的方法
		   colum: 指定将哪一列的值传给这个方法
		   流程 : 使用select 指定的方法(传入column指定的这列参数的值)查出对象
		   并封装给property 指定的属性
		 -->
		<association property="dept" select="com.cn.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对象的时候,都将一起查询出来。
 	          部门信息在我们使用的时候再去查询
 	          分段查询的基础之上加上两个配置
 	 -->
 	 
</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.cn.mybatis.dao.DepartmentMapper">
	<!-- public Department getDeptById(Integer id); -->
	<select id="getDeptById" resultType="com.cn.zhu.bean.Department">
		select id,dept_name
		departmentName from tbl_dept where id=#{id}
    </select>
  </mapper>


DepartmentMapper.java

 

 

 

 

package com.cn.mybatis.dao;

import java.util.List;
import java.util.Map;


import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import com.cn.zhu.bean.Department;
import com.cn.zhu.bean.Employee;

public interface DepartmentMapper {
	public Department getDeptById(Integer id);
	public Department getDeptByIdPlus(Integer id);
	
	public Department getDeptByIdStep(Integer id);
	public List<Employee> getEmpsByDeptId(Integer deptId);
 }
   

Department.java

 

 

package com.cn.zhu.bean;

import java.util.List;

public class Department {
	private 	Integer  id;
	private  String  departmentName;
	private List<Employee> emps;
	
	
	
	public List<Employee> getEmps() {
		return emps;
	}
	public void setEmps(List<Employee> emps) {
		this.emps = emps;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getDepartmentName() {
		return departmentName;
	}
	public void setDepartmentName(String departmentName) {
		this.departmentName = departmentName;
	}
	@Override
	public String toString() {
		return "Department [departmentName=" + departmentName + ", id=" + id
				+ "]";
	}
	
}


EmployeeMapperPlus.java

 

 

package com.cn.mybatis.dao;

import java.util.List;
import java.util.Map;


import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import com.cn.zhu.bean.Employee;

public interface EmployeeMapperPlus {
	public Employee getEmpById(Integer id);
	public Employee getEmpAndDept(Integer id);
	public Employee getEmpByIdStep(Integer id);
 }

在config.xml加上
mybatis-config.xml

 

 

<mappers>
		<mapper resource="mybatis/mapper/EmployeeMapperPlus.xml" />
		<mapper resource="mybatis/mapper/DepartmentMapper.xml" />
	</mappers>


MyBatisTest.java

 

package com.cn.zhu.mybatis.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.cn.mybatis.dao.CopyOfEmployeeMapperAnnotation;
import com.cn.mybatis.dao.DepartmentMapper;
import com.cn.mybatis.dao.EmployeeMapper;
import com.cn.mybatis.dao.EmployeeMapperPlus;
import com.cn.zhu.bean.Department;
import com.cn.zhu.bean.Employee;

/**
 * 1 接口式编程
 *   原生       dao  ====>  DaoImpI
 *   mybatis  Mapper====>xxMapper.xml
 *   
 * 2 Sql Session 代表 和数据库的一次回话,用完必须关闭
 * 3 SqlSession 和  connection 一样她都是非线程安全。
 * @author Administrator
 *
 */
public class MyBatisTest {
	public SqlSessionFactory getSqlSessionFactory() throws IOException{
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		return  new SqlSessionFactoryBuilder().build(inputStream);
	}
	/**
	 * 1. 根据xml配置文件(	全局配置文件)创建一个sqlsessionFactory对象
	 *       有数据源一些运行环境信息
	 * 2  sql映射文件: 配置了每一个sql,以及sql的	封装规则等
	 * 3  将sql映射文件注册在全局配置文件中
	 * 4  写代码
	 *       1 根据全局配置文件得到sqlSessionFactory
	 *       2 使用sqlsession工厂,获取到sqlsession对象使用池来执行增删改查
	 *        一个sqlsession就是代表和数据库的一次回话。用完也要关闭
	 * @throws IOException
	 */
	/*	@Test
	public void test() throws IOException{

	 *//**
	 * 2 获取sqlsession实例,能直接执行已经映射的sql语句
	 *//*
		SqlSession openSession=getSqlSessionFactory().openSession();
		try{
			Employee employee=	openSession.selectOne("com.cn.mybatis.EmployeeMapper.selectEmp", 1);
			System.out.println(employee);		
		}finally{		
			openSession.close();
		}

	}*/
	
	
	@Test
	public void test05() throws IOException{
		SqlSessionFactory sqlsessionFactory=getSqlSessionFactory();
		// 1  获取到的sqlsession不会自动提交数据
		SqlSession openSession=sqlsessionFactory.openSession();

		try{
			
			EmployeeMapperPlus mapper=openSession.getMapper(EmployeeMapperPlus.class);
          //级联查询 
			Employee empAndDept=mapper.getEmpAndDept(1);
            System.out.println(empAndDept);
            System.out.println(empAndDept.getDept());
			// 分布查询
			Employee  employee=mapper.getEmpByIdStep(1);
			System.out.println(employee);
			System.out.println(employee.getDept());
			
		}finally{
			openSession.commit();
		}
	}
	
}


测试结果

 


 

接下来会写mybatis对集合的遍历查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值