Mybatis新手误区

Mybatis新手误区

为什么Mybatis在多表联合查询是会出现映射错误,即获得一个null值。
首先我们来看Mapper配置文件

<?xml version="1.0" encoding="UTF-8"?>
 <resultMap type="emp" id="MyDifEmp">
 <id column="e.id" property="id"/>
 <result column="e.last_name" property="lastName"/>
 <result column="e.gender" property="gender"/>
 <result column="e.email" property="email"/>
 <result column="d.id" property="dept.id"/>
 <result column="d.dept_name" property="dept.departmentName"/>
 
 
 </resultMap>
<!-- public Employee getEmpAndDeptById(Integer id); -->
<select id="getEmpAndDeptById" resultMap="MyDifEmp">
	select e.id, e.last_name,e.gender, e.email, d.id,d.dept_name from tbl_employee e 
	INNER JOIN tbl_dept d ON e.d_id=d.id and e.id=#{id} 
	ORDER BY d.id
</select>
我们来测试一下
	@Test
	public void test06() throws IOException{
		SqlSessionFactory sessionFactory = getSqlSessionFactory();
		SqlSession openSession = sessionFactory.openSession();
		try {
			EmployeeMapperPlus employeeMapperPlus = openSession.getMapper(EmployeeMapperPlus.class);
//			Employee employee = employeeMapperPlus.getEmpById(1);
//			System.out.println(employee);
			Employee employee = employeeMapperPlus.getEmpAndDeptById(1);
			System.out.println(employee);
			System.out.println(employee.getDept());
		} finally {
			openSession.close();
		}
	}

out:
Employee [id=1, lastName=jk, email=XXX@XXXXXX.com, gender=1]
null
我们可以看到该结果显然不是我们想要的,我们仔细分享Java代码是没错的可以执行,我们就看看配置文件和数据库表:
员工表
部门表
我们发现有字段两个表中都有字段名称相似,这样我们就得修改一下Mapper配置文件中的查询语句了

<?xml version="1.0" encoding="UTF-8"?>
 <resultMap type="emp" id="MyDifEmp">
 <id column="id" property="id"/>
 <result column="last_name" property="lastName"/>
 <result column="gender" property="gender"/>
 <result column="email" property="email"/>
 <result column="did" property="dept.id"/>
 <result column="dept_name" property="dept.departmentName"/>
 
 
 </resultMap>
<!-- public Employee getEmpAndDeptById(Integer id); -->
<select id="getEmpAndDeptById" resultMap="MyDifEmp">
	select e.id id, e.last_name last_name,e.gender gender, e.email email, d.id did,d.dept_name dept_name from tbl_employee e  
	INNER JOIN tbl_dept d ON e.d_id=d.id and e.id=#{id} 
	ORDER BY d.id
</select>
以上我们都给每个字段都取了个别名,对应就要修改resultMap里id和result里的column属性值。通过调试就获得正确结果。

out:
Employee [id=1, lastName=jk, email=XXX@XXXXXX.com, gender=1]
Department [id=1, departmentName=开发部]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值