MyBatis使用resultMap如何解决列名和属性名不一致

网友投稿 625 2022-11-06

MyBatis使用resultMap如何解决列名和属性名不一致

MyBatis使用resultMap如何解决列名和属性名不一致

目录使用resultMap如何解决列名和属性名不一致OrderMapper.xml配置单元测试实体属性名与表字段名不匹配问题问题解决方案一解决方案二

使用resultMap如何解决列名和属性名不一致

resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。

如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。

需求:查询订单表orders的所有数据

SELECT id,SDvGMuser_id,number,createtime,note FROM orders,这里的数据库表user_id与pojo的Order对象中的userId不一致

orders表:

Order对象:

OrderMapper.xml配置

其中注释掉了另一种使用数据库别名解决列名和属性名不一致的问题

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

SELECT id,user_id ,number,createtime,note FROM orders

单元测试

public class OrderMapperTest {

SqlSessionFactory factory = null;

private OrderMapper orderMapper = null;

@Before

public void testInit() {

// 1. 创建SqlSessionFactoryBuilder对象

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

// 2. 加载SqlMapConfig.xml配置文件

// /20181013_mybatis/config/SqlMapConfig.xml

InputStream in = MyBatisTest.class.getResourceAsStream("/SqlMapConfig.xml");

// 3. 创建SqlSessionFactohttp://ry对象

factory = builder.build(in);

}

@Test

public void testqueryAll() {

SqlSession session = factory.openSession();

OrderMapper orderMapper = session.getMapper(OrderMapper.class);

List orders = orderMapper.queryAll();

System.out.println(orders);

}

}

实体属性名与表字段名不匹配问题

问题

resultType="User">

select * from user where username=#{username}

这是映射文件的配置,myBatis在查询出结果之后,会帮我们把查询结果一一对应地填充到User对象中但是,它怎么知道如何去对应查询出来的字段和属性呢?只有在实体的属性名和表的字段名相同时,才能自动一一对应。那么,如果属性名和表的字段名不一样怎么办?有两种解决方案

现有实体类Order:

数据库表orders:

解决方案一

resultType="Order">

select order_id id,order_name orderName from orders where order_id=#{id}

查询的时候使用别名,就可以解决

解决方案二

resultMap="orderResultMap">

select order_id ,order_name from orders where order_id=#{id}

resultMap中,id标签专门为主键服务,当然,全部都用resultproperty为实体类属性column为表的列名

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Rust日报】2020-09-02「AWS」 Bottlerocket – 专为运行容器而打造的基于 Linux 的全新OS
下一篇:Rust FFI 编程 - Rust导出共享库06
相关文章

 发表评论

暂时没有评论,来抢沙发吧~