解决字段名与属性名不一致
- ①使用别名emp_name empName解决字段名和属性名不一致
xml
复制代码
<select id="getAllEmpOld" resultType="Emp">
<!--①使用别名emp_name empName解决字段名和属性名不一致-->
select eid,emp_name empName,age,sex,email from t_emp;
</select>
xml
复制代码
<settings>
<!-- 将_自动映射为驼峰,emp_name:empName-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
xml
复制代码
<!--
resultMap:设置自定义映射关系
id:唯一标识
type:设置映射关系中的实体类类型
id:设置主键
属性:
property:设置映射关系中的属性名,必须是type属性所设置的实体类类型中的属性名
column:设置映射关系中的字段名,必须是SQL语句查询出的字段名
-->
<resultMap id="empResultMap" type="Emp">
<id property="eid" column="eid"/>
<id property="empName" column="emp_name"/>
<id property="age" column="age"/>
<id property="sex" column="sex"/>
<id property="email" column="email"/>
</resultMap>
<!--③使用resultMap解决字段名和属性名不一致-->
<select id="getAllEmp" resultMap="empResultMap">
select * from t_emp;
</select>
多对一映射关系
xml
复制代码
<resultMap id="empAndDeptResultMapOne" type="Emp">
<id property="eid" column="eid"/>
<id property="empName" column="emp_name"/>
<id property="age" column="age"/>
<id property="sex" column="sex"/>
<id property="email" column="email"/>
<id property="dept.did" column="did"/>
<id property="dept.deptName" column="dept_name"/>
</resultMap>
<!--Emp getEmpAndDept(@Param("eid") Integer eid);-->
<select id="getEmpAndDept" resultMap="empAndDeptResultMapOne">
select * from t_emp left join t_dept on t_emp.did = t_dept.did where t_emp.eid=#{eid}
</select>
xml
复制代码
<resultMap id="empAndDeptResultMapTwo" type="Emp">
<id property="eid" column="eid"/>
<id property="empName" column="emp_name"/>
<id property="age" column="age"/>
<id property="sex" column="sex"/>
<id property="email" column="email"/>
<!--
association:处理多对一的映射关系
javaType:该属性的类型
-->
<association property="dept" javaType="Dept">
<id property="did" column="did"/>
<id property="deptName" column="dept_name"/>
</association>
</resultMap>
<!--Emp getEmpAndDept(@Param("eid") Integer eid);-->
<select id="getEmpAndDept" resultMap="empAndDeptResultMapTwo">
select * from t_emp left join t_dept on t_emp.did = t_dept.did where t_emp.eid=#{eid}
</select>
<mapper namespace="com.lotus.mybatis.mapper.DeptMapper">
<!--Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);-->
<select id="getEmpAndDeptByStepTwo" resultType="Dept">
select * from t_dept where did=#{did}
</select>
</mapper>
xml
复制代码
<resultMap id="empAndDeptByStepResultMap" type="Emp">
<id property="eid" column="eid"/>
<id property="empName" column="emp_name"/>
<id property="age" column="age"/>
<id property="sex" column="sex"/>
<id property="email" column="email"/>
<!--
select:设置分步查询的SQL唯一标识(namespace,SQLID或mapper接口的全类名.方法名)
column:设置分步查询的条件
fetchType(eager|lazy):当开启全局延迟加载后,通过此属性手动控制延迟加载的效果,eager表示立即加载
-->
<association property="dept" select="com.lotus.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo"
column="did" fetchType="eager"></association>
</resultMap>
<!-- Emp getEmpAndDeptByStepOne(); -->
<select id="getEmpAndDeptByStepOne" resultMap="empAndDeptByStepResultMap">
select * from t_emp where eid=#{eid}
</select>
java
复制代码
public interface EmpMapper {
/**
* 通过分步查询查询员工以及员工所对应部门信息
* 第一步,查询员工信息
*/
Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);
}
public interface DeptMapper {
/**
* 通过分步查询查询员工以及员工所对应部门信息
* 第一步,通过did查询员工对应的部门信息
*/
Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);
}
一对多映射关系
xml
复制代码
<resultMap id="deptAndEmpResultMap" type="Dept">
<id property="did" column="did"/>
<id property="deptName" column="dept_name"/>
<collection property="emps" ofType="Emp">
<id property="eid" column="eid"/>
<id property="empName" column="emp_name"/>
<id property="age" column="age"/>
<id property="sex" column="sex"/>
<id property="email" column="email"/>
</collection>
</resultMap>
<!--Dept getDeptAndEmp(@Param("did") Integer did);-->
<select id="getDeptAndEmp" resultMap="deptAndEmpResultMap">
select * from t_dept left join t_emp on t_dept.did = t_emp.did where t_dept.did=#{did}
</select>
java
复制代码
/**
* 获取部门及部门中所有员工信息
*/
Dept getDeptAndEmp(@Param("did") Integer did);
//测试代码
@Test
public void testGetDeptAndEmp() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
Dept dept = mapper.getDeptAndEmp(1);
System.out.println(dept);
}
xml
复制代码
<!---DeptMapper.xml>
<resultMap id="deptAndEmpByStepResultMap" type="Dept">
<id property="did" column="did"/>
<result property="deptName" column="dept_name"/>
<collection property="emps"
select="com.lotus.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo"
column="did"></collection>
</resultMap>
<!--Dept getDeptAndEmpByStepOne(@Param("did") Integer did);-->
<select id="getDeptAndEmpByStepOne" resultMap="deptAndEmpByStepResultMap">
select * from t_dept where did=#{did}
</select>
<!-- EmpMapper.xml -->
<!--List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did);-->
<select id="getDeptAndEmpByStepTwo" resultType="Emp">
select * from t_emp where did=#{did}
</select>
java
复制代码
//----DeptMapper
/**
* 分步查询①查询部门信息
*/
Dept getDeptAndEmpByStepOne(@Param("did") Integer did);
//----EmpMapper
/**
* 分步查询②根据did查询员工信息
*/
List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did);
//测试代码
@Test
public void testGetDeptAndEmpStep() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
Dept dept = mapper.getDeptAndEmpByStepOne(1);
System.out.println(dept);
}