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);
});
}
}