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

MyBatis學習教程(四)-如何快速解決字段名與實體類屬性名不相同的沖突問題

 更新時間:2016年05月24日 11:49:23   作者:孤傲蒼狼  
我們經常會遇到表中的字段名和表對應實體類的屬性名稱不一定都是完全相同的情況,如何解決呢?下面腳本之家小編給大家介紹MyBatis學習教程(四)-如何快速解決字段名與實體類屬性名不相同的沖突問題,一起學習吧

在項目開發(fā)中,我們經常會遇到表中的字段名和表對應實體類的屬性名稱不一定都是完全相同的情況,下面小編給大家演示一下這種情況下的如何解決字段名與實體類屬性名不相同的沖突問題,感興趣的朋友一起學習吧。

一、準備演示需要使用的表和數據

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(), 
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的內容如下:

<?xml version="." encoding="UTF-" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper .//EN" "http://mybatis.org/dtd/mybatis--mapper.dtd">
<!-- 為這個mapper指定一個唯一的namespace,namespace的值習慣上設置成包名+sql映射文件名,這樣就能夠保證namespace的值是唯一的
例如namespace="me.gacl.mapping.orderMapper"就是me.gacl.mapping(包名)+orderMapper(orderMapper.xml文件去除后綴)
-->
<mapper namespace="me.gacl.mapping.orderMapper">
<!-- 

根據id查詢得到一個order對象,使用這個查詢是查詢不到我們想要的結果的,這主要是因為實體類的屬性名和數據庫的字段名對應不上的原因,因此無法查詢出對應的記錄

-->
<select id="getOrderById" parameterType="int" 
resultType="me.gacl.domain.Order">
select * from orders where order_id=#{id}
</select>
<!-- 

根據id查詢得到一個order對象,使用這個查詢是可以正常查詢到我們想要的結果的,
這是因為我們將查詢的字段名都起一個和實體類屬性名相同的別名,這樣實體類的屬性名和查詢結果中的字段名就可以一一對應上

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

根據id查詢得到一個order對象,使用這個查詢是可以正常查詢到我們想要的結果的,這是因為我們通過<resultMap>映射實體類屬性名和表的字段名一一對應關系 -->

<select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
select * from orders where order_id=#{id}
</select>
<!--通過<resultMap>映射實體類屬性名和表的字段名對應關系 -->
<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 Test {
@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í)行查詢操作,將查詢結果自動封裝成Order對象返回
Order order = sqlSession.selectOne(statement,);//查詢orders表中id為的記錄
//使用SqlSession執(zhí)行完SQL之后需要關閉SqlSession
sqlSession.close();
System.out.println(order);//打印結果:null,也就是沒有查詢出相應的記錄
}
@Test
public void testGetOrderById(){
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í)行查詢操作,將查詢結果自動封裝成Order對象返回
Order order = sqlSession.selectOne(statement,);//查詢orders表中id為的記錄
//使用SqlSession執(zhí)行完SQL之后需要關閉SqlSession
sqlSession.close();
System.out.println(order);//打印結果:Order [id=, orderNo=aaaa, price=.]
}
@Test
public void testGetOrderById(){
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í)行查詢操作,將查詢結果自動封裝成Order對象返回
Order order = sqlSession.selectOne(statement,);//查詢orders表中id為的記錄
//使用SqlSession執(zhí)行完SQL之后需要關閉SqlSession
sqlSession.close();
System.out.println(order);//打印結果:Order [id=, orderNo=aaaa, price=.]
}
} 

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

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

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

四、總結

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

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

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

以上所述是小編給大家介紹的MyBatis學習教程(四)-如何快速解決字段名與實體類屬性名不相同的沖突問題 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • java實現獲取網站的keywords,description

    java實現獲取網站的keywords,description

    這篇文章主要介紹了java實現獲取網站的keywords,description的相關資料,需要的朋友可以參考下
    2015-03-03
  • java自定義驗證器的實現示例

    java自定義驗證器的實現示例

    在對外暴露接口中,我們通常會對入參進行驗證,比如一些字符串非空判斷等,本文主要介紹了java自定義驗證器的實現示例,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Java GUI進階之流式布局管理器FlowLayout專項精講

    Java GUI進階之流式布局管理器FlowLayout專項精講

    FlowLayout-流式布局管理器,按水平方向依次排列放置組件,排滿一行,換下一行繼續(xù)排列。排列方向(左到右 或 右到左)取決于容器的componentOrientation屬性
    2022-04-04
  • Java實體映射工具MapStruct使用方法詳解

    Java實體映射工具MapStruct使用方法詳解

    MapStruct是用于代碼中JavaBean對象之間的轉換,例如DO轉換為DTO,DTO轉換為VO,或Entity轉換為VO等場景,這篇文章主要給大家介紹了關于Java實體映射工具MapStruct使用的相關資料,需要的朋友可以參考下
    2021-11-11
  • Mybatis傳入List實現批量更新的示例代碼

    Mybatis傳入List實現批量更新的示例代碼

    這篇文章主要介紹了Mybatis傳入List實現批量更新的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Java開發(fā)利器之Guava?Cache的使用教程

    Java開發(fā)利器之Guava?Cache的使用教程

    緩存技術被認為是減輕服務器負載、降低網絡擁塞、增強Web可擴展性的有效途徑之一。今天咱們就來聊聊Guava?Cache本地緩存,感興趣的可以了解一下
    2022-09-09
  • JAVA二叉樹的基本操作

    JAVA二叉樹的基本操作

    這篇文章主要介紹了JAVA二叉樹的基本操作DEMO,想要詳情了解的小伙伴請接著看下文吧
    2021-08-08
  • SpringBoot實現yml配置文件為變量賦值

    SpringBoot實現yml配置文件為變量賦值

    這篇文章主要介紹了SpringBoot實現yml配置文件為變量賦值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot?中使用?Validation?校驗參數的方法詳解

    SpringBoot?中使用?Validation?校驗參數的方法詳解

    Validation?是用于檢查程序代碼中參數的有效性的框架,作為?Spring?框架中的一個參數校驗工具,集成在?spring-context?包中,這篇文章主要介紹了SpringBoot?中使用?Validation?校驗參數,需要的朋友可以參考下
    2022-05-05
  • Java 邏輯控制全面詳解

    Java 邏輯控制全面詳解

    程序的邏輯主要分為三種結構:順序結構、分支結構、循環(huán)結構,順序結構的所有的代碼都是從前向后執(zhí)行的。有些時候順序是由“{}”為界限的,下文將全面詳細的介紹
    2021-10-10

最新評論