MyBatis使用resultMap如何解决列名和属性名不一致
目录
- 使用resultMap如何解决列名和属性名不一致
- OrderMapper.xml配置
- 单元测试
- 实体属性名与表字段名不匹配问题
- 问题
- 解决方案一
- 解决方案二
使用resultMap如何解决列名和属性名不一致 resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。
如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。
需求:查询订单表orders的所有数据
SELECT id,user_id,number,createtime,note FROM orders,这里的数据库表user_id与pojo的Order对象中的userId不一致
orders表:
文章图片
Order对象:
文章图片
【MyBatis使用resultMap如何解决列名和属性名不一致】
OrderMapper.xml配置
其中注释掉了另一种使用数据库别名解决列名和属性名不一致的问题
SELECT id,user_id ,number,createtime,note FROM orders
单元测试
public class OrderMapperTest { SqlSessionFactory factory = null; private OrderMapper orderMapper = null; @Beforepublic void testInit() {// 1. 创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); // 2. 加载SqlMapConfig.xml配置文件// /20181013_mybatis/config/SqlMapConfig.xmlInputStream in = MyBatisTest.class.getResourceAsStream("/SqlMapConfig.xml"); // 3. 创建SqlSessionFactory对象factory = builder.build(in); }@Testpublic void testqueryAll() {SqlSession session = factory.openSession(); OrderMapper orderMapper = session.getMapper(OrderMapper.class); Listorders = orderMapper.queryAll(); System.out.println(orders); } }
实体属性名与表字段名不匹配问题
问题
select * from user where username=#{username}
- 这是映射文件的配置,myBatis在查询出结果之后,会帮我们把查询结果一一对应地填充到User对象中
- 但是,它怎么知道如何去对应查询出来的字段和属性呢?只有在实体的属性名和表的字段名相同时,才能自动一一对应。
- 那么,如果属性名和表的字段名不一样怎么办?有两种解决方案
文章图片
数据库表orders:
文章图片
解决方案一
select order_idid,order_name orderName from orders where order_id=#{id}
查询的时候使用别名,就可以解决
解决方案二
select order_id ,order_name from orders where order_id=#{id}
resultMap
中,id标签专门为主键服务,当然,全部都用resultproperty
为实体类属性column
为表的列名
推荐阅读
- react|react-transition-group的使用方法
- react|route上使用react-transition-group
- R语言入门课|R语言导入数据文件(数据导入、加载、读取)、使用Hmisc包的spss.get函数导入SPSS中的por格式文件
- R语言入门课|R语言使用dbinom函数生成二项分布密度数据、使用plot函数可视化二项分布密度数据(Binomial Distribution)
- python|Python dataframe 多条件筛选/过滤数据的方法及函数isin,query,contains,loc的使用介绍
- R语言入门课|R语言使用<-操作符创建新的变量、使用两个数据列通过加和创建新的数据列(sum variables to make new featurs in dataframe)
- 数据科学从0到1|pandas使用query函数基于组合索引筛选dataframe的数据行(与and、或or、非not)
- docker|Docker 使用 error during connect: This error may indicate that the docker daemon is not running
- sqlite|SQLITE3 使用总结
- 被广泛使用的OAuth2.0的密码模式已经废了,放弃吧