电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:157日期: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 數據庫
相關文章:
主站蜘蛛池模板: 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 一路商机网-品牌招商加盟优选平台-加盟店排行榜平台 | 新能源汽车电机定转子合装机 - 电机维修设备 - 睿望达 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | ★济南领跃标识制作公司★济南标识制作,标牌制作,山东标识制作,济南标牌厂 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 专业生物有机肥造粒机,粉状有机肥生产线,槽式翻堆机厂家-郑州华之强重工科技有限公司 | 防火阀、排烟防火阀、电动防火阀产品生产销售商-德州凯亿空调设备有限公司 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 智能监控-安防监控-监控系统安装-弱电工程公司_成都万全电子 | 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 亮点云建站-网站建设制作平台| 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 贝壳粉涂料-内墙腻子-外墙腻子-山东巨野七彩贝壳漆业中心 | 品牌广告服务平台,好排名,好流量,好生意。 | 潍坊青州古城旅游景点攻略_青州酒店美食推荐-青州旅游网 | 天津散热器_天津暖气片_天津安尼威尔散热器制造有限公司 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 南京租车,南京汽车租赁,南京包车,南京会议租车-南京七熹租车 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 北京公寓出租网-北京酒店式公寓出租平台| NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 北京包装设计_标志设计公司_包装设计公司-北京思逸品牌设计 | 多功能三相相位伏安表-变压器短路阻抗测试仪-上海妙定电气 | 河南15年专业网站建设制作设计,做网站就找郑州启凡网络公司 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 |