您当前的位置: 首页 >  mybatis

杨林伟

暂无认证

  • 4浏览

    0关注

    3337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

27MyBatis - 输出映射之ResultMap

杨林伟 发布时间:2019-04-03 17:14:04 ,浏览量:4

MyBatis输出映射之ResultMap ResultMap概述

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

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

resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。

小案例引出ResultMap

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

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

1)声明pojo对象 在这里插入图片描述 2) Order对象:

public class Order {
	// 订单id
	private int id;
	// 用户id
	private Integer userId;
	// 订单号
	private String number;
	// 订单创建时间
	private Date createtime;
	// 备注
	private String note;
	
get/set。。。

}

3) Mapper.xml文件

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





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

4) Mapper接口 编写接口如下:

public interface OrderMapper {
	/**
	 * 查询所有订单
	 * 
	 * @return
	 */
	List queryOrderAll();
}

5) 测试方法 编写测试方法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 list = orderMapper.queryOrderAll();
		for (Order order : list) {
			System.out.println(order);
		}
	}
}

6) 运行结果 在这里插入图片描述 发现userId为null 解决方案:使用resultMap

resultMap的使用

由于上边的mapper.xml中sql查询列(user_id)和Order类属性(userId)不一致,所以查询结果不能映射到pojo中。

需要定义resultMap,把orderResultMap将sql查询列(user_id)和Order类属性(userId)对应起来

改造OrderMapper.xml,如下:






	
	
	
		
		
		
		

		
		
		
		
		
	

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


运行结果: 在这里插入图片描述

关注
打赏
1662376985
查看更多评论
立即登录/注册

微信扫码登录

0.1247s