一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Mybatis實體類和表映射問題(推薦)

Mybatis實體類和表映射問題(推薦)

2020-06-10 11:21CodingDang JAVA教程

在項目開發中我們經常會遇到表中的字段名和表對應實體類的屬性名稱不一定都是完全相同的。下面小編給大家介紹下這種情況下如何解決字段名與實體類屬性名不相同的沖突問題。下面小編給大家帶來了Mybatis實體類和表映射的解

本文是小編給大家帶來的mybatis中實體類和表映射問題的知識,學習本教程能夠快速幫助我們解決字段名與實體類屬性名不相同的沖突問題,需要的朋友一起看看吧!

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

?
1
2
3
4
5
6
7
8
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);

二、定義實體類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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、創建一個orderMapper.xml文件,orderMapper.xml的內容如下:

?
1
2
3
<?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文件去除后綴)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
-->
<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映射文件

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

3.2、編寫單元測試代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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屬性值就可以找到要執行的SQL
*/
String statement = "me.gacl.mapping.orderMapper.getOrderById";//映射sql的標識字符串
//執行查詢操作,將查詢結果自動封裝成Order對象返回
Order order = sqlSession.selectOne(statement,1);//查詢orders表中id為1的記錄
//使用SqlSession執行完SQL之后需要關閉SqlSession
sqlSession.close();
System.out.println(order);//打印結果:null,也就是沒有查詢出相應的記錄
}
@Test
public void testGetOrderById2(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
/**
* 映射sql的標識字符串,
* me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper標簽的namespace屬性的值,
* selectOrder是select標簽的id屬性值,通過select標簽的id屬性值就可以找到要執行的SQL
*/
String statement = "me.gacl.mapping.orderMapper.selectOrder";//映射sql的標識字符串
//執行查詢操作,將查詢結果自動封裝成Order對象返回
Order order = sqlSession.selectOne(statement,1);//查詢orders表中id為1的記錄
//使用SqlSession執行完SQL之后需要關閉SqlSession
sqlSession.close();
System.out.println(order);//打印結果: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屬性值就可以找到要執行的SQL
*/
String statement = "me.gacl.mapping.orderMapper.selectOrderResultMap";//映射sql的標識字符串
//執行查詢操作,將查詢結果自動封裝成Order對象返回
Order order = sqlSession.selectOne(statement,1);//查詢orders表中id為1的記錄
//使用SqlSession執行完SQL之后需要關閉SqlSession
sqlSession.close();
System.out.println(order);//打印結果:Order [id=1, orderNo=aaaa, price=23.0]
}
}

執行單元測試的結果:

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

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

四、總結

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

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

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

原文鏈接:http://blog.csdn.net/u012849872/article/details/51607285

延伸 · 閱讀

精彩推薦
  • JAVA教程Java反射機制詳解

    Java反射機制詳解

    這篇文章主要介紹了Java反射機制,首先簡單介紹了反射機制的預備知識,進一步分析了Java反射機制的原理、實現技巧與應用方法,需要的朋友可以參考下 ...

    西電一枝花2592020-03-09
  • JAVA教程Java單例模式實例簡述

    Java單例模式實例簡述

    這篇文章主要介紹了Java單例模式,在Java應用程序設計中有著非常重要的作用,本文以實例形式對此加以簡單分析,需要的朋友可以參考下 ...

    shichen20145122019-11-29
  • JAVA教程Java編程實現遍歷兩個MAC地址之間所有MAC的方法

    Java編程實現遍歷兩個MAC地址之間所有MAC的方法

    這篇文章主要介紹了Java編程實現遍歷兩個MAC地址之間所有MAC的方法,涉及Java針對MAC的遍歷獲取與字符串轉換相關技巧,具有一定參考借鑒價值,需要的朋友可...

    luoboo5252152020-01-21
  • JAVA教程Eclipse常用快捷鍵總結(必看篇)

    Eclipse常用快捷鍵總結(必看篇)

    下面小編就為大家帶來一篇Eclipse常用快捷鍵總結(必看篇)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian3592020-05-13
  • JAVA教程echarts圖表導出excel示例

    echarts圖表導出excel示例

    這篇文章主要介紹了echarts圖表導出excel示例,需要的朋友可以參考下 ...

    Java教程網1692019-11-21
  • JAVA教程Java實現文件批量重命名具體實例

    Java實現文件批量重命名具體實例

    這篇文章主要介紹了Java實現文件批量重命名具體實例,需要的朋友可以參考下 ...

    java教程網4522019-11-11
  • JAVA教程深入理解JAVA中的聚集和組合的區別與聯系

    深入理解JAVA中的聚集和組合的區別與聯系

    下面小編就為大家帶來一篇深入理解JAVA中的聚集和組合的區別與聯系。小編覺得挺不錯的,現在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧...

    jingxian4212020-04-29
  • JAVA教程模仿百度紅包福袋界面實例代碼

    模仿百度紅包福袋界面實例代碼

    新年到新年到,紅包搶不停。在我搶紅包的時候意外的發現了百度的福袋界面挺不錯的,于是抽時間專門寫篇文章來完成百度紅包界面吧 ...

    Git_Android1232020-03-26
主站蜘蛛池模板: 国产探花视频在线观看 | 91短视频版高清在线观看免费 | 色哟哟在线观看 | 手机在线观看伦理片 | 久久99re热在线播放7 | 久久精品无码一区二区日韩av | videos护士有奶水 | 91精品国产综合久久精品 | 古装床戏做爰无遮挡三级 | 国产精品成 | 精品国产福利一区二区在线 | 免费观看国产视频 | 免费二级毛片免费完整视频 | 亚洲欧美精品天堂久久综合一区 | aaa毛片在线 | 91正在 播放| 青青久久精品国产免费看 | 超级乱淫寡妇 | 喷潮女王cytherea全部视频 | 日本老头4569gay | 草草视频人人爽 | 国产良心大作白丝精厕 | 精品免费视频 | 日本69av| 2022最新国产在线 | bt7086新片速递亚洲最新合集 | 国产精品污双胞胎在线观看 | 男女发生性关系视频 | 欧美综合亚洲图片综合区 | 亚洲精品91香蕉综合区 | 国产精品视频人人做人人爱 | yellow视频在线观看免费 | 男人操美女视频 | 亚洲欧美一 | 男人曰女人| 国内视频一区二区 | 国产经典一区二区三区蜜芽 | sxx免费看观看美女 sss亚洲国产欧美一区二区 | 国产一区二区三区在线观看视频 | 精品综合在线 | 亚洲色图欧美视频 |