欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis使用resultMap如何解決列名和屬性名不一致

 更新時(shí)間:2022年01月20日 10:01:36   作者:藍(lán)海晴川  
這篇文章主要介紹了MyBatis使用resultMap如何解決列名和屬性名不一致的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用resultMap如何解決列名和屬性名不一致

resultType可以指定將查詢結(jié)果映射為pojo,但需要pojo的屬性名和sql查詢的列名一致方可映射成功。

如果sql查詢字段名和pojo的屬性名不一致,可以通過resultMap將字段名和屬性名作一個(gè)對(duì)應(yīng)關(guān)系 ,resultMap實(shí)質(zhì)上還需要將查詢結(jié)果映射到pojo對(duì)象中。

需求:查詢訂單表orders的所有數(shù)據(jù)

SELECT id,user_id,number,createtime,note FROM orders,這里的數(shù)據(jù)庫(kù)表user_id與pojo的Order對(duì)象中的userId不一致

orders表:

在這里插入圖片描述

Order對(duì)象:

在這里插入圖片描述

OrderMapper.xml配置

其中注釋掉了另一種使用數(shù)據(jù)庫(kù)別名解決列名和屬性名不一致的問題

<?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">
<mapper namespace="com.sea.crm.mapper.OrderMapper">
	<!-- 使用as 給列取別名解決類名和屬性名不一致的情況 -->
	<!--<select id="queryAll" resultType="Order"> SELECT id,user_id as userId,number,createtime,note 
		FROM orders </select> -->
	<!-- 使用resultMap解決列名和屬性名不一致的情況 -->
	<!-- 配置一個(gè)resultMap映射列和屬性 -->
	<resultMap type="Order" id="orderMap">
		<!-- id:設(shè)置ResultMap的id -->
		<!-- 定義主鍵 ,非常重要。如果是多個(gè)字段,則定義多個(gè)id -->
		<!-- property:主鍵在pojo中的屬性名 -->
		<!-- column:主鍵在數(shù)據(jù)庫(kù)中的列名 -->
		<id column="id" property="id" />
		<!-- 映射其他普通列 -->
		<result column="user_id" property="userId" />
		<result property="number" column="number" />
		<result property="createtime" column="createtime" />
</resultMap>
	<!-- 方法的返回值可以使用 -->
	<select id="queryAll" resultMap="orderMap">
		SELECT id,user_id ,number,createtime,note FROM orders
	</select>
</mapper>

單元測(cè)試

public class OrderMapperTest {
	
		SqlSessionFactory factory = null;
		private OrderMapper orderMapper = null;
		@Before
		public void testInit() {
			// 1. 創(chuàng)建SqlSessionFactoryBuilder對(duì)象
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			// 2. 加載SqlMapConfig.xml配置文件
			// /20181013_mybatis/config/SqlMapConfig.xml
			InputStream in = MyBatisTest.class.getResourceAsStream("/SqlMapConfig.xml");
			// 3. 創(chuàng)建SqlSessionFactory對(duì)象
			factory = builder.build(in);
		}
        @Test
		public void testqueryAll() {
			SqlSession session = factory.openSession();
			OrderMapper orderMapper = session.getMapper(OrderMapper.class);
			List<Order> orders = orderMapper.queryAll();
			System.out.println(orders);
		}
	}

實(shí)體屬性名與表字段名不匹配問題

問題

    <select id="getUser" parameterType="String"
        resultType="User">
        select * from user where username=#{username}
    </select>
  • 這是映射文件的配置,myBatis在查詢出結(jié)果之后,會(huì)幫我們把查詢結(jié)果一一對(duì)應(yīng)地填充到User對(duì)象中
  • 但是,它怎么知道如何去對(duì)應(yīng)查詢出來的字段和屬性呢?只有在實(shí)體的屬性名和表的字段名相同時(shí),才能自動(dòng)一一對(duì)應(yīng)。
  • 那么,如果屬性名和表的字段名不一樣怎么辦?有兩種解決方案

現(xiàn)有實(shí)體類Order:

這里寫圖片描述

數(shù)據(jù)庫(kù)表orders:

這里寫圖片描述

解決方案一

    <select id="getOrder" parameterType="int"
        resultType="Order">
        select order_id  id,order_name orderName from orders where order_id=#{id}
    </select>

查詢的時(shí)候使用別名,就可以解決

解決方案二

    <!-- 配置一個(gè)映射關(guān)系 -->
    <resultMap type="Order" id="orderResultMap">
        <id property="id" column="order_id"/>
        <result property="orderName" column="order_name"/>
    </resultMap>
    <!-- 查詢結(jié)果集引用配好的映射關(guān)系 -->
    <select id="getOrder" parameterType="int"
        resultMap="orderResultMap">
        select order_id ,order_name from orders where order_id=#{id}
    </select>
  • resultMap中,id標(biāo)簽專門為主鍵服務(wù),當(dāng)然,全部都用result
  • property為實(shí)體類屬性
  • column為表的列名

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java模擬棧的實(shí)現(xiàn)以及Stack類的介紹

    詳解Java模擬棧的實(shí)現(xiàn)以及Stack類的介紹

    棧是一種數(shù)據(jù)結(jié)構(gòu),它按照后進(jìn)先出的原則來存儲(chǔ)和訪問數(shù)據(jù)。Stack是一個(gè)類,表示棧數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。本文就來和大家介紹一下Java模擬棧的實(shí)現(xiàn)以及Stack類的使用,需要的可以參考一下
    2023-04-04
  • spring boot @PathVariable傳遞帶反斜杠參數(shù) / 的處理

    spring boot @PathVariable傳遞帶反斜杠參數(shù) / 的處理

    這篇文章主要介紹了spring boot @PathVariable傳遞帶反斜杠參數(shù) / 的處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 基于springboot 長(zhǎng)輪詢的實(shí)現(xiàn)操作

    基于springboot 長(zhǎng)輪詢的實(shí)現(xiàn)操作

    這篇文章主要介紹了基于springboot 長(zhǎng)輪詢的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 基于SpringBoot與Mybatis實(shí)現(xiàn)SpringMVC Web項(xiàng)目

    基于SpringBoot與Mybatis實(shí)現(xiàn)SpringMVC Web項(xiàng)目

    這篇文章主要介紹了基于SpringBoot與Mybatis實(shí)現(xiàn)SpringMVC Web項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java中的三種代理模式詳解

    Java中的三種代理模式詳解

    這篇文章主要介紹了Java中的三種代理模式詳解,代理模式的關(guān)鍵點(diǎn)是:代理對(duì)象與目標(biāo)對(duì)象.代理對(duì)象是對(duì)目標(biāo)對(duì)象的擴(kuò)展,并會(huì)調(diào)用目標(biāo)對(duì)象,文中提供了部分代碼,需要的朋友可以參考下
    2023-08-08
  • redis深入淺出分布式鎖實(shí)現(xiàn)下篇

    redis深入淺出分布式鎖實(shí)現(xiàn)下篇

    在單體應(yīng)用中,如果我們對(duì)共享數(shù)據(jù)不進(jìn)行加鎖操作,會(huì)出現(xiàn)數(shù)據(jù)一致性問題,我們的解決辦法通常是加鎖。下面我們一起聊聊使用redis來實(shí)現(xiàn)分布式鎖
    2022-08-08
  • java中ArrayList的兩種排序方法實(shí)例

    java中ArrayList的兩種排序方法實(shí)例

    ArrayList是一個(gè)數(shù)組隊(duì)列,相當(dāng)于 動(dòng)態(tài)數(shù)組,與Java中的數(shù)組相比,它的容量能動(dòng)態(tài)增長(zhǎng),這篇文章主要給大家介紹了關(guān)于java中ArrayList的兩種排序方法,需要的朋友可以參考下
    2021-07-07
  • 深入理解JVM垃圾回收算法

    深入理解JVM垃圾回收算法

    我們都知道java語(yǔ)言與C語(yǔ)言最大的區(qū)別就是內(nèi)存自動(dòng)回收,那么JVM是怎么控制內(nèi)存回收的,這篇文章將介紹JVM垃圾回收的幾種算法,從而了解內(nèi)存回收的基本原理
    2021-06-06
  • JPA如何使用findBy方法自定義查詢

    JPA如何使用findBy方法自定義查詢

    這篇文章主要介紹了JPA如何使用findBy方法自定義查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • @RequestBody不能映射到對(duì)象的解決

    @RequestBody不能映射到對(duì)象的解決

    這篇文章主要介紹了@RequestBody不能映射到對(duì)象的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評(píng)論