一,小知识点
<!--自定义某个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>
可以指定联合的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();
}
}