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

来源:互联网 发布:php如何加密源码软件 编辑:程序博客网 时间:2024/06/01 10:19

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

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



EmployeeMapperPlus.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//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 mapperPUBLIC "-//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_namedepartmentName 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;}@Overridepublic 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 *//*@Testpublic 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();}}*/@Testpublic 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对集合的遍历查询


原创粉丝点击