MyBatis查询时,如果对应的表字段与实体类属性名称不同,则无法完成自动封装

1 环境准备

  1. 参照MyBatisMapper代理开发
  2. 将实体类的属性修改成与数据库表字段不同
    1. 实体类属性:uname upassword
    2. 数据库表字段:name password

2 bug

  1. 测试类代码如下
package cn.qiguai;

import cn.qiguai.domain.User;
import cn.qiguai.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisDemo {
	public static void main(String[] args) throws IOException {
		//加载配置文件,获取SqlSessionFactory对象
		InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

		//获取SqlSession对象
		SqlSession sqlSession = sqlSessionFactory.openSession();

		//获取mapper代理
		UserMapper mapper = sqlSession.getMapper(UserMapper.class);

		//执行SQL
		List<User> users = mapper.selectAll();

		for (User u : users) {
			System.out.println(u);
		}
		//释放资源
		sqlSession.close();
	}
}
  1. 运行测试类后,控制台结果如下。我们可以发现自动封装失败
    类属性与表字段不一致的运行结果

3 解决方案

3.1 取别名

  1. 修改sql映射文件中对应sql语句,将与实体类属性不一致的表字段取别名,别名与实体类属性一致
    解决方案1:取别名
  2. 修改后再次运行测试类,控制台结果如下
    方案1解决后运行结果

3.2 resultMap(结果映射)

  1. 修改sql映射文件
    1. 添加对应属性与字段映射,如下图①
      1. 属性id:映射关系唯一标识
      2. type:建立映射关系实体类的全类名
      3. 标签id:完成主键字段的映射
        1. column:表字段
        2. property:实体类属性
      4. 标签result:完成一般字段的映射
        1. column:表字段
        2. property:实体类属性
    2. 修改sql语句的resultType属性为resultMap,值为映射关系的id,如下图②
      解决方案2:resultMap
  2. 修改完sql映射文件后,运行测试类,运行结果如下
    方案2解决后运行结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值