1. public List<Employee> getEmpsByLastNameLike(String lastName);
//返回一条记录的map:key就是列名;值就是对应的值
2. public Map<String, Object> getEmpByIdReturnMap(Integer id);
@MapKey("id")
3. public Map<Integer, Employee> getEmpMapByLastNameLikeReturnMap(String lastName);
4. public Employee getEmpBydId(Integer id);
5. public Employee getEmpAndDept(Integer id);
6. 分步查询
public Employee getEmpByIdStep(Integer id);
public Department getDeptById(Integer id);
7. 高级分步
public List<Employee> getEmpsByDeptId(Integer deptId);
public Department getDeptByIdStep(Integer id);
代码语言:javascript复制
<!-- public List<Employee> getEmpsByLastNameLike(String lastName); -->
<!-- resultType:如果返回的是一个集合,要写集合中元素的类型 -->
1. <select id="getEmpsByLastNameLike" resultType="com.finen.mybatis.bean.Employee">
select * from tbl_employee where last_name like #{lastName}
</select>
<!-- public Map<String, Object> getEmpByIdReturnMap(Integer id); -->
2. <select id="getEmpByIdReturnMap" resultType="map">
select * from tbl_employee where id=#{id}
</select>
<!-- public Map<Integer, Employee> getEmpMapByLastNameLikeReturnMap(String lastName); -->
3. <select id="getEmpMapByLastNameLikeReturnMap" resultType="com.finen.mybatis.bean.Employee">
select * from tbl_employee where last_name like #{lastName}
</select>
4.<!-- 自定义某个javaBean的封装规则
type:自定义规则的Java类型
id:唯一id,方便引用
-->
<resultMap type="com.finen.mybatis.bean.Employee" id="MyEmp">
<!--指定主键列的封装规则
id:定义主键有底层优化
column:指定那一列
property:指定对应的javaBean属性
-->
<id column="id" property="id"/>
<result column="last_name" property="lastName"/>
<!-- 其他不指定的列会自动封装;我们只要写resultMap就把全部的映射规则都写上-->
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</resultMap>
<!--
resultMap:可以指定自定义结果集映射规则
resultType:必须已经存在
-->
<!-- public Employee getEmpBydId(Integer id); -->
<select id="getEmpBydId" resultMap="MyEmp">
select * from tbl_employee where id=#{id}
</select>
5. <!--
场景一:
查询Employee的同时要查询员工对应的部门
Employee ===>Department
一个员工有与之对应的部门信息
-->
<!-- public Employee getEmpAndDept(Integer id); -->
<!--
联合查询:级联属性封装结果集
-->
<resultMap type="com.finen.mybatis.bean.Employee" id="MyDifEmp">
<id column="id" property="id"/>
<result column="last_name" property="lastName"/>
<result column="gender" property="gender"/>
<result column="did" property="dept.id"/>
<result column="dept_name" property="dept.departmentName"/>
</resultMap>
<resultMap type="com.finen.mybatis.bean.Employee" id="MyEmp2">
<id column="id" property="id"/>
<result column="last_name" property="lastName"/>
<result column="gender" property="gender"/>
<!-- 可以指定联合的对象
property:指定那个属性是联合的对象
javaType:指定这个属性对象的类型【不能省略】
-->
<association property="dept" javaType="com.finen.mybatis.bean.Department">
<id column="did" property="id"/>
<result column="dept_name" property="departmentName"/>
</association>
</resultMap>
<select id="getEmpAndDept" resultMap="MyEmp2">
SELECT e.id id,e.last_name last_name,e.gender gender,e.d_id d_id,
d.id did,d.dept_name dept_name FROM tbl_employee e,tbl_dept d
WHERE e.d_id=d.id AND e.id=#{id}
</select>
6. 分步查询
<!-- public Employee getEmpByIdStep(Integer id); -->
<!--
使用association进行分步查询
1.先根据员工id查询员工信息
2.根据查询员工信息的中d_id值去查询部门信息
3.部门设置到员工中
-->
<resultMap type="com.finen.mybatis.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"/>
<!-- 定义关联对象的封装规则
select: 表名当前属性是调用select指定的方法查出的结果
column:指定将那一列的传给这个方法
流程:使用select指定的方法(传入column指定的参数的值查出对象),并封装给property指定的属性
-->
<association property="dept"
select="com.finen.mybatis.dao.DepartmentMapper.getDeptById"
column="d_id">
</association>
</resultMap>
<select id="getEmpByIdStep" resultMap="MyEmpByStep">
select * from tbl_employee where id=#{id}
</select>
<!-- public Department getDeptById(Integer id); -->
<select id="getDeptById" resultType="com.finen.mybatis.bean.Department">
select id, dept_name departmentName from tbl_dept where id=#{id}
</select>
7. 高级分步
<!-- 方法1:嵌套结果集的方式 -->
<!--
collection: 嵌套结果集的方式 ,定义关联的集合类型相关规则
-->
<!-- public Department getDeptByIdPlus(Integer id); -->
<resultMap type="com.finen.mybatis.bean.Department" id="MyDept">
<id column="did" property="id"/>
<result column="dept_name" property="departmentName"/>
<!-- collection定义集合类型的封装规则
ofType:指定集合里面的元素类型
-->
<collection property="emps" ofType="com.finen.mybatis.bean.Employee">
<id column="eid" property="id"/>
<result column="last_name" property="lastName"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</collection>
</resultMap>
<select id="getDeptByIdPlus" resultMap="MyDept">
SELECT d.id did,d.dept_name dept_name,
e.id eid,e.last_name last_name,e.email email,e.gender gender
FROM tbl_dept d
LEFT JOIN tbl_employee e
ON d.id=e.d_id
WHERE d.id=#{id}
</select>
<!-- 方法二:分步查询 -->
<!--
可以使用 延迟加载
Employee ==> Dept
每次查询Employee对象的时候,都将一起查询出来
部门信息在我们使用的时候再去查询;
分段查询的基础之上加上两个配置
-->
<!-- ===================association======================= -->
<!--
场景二:
查询部门的时候将部门对应的所有员工信息也查询出来
-->
<!-- public List<Employee> getEmpsByDeptId(Integer deptId); -->
<select id="getEmpsByDeptId" resultType="com.finen.mybatis.bean.Employee">
select * from tbl_employee where d_id=#{deptId}
</select>
<!-- 方法2:分步查询 -->
<!-- public Department getDeptByIdStep(Integer id); -->
<resultMap type="com.finen.mybatis.bean.Department" id="MyDeptStep">
<id column="id" property="id"/>
<result column="dept_name" property="departmentName"/>
<collection property="emps"
select="com.finen.mybatis.dao.EmployeeMapperPlus.getEmpsByDeptId"
column="id">
</collection>
</resultMap>
<select id="getDeptByIdStep" resultMap="MyDeptStep">
select id, dept_name departmentName from tbl_dept where id=#{id}
</select>