激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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
主站蜘蛛池模板: 最污网站| 羞羞草视频 | 一分钟免费观看完整版电影 | 免费三级大片 | 97se亚洲综合在线韩国专区福利 | 国产成人高潮免费观看精品 | 91短视频版高清在线观看免费 | 91av国产在线 | 鲁丝一区二区二区四区 | 欧美一级爱爱 | av在线播放电影 | 久久久久女人精品毛片九一 | 欧美日韩国产一区二区三区在线观看 | 看免费5xxaaa毛片 | 毛片视频在线免费观看 | 爽爽视频免费看 | 视频久久免费 | 国产视频在线免费观看 | xp123精品视频 | 欧美精品欧美极品欧美激情 | 亚洲午夜精选 | 欧美激情第一区 | 国产二区三区在线播放 | 黄色毛片一级视频 | 久国久产久精永久网页 | 欧美大穴| 亚洲一二区视频 | 国产精品久久久久久久久久久久久久久久 | 国产成人av免费观看 | 国产日产精品一区四区介绍 | 天天透天天狠天天爱综合97 | 久久久久一区二区三区四区五区 | 精品国产专区 | 2021狠狠操 | 97中文字幕第一一一页 | 在线中文资源免费 | 天天草天天爱 | 国产亚洲高清在线精品不卡 | 成码无人av片在线观看网站 | 久久久www成人免费毛片 | 91精品国产福利尤物免费 |