MyBatis基础-09-mybatis自关联一对多查询

mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

	<!-- 注册db配置文件 -->
	<properties resource="db.properties"/>
	
	<!-- mybatis配置文件中的标签是有顺序的 -->
	<!-- 注册实体类的权限定义名的别名 -->
	<typeAliases>
		<!-- 方式一:这种方式配置不太方便 -->
		<typeAlias type="com.monkey1024.bean.Student" alias="student"/>
		<!-- 方式二:mybatis会在这个包下搜索需要的javabean -->
		<package name="com.monkey1024.bean"/>
	</typeAliases>
	
	
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--注册映射文件-->
        <mapper resource="com/monkey1024/dao/EmployeeMapper.xml"/>
    </mappers>
</configuration>

EmployeeMapper.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.monkey1024.dao.EmployeeDao">
	<!-- 形成递归查询 -->
	<resultMap id="childrenMap" type="employee">
		<id column="id" property="id"/>
		<result column="name" property="name"/>
		<collection property="children" ofType="employee" select="selectChildrenByPid" column="id"/>
	</resultMap>
	
	<select id="selectChildrenByPid" resultMap="childrenMap">
		select id,name,job
		from t_employee
		where mgr=#{pid}
	</select>
	
	<select id="selectEmployeeByPid" resultMap="childrenMap">
		select id,name,job
		from t_employee
		where id=#{id}
	</select>
</mapper>

MyBatisUtil.java

package com.monkey1024.util;

import java.io.IOException;
import java.io.InputStream;

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

/*
 * DCL鐨勫崟渚嬫ā寮�
 */
public class MyBatisUtil {
	// 鏃犻渶灏嗘瀯閫犳柟娉曠鏈夊寲锛屽洜涓鸿繖閲岄潰鍙淇濊瘉鍒涘缓涓�涓猄qlSessionFactory鐨勫璞�
	// private MyBatisUtil()
	private static volatile SqlSessionFactory sqlSessionFactory;

	public static SqlSession getSqlSession() {
		try {
			if (sqlSessionFactory == null) {
				// 璇诲彇涓婚厤缃枃浠�
				InputStream input = Resources.getResourceAsStream("mybatis.xml");
				synchronized (MyBatisUtil.class) {
					if (sqlSessionFactory == null) {
						sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);
					}
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		//mybatis鑷姩鎻愪氦浜嬪姟
//		return sqlSessionFactory.openSession(true);
		return sqlSessionFactory.openSession();

	}
}

EmployeeDao.java

package com.monkey1024.dao;

import java.util.List;

import com.monkey1024.bean.Employee;

public interface EmployeeDao {
	List<Employee> selectChildrenByPid(int mgr);
	
	List<Employee> selectEmployeeByPid(int id);
}

EmployeeTest01.java

package com.monkey1024.test;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.monkey1024.bean.Employee;
import com.monkey1024.dao.EmployeeDao;
import com.monkey1024.util.MyBatisUtil;

public class EmployeeTest01 {
	private SqlSession sqlSession;
	private EmployeeDao employeeDao;
	@Before
	public void init(){
		sqlSession = MyBatisUtil.getSqlSession();
		employeeDao = sqlSession.getMapper(EmployeeDao.class);
		
	}
	@After
	public void closeSession(){
		if(sqlSession!=null){
			sqlSession.close();
		}
	}
	@Test
	public void selectChildrenByPid(){
		List<Employee> employees = employeeDao.selectChildrenByPid(1002);
		employees.forEach(e->{
			System.out.println(e);
		});
	}
	@Test
	public void selectEmployeeByPid(){
		List<Employee> employees = employeeDao.selectEmployeeByPid(1002);
		employees.forEach(e->{
			System.out.println(e);
		});
	}
	
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值