1. 程式人生 > >MyBatis中解決欄位名與實體類屬性名不相同的衝突

MyBatis中解決欄位名與實體類屬性名不相同的衝突

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

    一、準備演示需要使用的表和資料

  1. CREATETABLE orders(  
  2.     order_id INTPRIMARYKEY AUTO_INCREMENT,  
  3.     order_no VARCHAR(20),   
  4.     order_price FLOAT
  5. );  
  6. INSERTINTO orders(order_no, order_price) VALUES('aaaa', 23);  
  7. INSERTINTO orders(order_no, order_price) 
    VALUES('bbbb', 33);  
  8. INSERTINTO orders(order_no, order_price) VALUES('cccc', 22);  

二、定義實體類

  1. package me.gacl.domain;  
  2. /** 
  3.  * @author gacl 
  4.  * 定義orders表對應的實體類 
  5.  */
  6. publicclass Order {  
  7.     /** 
  8.      *  
  9.     CREATE TABLE orders( 
  10.         order_id INT PRIMARY KEY AUTO_INCREMENT, 
  11.         order_no VARCHAR(20),  
  12.         order_price FLOAT
     
  13.     ); 
  14.      */
  15.     //Order實體類中屬性名和orders表中的欄位名是不一樣的
  16.     privateint id;                //id===>order_id
  17.     private String orderNo;        //orderNo===>order_no
  18.     privatefloat price;        //price===>order_price
  19.     publicint getId() {  
  20.         return id;  
  21.     }  
  22.     publicvoid setId(int id) {  
  23.         this
    .id = id;  
  24.     }  
  25.     public String getOrderNo() {  
  26.         return orderNo;  
  27.     }  
  28.     publicvoid setOrderNo(String orderNo) {  
  29.         this.orderNo = orderNo;  
  30.     }  
  31.     publicfloat getPrice() {  
  32.         return price;  
  33.     }  
  34.     publicvoid setPrice(float price) {  
  35.         this.price = price;  
  36.     }  
  37.     @Override
  38.     public String toString() {  
  39.         return"Order [id=" + id + ", orderNo=" + orderNo + ", price=" + price+ "]";  
  40.     }  
  41. }  

按 Ctrl+C 複製程式碼

三、編寫測試程式碼

3.1、編寫SQL的xml對映檔案

  1、建立一個orderMapper.xml檔案,orderMapper.xml的內容如下:

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <!-- 為這個mapper指定一個唯一的namespace,namespace的值習慣上設定成包名+sql對映檔名,這樣就能夠保證namespace的值是唯一的  
  4. 例如namespace="me.gacl.mapping.orderMapper"就是me.gacl.mapping(包名)+orderMapper(orderMapper.xml檔案去除字尾)  
  5.  -->
  6. <mappernamespace="me.gacl.mapping.orderMapper">
  7.     <!--   
  8.         根據id查詢得到一個order物件,使用這個查詢是查詢不到我們想要的結果的,  
  9.         這主要是因為實體類的屬性名和資料庫的欄位名對應不上的原因,因此無法查詢出對應的記錄  
  10.      -->
  11.     <selectid="getOrderById"parameterType="int"
  12.         resultType="me.gacl.domain.Order">
  13.         select * from orders where order_id=#{id}  
  14.     </select>
  15.     <!--   
  16.         根據id查詢得到一個order物件,使用這個查詢是可以正常查詢到我們想要的結果的,  
  17.         這是因為我們將查詢的欄位名都起一個和實體類屬性名相同的別名,這樣實體類的屬性名和查詢結果中的欄位名就可以一一對應上  
  18.      -->
  19.     <selectid="selectOrder"parameterType="int"
  20.         resultType="me.gacl.domain.Order">
  21.         select order_id id, order_no orderNo,order_price price from orders where order_id=#{id}  
  22.     </select>
  23.     <!--   
  24.     根據id查詢得到一個order物件,使用這個查詢是可以正常查詢到我們想要的結果的,  
  25.     這是因為我們通過<resultMap>對映實體類屬性名和表的欄位名一一對應關係 -->
  26.     <selectid="selectOrderResultMap"parameterType="int"resultMap="orderResultMap">
  27.         select * from orders where order_id=#{id}  
  28.     </select>
  29.     <!--通過<resultMap>對映實體類屬性名和表的欄位名對應關係 -->
  30.     <resultMaptype="me.gacl.domain.Order"id="orderResultMap">
  31.         <!-- 用id屬性來對映主鍵欄位 -->
  32.         <idproperty="id"column="order_id"/>
  33.         <!-- 用result屬性來對映非主鍵欄位 -->
  34.         <resultproperty="orderNo"column="order_no"/>
  35.         <resultproperty="price"column="order_price"/>
  36.     </resultMap>
  37. </mapper>

2、在conf.xml檔案中註冊orderMapper.xml對映檔案
  1. <mappers>
  2.         <!-- 註冊orderMapper.xml檔案,   
  3.         orderMapper.xml位於me.gacl.mapping這個包下,所以resource寫成me/gacl/mapping/orderMapper.xml-->
  4.         <mapper

    相關推薦

    Mybatis學習總結三之簡化sql對映xml檔案的引用及解決實體屬性相同衝突

    一、為實體類定義別名,簡化sql對映xml檔案中的引用 我們在sql對映xml檔案中的引用實體類時,需要寫上實體類的全類名(包名+類名),如下:parameterType="com.aiit.pojo.User"這裡寫的實體類User的全類名com.aiit.pojo.User, <i

    MyBatis解決實體屬性相同衝突

    在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。    一、準備演示需要使用的表和資料CREATETABLE orders(      order_id INTPRIMARYKE

    MyBatis學習總結(四)——解決實體屬性相同衝突

     在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。 一、準備演示需要使用的表和資料 CREATE TABLE orders( order_id INT PRIMA

    MyBatis——解決實體屬性相同衝突

    在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。 一、準備演示需要使用的表和資料 CREATE TABLE orders( order_id INT PRIMA

    MyBatis (4)——解決實體屬性相同衝突

    在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。 一、準備演示需要使用的表和資料 CREATE TABLE orders( order_id INT PRIMA

    MyBatis入門學習教程 解決實體屬性相同衝突

    在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。 一、準備演示需要使用的表和資料 CREATE TABLE orders( order_id INT PRIMAR

    Mybatis-解決實體屬性相同衝突

    案例: 假如存在這樣的表: CREATE TABLE orders( order_id number(10), order_no VARCHAR(20), order_price number(10)

    四、Mybatis解決實體屬性相同衝突

    4.1準備資料表和簡單資料 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR

    Mybatis解決資料庫表字段實體一致的解決方法

    解決方法一:通過在查詢sql語句中定義欄位名的別名,讓欄位名的別名和實體類的屬性名一致,這樣就可以使表的欄位名和實體類的屬性名一一對應上了,這種方式時通過在sql語句中定義別名來解決欄位名和屬性名的對映關係的。 解決方法二:通過<resultMap>來對映欄位名和實體類屬性名一

    MyBatis表字段實體屬性衝突解決方式

    解決方式無非是將表字段名對映到實體類對應的屬性名,SQl語言的處理方式不知大家還記不記得,如下的SQL語句:select people_id id,people_name name,people_ag

    MyBatis學習筆記(四)表字段實體屬性相同解決

    解決辦法一: 通過在查詢的sql語句中定義欄位名的別名,讓欄位名的別名和實體類的屬性名一致,這樣就可以表的欄位名和實體類的屬性名一一對應上了 解決辦法二: 通過MyBatis提供的resultMap標籤來對映欄位名和實體類屬性名的一一對應關係。

    mybatis資料庫表字段實體屬性不同的衝突之resultMap

    resultMap :指定定義的resultMap的id,如果這個resultMap在其他的mapper檔案中,前邊需要加namespace <?xml version="1.0" encod

    Mybatis解決資料庫java實體屬性一致的三種方式

    在使用Mybatis來持久化資料庫時,有時候會碰到資料庫中表中的欄位與java實體類中屬性名不一致的情況,在這種情況下Mybatis是不能完成欄位的自動對映的。而通常情況下,資料庫及實體類是不應該被改的的。所以要在不改變資料庫以及實體類的情況下解決這個問題,下面是解決該問題

    MyBatis五種成功對映資料庫實體屬性一致的解決方案

    在Mybatis中,當根據某欄位查詢資料庫資訊時,如果資料庫欄位名與實體類屬性名稱不一致,查詢時,會出現賦值不上的情況,值為Null。本次將給出五種方案,其中方案三、四為推薦。例如:根據學號sno查詢學生資訊1.資料庫表student欄位名稱以及型別:2.資料庫表內容:3.實

    MyBatis學習筆記-03.MyBatis五種成功對映資料庫實體屬性一致的解決方案

    在Mybatis中,當根據某欄位查詢資料庫資訊時,如果資料庫欄位名與實體類屬性名稱不一致,查詢時,會出現賦值不上的情況,值為Null。本次將給出五種方案,其中方案三、四為推薦。例如:根據學號sno查詢學生資訊1.資料庫表student欄位名稱以及型別:2.資料庫表內容:3.實

    MyBatis解決資料庫名稱Java實體屬性名稱一致問題

    問題描述:       有時候在專案中會遇到資料庫欄位名稱與實體類屬性名稱取得不一樣的情況,如下:      資料庫裡的資料為:       此時,如果我們查詢該表的某條資料,Proj

    mybatis框架下解決資料庫中表的列的實體屬性相同的問題

    <?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

    1.怎樣查詢某個在哪個表2.怎樣查詢某個庫的某個表的全部(快速將實體資料庫對應起來)

    1.怎樣查詢某個欄位在哪個表 SELECT COLUMN_NAME,TABLE_NAME,TABLE_SCHEMA FROM INFORMATION_SCHEMA.columns WHERE COLUMN_NAME='欄位名'; 上面的這條語句只有我標註成漢字的地方需要替

    【java學習筆記】MyBatis實體屬性和表一樣時的解決方法

    在使用MyBatis開發DAO層時,當實體類中的屬性名和表中的欄位名不一樣時,查詢出來的值為null,此時有3種解決方法 解決方法1                在Mapper.xml對映檔案中,寫SQL語句時起別名 解決

    Mybatis的model實體資料庫一致的解決方案

    mybatis的強大之處一:resultMap 場景: model: package com.lgy.model; public class User { private Integer use