最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis某些字段無法映射成功的解決

 更新時間:2020年11月25日 11:02:51   作者:代碼荷爾蒙  
這篇文章主要介紹了mybatis某些字段無法映射成功的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

隨筆記錄下:

剛剛遇到一個mybatis中reultMap定義正確column與property也都正確,字段的getset方法也都有,但是返回對象時,有些字段可以對應上有一些則不可以。

找了好久才發(fā)現(xiàn)在sql語句中的 resultMap 寫成了 resultType。。。

很low但是痛。改成resultMap一切正常!

補充知識:MyBatis學習總結(jié)——解決字段名與實體類屬性名不相同的沖突

在平時的開發(fā)中,我們表中的字段名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決字段名與實體類屬性名不相同的沖突。

一、準備演示需要使用的表和數(shù)據(jù)

CREATE TABLE orders(
 order_id INT PRIMARY KEY AUTO_INCREMENT,
 order_no VARCHAR(20), 
 order_price FLOAT
);
INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);
INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);
INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);

二、定義實體類

package me.gacl.domain;

/**
 * @author gacl
 * 定義orders表對應的實體類
 */
public class Order {
 /**
  * 
 CREATE TABLE orders(
  order_id INT PRIMARY KEY AUTO_INCREMENT,
  order_no VARCHAR(20), 
  order_price FLOAT
 );
 */
 
 //Order實體類中屬性名和orders表中的字段名是不一樣的
 private int id;    //id===>order_id
 private String orderNo;  //orderNo===>order_no
 private float price;  //price===>order_price

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getOrderNo() {
  return orderNo;
 }

 public void setOrderNo(String orderNo) {
  this.orderNo = orderNo;
 }

 public float getPrice() {
  return price;
 }

 public void setPrice(float price) {
  this.price = price;
 }

 @Override
 public String toString() {
  return "Order [id=" + id + ", orderNo=" + orderNo + ", price=" + price+ "]";
 }
}

三、編寫測試代碼

3.1、編寫SQL的xml映射文件  

1、創(chuàng)建一個orderMapper.xml文件,orderMapper.xml的內(nèi)容如下:

<?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,namespace的值習慣上設置成包名+sql映射文件名,這樣就能夠保證namespace的值是唯一的
例如namespace="me.gacl.mapping.orderMapper"就是me.gacl.mapping(包名)+orderMapper(orderMapper.xml文件去除后綴)
 -->
<mapper namespace="me.gacl.mapping.orderMapper">
 
 <!-- 
  根據(jù)id查詢得到一個order對象,使用這個查詢是查詢不到我們想要的結(jié)果的,
  這主要是因為實體類的屬性名和數(shù)據(jù)庫的字段名對應不上的原因,因此無法查詢出對應的記錄
 -->
 <select id="getOrderById" parameterType="int" 
  resultType="me.gacl.domain.Order">
  select * from orders where order_id=#{id}
 </select>
 
 <!-- 
  根據(jù)id查詢得到一個order對象,使用這個查詢是可以正常查詢到我們想要的結(jié)果的,
  這是因為我們將查詢的字段名都起一個和實體類屬性名相同的別名,這樣實體類的屬性名和查詢結(jié)果中的字段名就可以一一對應上
 -->
 <select id="selectOrder" parameterType="int" 
  resultType="me.gacl.domain.Order">
  select order_id id, order_no orderNo,order_price price from orders where order_id=#{id}
 </select>
 
 <!-- 
 根據(jù)id查詢得到一個order對象,使用這個查詢是可以正常查詢到我們想要的結(jié)果的,
 這是因為我們通過<resultMap>映射實體類屬性名和表的字段名一一對應關(guān)系 -->
 <select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
  select * from orders where order_id=#{id}
 </select>
 <!--通過<resultMap>映射實體類屬性名和表的字段名對應關(guān)系 -->
 <resultMap type="me.gacl.domain.Order" id="orderResultMap">
  <!-- 用id屬性來映射主鍵字段 -->
  <id property="id" column="order_id"/>
  <!-- 用result屬性來映射非主鍵字段 -->
  <result property="orderNo" column="order_no"/>
  <result property="price" column="order_price"/>
 </resultMap>
 
</mapper>

2、在conf.xml文件中注冊orderMapper.xml映射文件

<mappers>  
  <!-- 注冊orderMapper.xml文件, 
  orderMapper.xml位于me.gacl.mapping這個包下,所以resource寫成me/gacl/mapping/orderMapper.xml-->
  <mapper resource="me/gacl/mapping/orderMapper.xml"/>
</mappers>

3.2、編寫單元測試代碼

package me.gacl.test;

import me.gacl.domain.Order;
import me.gacl.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class Test2 {
 
 @Test
 public void testGetOrderById(){
  SqlSession sqlSession = MyBatisUtil.getSqlSession();
  /**
  * 映射sql的標識字符串,
  * me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper標簽的namespace屬性的值,
  * getOrderById是select標簽的id屬性值,通過select標簽的id屬性值就可以找到要執(zhí)行的SQL
  */
  String statement = "me.gacl.mapping.orderMapper.getOrderById";//映射sql的標識字符串
  //執(zhí)行查詢操作,將查詢結(jié)果自動封裝成Order對象返回
  Order order = sqlSession.selectOne(statement,1);//查詢orders表中id為1的記錄
  //使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession
  sqlSession.close();
  System.out.println(order);//打印結(jié)果:null,也就是沒有查詢出相應的記錄
 }
 
 @Test
 public void testGetOrderById2(){
  SqlSession sqlSession = MyBatisUtil.getSqlSession();
  /**
  * 映射sql的標識字符串,
  * me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper標簽的namespace屬性的值,
  * selectOrder是select標簽的id屬性值,通過select標簽的id屬性值就可以找到要執(zhí)行的SQL
  */
  String statement = "me.gacl.mapping.orderMapper.selectOrder";//映射sql的標識字符串
  //執(zhí)行查詢操作,將查詢結(jié)果自動封裝成Order對象返回
  Order order = sqlSession.selectOne(statement,1);//查詢orders表中id為1的記錄
  //使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession
  sqlSession.close();
  System.out.println(order);//打印結(jié)果:Order [id=1, orderNo=aaaa, price=23.0]
 }
 
 @Test
 public void testGetOrderById3(){
  SqlSession sqlSession = MyBatisUtil.getSqlSession();
  /**
  * 映射sql的標識字符串,
  * me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper標簽的namespace屬性的值,
  * selectOrderResultMap是select標簽的id屬性值,通過select標簽的id屬性值就可以找到要執(zhí)行的SQL
  */
  String statement = "me.gacl.mapping.orderMapper.selectOrderResultMap";//映射sql的標識字符串
  //執(zhí)行查詢操作,將查詢結(jié)果自動封裝成Order對象返回
  Order order = sqlSession.selectOne(statement,1);//查詢orders表中id為1的記錄
  //使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession
  sqlSession.close();
  System.out.println(order);//打印結(jié)果:Order [id=1, orderNo=aaaa, price=23.0]
 }
}

執(zhí)行單元測試的結(jié)果:

1、testGetOrderById方法執(zhí)行查詢后返回一個null。

2、testGetOrderById2方法和testGetOrderById3方法執(zhí)行查詢后可以正常得到想要的結(jié)果。

四、總結(jié)   

上面的測試代碼演示當實體類中的屬性名和表中的字段名不一致時,使用MyBatis進行查詢操作時無法查詢出相應的結(jié)果的問題以及針對問題采用的兩種辦法:

解決辦法一:

通過在查詢的sql語句中定義字段名的別名,讓字段名的別名和實體類的屬性名一致,這樣就可以表的字段名和實體類的屬性名一一對應上了,這種方式是通過在sql語句中定義別名來解決字段名和屬性名的映射關(guān)系的。

解決辦法二:

通過<resultMap>來映射字段名和實體類屬性名的一一對應關(guān)系。這種方式是使用MyBatis提供的解決方式來解決字段名和屬性名的映射關(guān)系的。

以上這篇mybatis某些字段無法映射成功的解決就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解讀@Scheduled任務調(diào)度/定時任務非分布式

    解讀@Scheduled任務調(diào)度/定時任務非分布式

    這篇文章主要介紹了解讀@Scheduled任務調(diào)度/定時任務非分布式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?最新推薦)

    DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)ⅰ⒊鰠⒌刃畔?最新推薦)

    這篇文章主要介紹了DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?首先自定義一個過濾器?DubboLoggerFilter.java,本文結(jié)合示例代碼給大家講解的非常詳細,需要的朋友可以參考下
    2022-12-12
  • Java中的傳值與傳引用實現(xiàn)過程解析

    Java中的傳值與傳引用實現(xiàn)過程解析

    這篇文章主要介紹了java中的傳值與傳引用實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • AI算法實現(xiàn)五子棋(java)

    AI算法實現(xiàn)五子棋(java)

    這篇文章主要為大家詳細介紹了AI算法實現(xiàn)五子棋,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • SpringBoot單點登錄實現(xiàn)過程詳細分析

    SpringBoot單點登錄實現(xiàn)過程詳細分析

    這篇文章主要介紹了SpringBoot單點登錄實現(xiàn)過程,單點登錄英文全稱Single?Sign?On,簡稱就是SSO。它的解釋是:在多個應用系統(tǒng)中,只需要登錄一次,就可以訪問其他相互信任的應用系統(tǒng)
    2022-12-12
  • 使用itextpdf解決PDF合并的問題

    使用itextpdf解決PDF合并的問題

    這篇文章主要介紹了使用itextpdf解決PDF合并的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • jpa實現(xiàn)只查詢指定的字段

    jpa實現(xiàn)只查詢指定的字段

    這篇文章主要介紹了jpa實現(xiàn)只查詢指定的字段,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java中int值直接賦值給char類型的方法詳解

    java中int值直接賦值給char類型的方法詳解

    這篇文章主要給大家介紹了關(guān)于java中int值直接賦值給char類型的相關(guān)資料,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-12-12
  • Mybatis-Plus或PageHelper多表分頁查詢總條數(shù)不對問題的解決方法

    Mybatis-Plus或PageHelper多表分頁查詢總條數(shù)不對問題的解決方法

    PageHelper 這個插件用了很多次了,今天使用的時候才遇到一個問題,這篇文章主要給大家介紹了關(guān)于Mybatis-Plus或PageHelper多表分頁查詢總條數(shù)不對問題的解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Retrofit+RxJava實現(xiàn)帶進度下載文件

    Retrofit+RxJava實現(xiàn)帶進度下載文件

    這篇文章主要為大家詳細介紹了Retrofit+RxJava實現(xiàn)帶進度下載文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論

开平市| 宜阳县| 砚山县| 泰宁县| 贵定县| 山丹县| 色达县| 怀化市| 瓦房店市| 炎陵县| 贵定县| 东平县| 射洪县| 金湖县| 曲阳县| 晴隆县| 西乌珠穆沁旗| 朝阳县| 宝应县| 江北区| 荣昌县| 佛冈县| 福贡县| 虞城县| 太白县| 抚宁县| 上犹县| 乐亭县| 册亨县| 武汉市| 张北县| 萨迦县| 卢氏县| 高唐县| 福建省| 平泉县| 楚雄市| 丘北县| 商丘市| 手机| 怀仁县|