mybatis深入浅出之resultMap的用法及应用场景

        mybatis中resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。

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

sql:SELECT id, user_id, number, createtime, note FROM `order`

声明pojo对象

数据库表如下图:

Order对象:

public class Order {

// 订单id

private int id;

// 用户id

private Integer userId;

// 订单号

private String number;

// 订单创建时间

private Date createtime;

// 备注

private String note;

get/set。。。

}

Mapper.xml文件

创建OrderMapper.xml配置文件,如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

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

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

<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,Mapper动态代理开发的时候使用,需要指定Mapper的类路径 -->

<mapper namespace="cn.itcast.mybatis.mapper.OrderMapper">

<!-- resultMap最终还是要将结果映射到pojo上,type就是指定映射到哪一个pojo -->

<!-- id:设置ResultMap的id -->

<resultMap type="order" id="orderResultMap">

<!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id -->

<!-- property:主键在pojo中的属性名 -->

<!-- column:主键在数据库中的列名 -->

<id property="id" column="id" />

<!-- 定义普通属性 -->

<result property="userId" column="user_id" />

<result property="number" column="number" />

<result property="createtime" column="createtime" />

<result property="note" column="note" />

</resultMap>

<!-- 查询所有的订单数据 -->

<select id="queryOrderAll" resultMap="orderResultMap">

SELECT id, user_id,number,createtime, note FROM `order`

</select>

</mapper>

测试方法

编写测试方法OrderMapperTest如下:

public class OrderMapperTest {

private SqlSessionFactory sqlSessionFactory;

@Before

public void init() throws Exception {

InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");

this.sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

}

@Test

public void testQueryAll() {

// 获取sqlSession

SqlSession sqlSession = this.sqlSessionFactory.openSession();

// 获取OrderMapper

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

// 执行查询

List<Order> list = orderMapper.queryOrderAll();

for (Order order : list) {

System.out.println(order);

}}}

猜你喜欢

转载自blog.csdn.net/weixin_41477980/article/details/86605011
今日推荐