日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

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

隨筆記錄下:

剛剛遇到一個mybatis中reultMap定義正確column與property也都正確,字段的getset方法也都有,但是返回對象時,有些字段可以對應上有一些則不可以。

找了好久才發現在sql語句中的 resultMap 寫成了 resultType。。。

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

補充知識:MyBatis學習總結——解決字段名與實體類屬性名不相同的沖突

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

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

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

<?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文件去除后綴) --><mapper namespace='me.gacl.mapping.orderMapper'> <!-- 根據id查詢得到一個order對象,使用這個查詢是查詢不到我們想要的結果的, 這主要是因為實體類的屬性名和數據庫的字段名對應不上的原因,因此無法查詢出對應的記錄 --> <select parameterType='int' resultType='me.gacl.domain.Order'> select * from orders where order_id=#{id} </select> <!-- 根據id查詢得到一個order對象,使用這個查詢是可以正常查詢到我們想要的結果的, 這是因為我們將查詢的字段名都起一個和實體類屬性名相同的別名,這樣實體類的屬性名和查詢結果中的字段名就可以一一對應上 --> <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> <!-- 根據id查詢得到一個order對象,使用這個查詢是可以正常查詢到我們想要的結果的, 這是因為我們通過<resultMap>映射實體類屬性名和表的字段名一一對應關系 --> <select 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 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語句中定義別名來解決字段名和屬性名的映射關系的。

解決辦法二:

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

以上這篇mybatis某些字段無法映射成功的解決就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Mybatis 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
妖精视频成人观看www| 四虎精品永久免费| 在线天堂资源www在线污| 亚洲黄色网址| 红桃视频国产一区| 日本中文字幕一区二区视频| 日韩有码av| 国产中文字幕一区二区三区| 啪啪国产精品| 天堂va蜜桃一区二区三区| 欧美日韩夜夜| 精品日韩一区| 久久国产成人午夜av影院宅| 免费在线看一区| 国产精品xxx在线观看| 日韩成人免费| 亚洲天堂久久| 亚洲精品在线国产| 精品国产成人| 亚洲精品小说| 日韩av成人高清| 国产一区二区三区亚洲综合| 欧美亚洲国产一区| 日本va欧美va欧美va精品| 97精品一区二区| 在线综合亚洲| 国产乱人伦精品一区| 色爱综合网欧美| 亚洲欧美久久久| 国产高清视频一区二区| 久久国产直播| 日韩国产91| 特黄毛片在线观看| 亚洲网址在线观看| 久久毛片亚洲| 亚洲精品日韩久久| 国产精品蜜芽在线观看| 久色成人在线| 精品国产亚洲日本| 中文字幕成人| 亚洲成a人片| 国产丝袜一区| 不卡在线一区| 精品国产美女a久久9999| 在线视频亚洲欧美中文| 黑森林国产精品av| 日本午夜精品一区二区三区电影| 久久国产主播| 国产精品99久久免费观看| 午夜视频精品| 三上亚洲一区二区| 欧美日韩网址| 亚洲中字黄色| 色在线视频观看| 国产美女视频一区二区| 欧美日韩日本国产亚洲在线 | 亚洲3区在线| 韩国三级一区| 牛牛精品成人免费视频| 亚洲制服欧美另类| 国产综合精品一区| 成人精品动漫一区二区三区| 久久午夜精品一区二区| 日韩一区欧美| 国产剧情在线观看一区| 免费看日韩精品| 欧美亚洲国产精品久久| 福利一区和二区| 日韩精品91亚洲二区在线观看| 亚洲国产综合在线看不卡| 福利一区二区三区视频在线观看| 欧美一区不卡| 久久亚洲色图| 欧美福利一区| av高清不卡| 精品视频一区二区三区在线观看 | 成人看片网站| 国产精品s色| 日本一不卡视频| 久久xxxx| 9国产精品视频| 亚洲性图久久| 日韩国产综合| 高清久久一区| 国产一区2区| 欧美极品一区二区三区| 欧美一区成人| 日本精品另类| 日本不卡一区二区| 日韩av中文字幕一区| 亚洲精品成人一区| 一本综合精品| 久久亚洲不卡| 天堂av在线一区| 国产亚洲一级| 在线一区欧美| 亚洲免费影院| 久久夜色精品| 亚洲人成网站在线在线观看| 亚洲视频二区| 亚洲精品亚洲人成在线观看| 免费国产亚洲视频| 男女激情视频一区| 亚洲91在线| 日本精品久久| 国产伦精品一区二区三区在线播放| 欧美日本不卡| 欧美亚洲福利| 日本强好片久久久久久aaa| 四虎在线精品| 国产探花在线精品一区二区| 国产美女久久| 精品国产网站| 国产精品13p| 精品丝袜在线| 激情五月综合| 老司机精品久久| 一区二区国产在线| 欧美精品三级在线| 欧美黄色一区| 成人小电影网站| 视频一区中文| 蜜臀av性久久久久蜜臀aⅴ流畅| 在线精品一区二区| 国产欧美日韩一区二区三区在线| 国产精品毛片视频| 四虎成人av| 亚洲高清久久| 美日韩精品视频| 国产精品亚洲片在线播放| 久久a爱视频| 亚洲va在线| 爽好多水快深点欧美视频| 亚洲一级大片| 久久不卡国产精品一区二区| 欧美sm一区| 亚洲欧美日韩国产综合精品二区 | 蜜桃久久久久久| 91精品丝袜国产高跟在线| 国产精品**亚洲精品| 捆绑调教日本一区二区三区| 在线亚洲自拍| 国产精品一级在线观看| 蜜桃精品在线| 亚洲精品自拍| av中文资源在线资源免费观看| 国产精品av久久久久久麻豆网| 三级欧美在线一区| 美日韩一区二区三区| 香蕉久久精品| 国产情侣久久| 99久久婷婷| 青青草国产成人99久久| 岛国av在线播放| 蜜桃视频一区二区三区在线观看| 麻豆91小视频| 日韩一级欧洲| 国产欧美一区二区三区精品观看| 日本精品影院| 青草国产精品| 欧洲毛片在线视频免费观看| 国产精品久久久久77777丨| 韩国久久久久久| 综合在线一区| 捆绑调教日本一区二区三区| 亚洲我射av| 91av亚洲| 日本成人中文字幕在线视频| 日韩电影免费网址| 欧美伊人影院| 不卡av一区二区| 麻豆精品国产91久久久久久| 黄色亚洲在线| 精品亚洲自拍| 日韩视频一二区| 神马日本精品| 国产日韩欧美在线播放不卡| 欧美成a人免费观看久久| 国产丝袜一区| 蜜桃视频在线观看一区二区| 日韩毛片在线| 久久99偷拍| 免费在线视频一区| 久久久人人人| 久久精品国产在热久久| 亚洲不卡视频| 黄色日韩在线| 久久久人人人| 精品三区视频| 欧美一级网站| 午夜在线精品偷拍| 伊人久久视频| 国产精品嫩模av在线| 亚洲作爱视频| 99久久精品国产亚洲精品| 欧美黑人做爰爽爽爽| 午夜电影一区| 樱桃成人精品视频在线播放| 日韩av片子| 美女在线视频一区|