亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:107日期:2023-10-21 13:21:46

隨筆記錄下:

剛剛遇到一個(gè)mybatis中reultMap定義正確column與property也都正確,字段的getset方法也都有,但是返回對(duì)象時(shí),有些字段可以對(duì)應(yīng)上有一些則不可以。

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

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

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

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

一、準(zhǔn)備演示需要使用的表和數(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);

二、定義實(shí)體類

package me.gacl.domain;/** * @author gacl * 定義orders表對(duì)應(yīng)的實(shí)體類 */public class Order { /** * CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); */ //Order實(shí)體類中屬性名和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+ ']'; }}

三、編寫測(cè)試代碼

3.1、編寫SQL的xml映射文件

1、創(chuàng)建一個(gè)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'><!-- 為這個(gè)mapper指定一個(gè)唯一的namespace,namespace的值習(xí)慣上設(shè)置成包名+sql映射文件名,這樣就能夠保證namespace的值是唯一的例如namespace='me.gacl.mapping.orderMapper'就是me.gacl.mapping(包名)+orderMapper(orderMapper.xml文件去除后綴) --><mapper namespace='me.gacl.mapping.orderMapper'> <!-- 根據(jù)id查詢得到一個(gè)order對(duì)象,使用這個(gè)查詢是查詢不到我們想要的結(jié)果的, 這主要是因?yàn)閷?shí)體類的屬性名和數(shù)據(jù)庫(kù)的字段名對(duì)應(yīng)不上的原因,因此無法查詢出對(duì)應(yīng)的記錄 --> <select parameterType='int' resultType='me.gacl.domain.Order'> select * from orders where order_id=#{id} </select> <!-- 根據(jù)id查詢得到一個(gè)order對(duì)象,使用這個(gè)查詢是可以正常查詢到我們想要的結(jié)果的, 這是因?yàn)槲覀儗⒉樵兊淖侄蚊计鹨粋€(gè)和實(shí)體類屬性名相同的別名,這樣實(shí)體類的屬性名和查詢結(jié)果中的字段名就可以一一對(duì)應(yīng)上 --> <select 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查詢得到一個(gè)order對(duì)象,使用這個(gè)查詢是可以正常查詢到我們想要的結(jié)果的, 這是因?yàn)槲覀兺ㄟ^<resultMap>映射實(shí)體類屬性名和表的字段名一一對(duì)應(yīng)關(guān)系 --> <select parameterType='int' resultMap='orderResultMap'> select * from orders where order_id=#{id} </select> <!--通過<resultMap>映射實(shí)體類屬性名和表的字段名對(duì)應(yīng)關(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文件中注冊(cè)orderMapper.xml映射文件

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

3.2、編寫單元測(cè)試代碼

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的標(biāo)識(shí)字符串, * me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper標(biāo)簽的namespace屬性的值, * getOrderById是select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL */ String statement = 'me.gacl.mapping.orderMapper.getOrderById';//映射sql的標(biāo)識(shí)字符串 //執(zhí)行查詢操作,將查詢結(jié)果自動(dòng)封裝成Order對(duì)象返回 Order order = sqlSession.selectOne(statement,1);//查詢orders表中id為1的記錄 //使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession sqlSession.close(); System.out.println(order);//打印結(jié)果:null,也就是沒有查詢出相應(yīng)的記錄 } @Test public void testGetOrderById2(){ SqlSession sqlSession = MyBatisUtil.getSqlSession(); /** * 映射sql的標(biāo)識(shí)字符串, * me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper標(biāo)簽的namespace屬性的值, * selectOrder是select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL */ String statement = 'me.gacl.mapping.orderMapper.selectOrder';//映射sql的標(biāo)識(shí)字符串 //執(zhí)行查詢操作,將查詢結(jié)果自動(dòng)封裝成Order對(duì)象返回 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的標(biāo)識(shí)字符串, * me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper標(biāo)簽的namespace屬性的值, * selectOrderResultMap是select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL */ String statement = 'me.gacl.mapping.orderMapper.selectOrderResultMap';//映射sql的標(biāo)識(shí)字符串 //執(zhí)行查詢操作,將查詢結(jié)果自動(dòng)封裝成Order對(duì)象返回 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í)行單元測(cè)試的結(jié)果:

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

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

四、總結(jié)

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

解決辦法一:

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

解決辦法二:

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

以上這篇mybatis某些字段無法映射成功的解決就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

相關(guān)文章:
主站蜘蛛池模板: 青草香蕉精品视频在线观看 | 自偷自偷自亚洲首页精品 | 欧美日韩不卡视频 | 欧美伦理片在线观看 | 成年人黄色一级片 | 国产一级黄色片子 | 狠狠干视频网 | 免费视频精品一区二区三区 | 激情在线观看视频免费的 | 国产三级日本三级日产三 | 白眉大侠320回在线收听 | 亚洲欧美午夜 | free麻豆| 亚洲3级| 日韩国产毛片 | se视频在线观看 | 欧亚毛片| 黑人草逼视频 | 俄罗斯女人与公拘i交酡 | 日韩精品一区在线 | 欧美亚洲国产日韩一区二区三区 | 国产美女91视频 | 国产日产精品_国产精品毛片 | 中文字幕有码热在线视频 | 免费看黄色大片 | 日韩亚洲一区中文字幕 | 6080午夜一级毛片免费看 | 国产v欧美v日韩在线观看 | 在线观看永久免费 | 亚洲不卡一区二区三区在线 | 亚洲第一区香蕉_国产a | 中文字幕日韩欧美一区二区三区 | 99欧美精品 | 日韩亚洲欧美一区 | 中文精品久久久久国产不卡 | 久久66热re国产毛片基地 | 国产片一级aaa毛片视频 | 亚洲国产精品67194成人 | 窝窝午夜色视频国产精品东北 | 国产片91人成在线观看 | 台湾永久内衣秀86部钟真 |