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

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

解決MyBatis中為類配置別名,列名與屬性名不對(duì)應(yīng)的問題

瀏覽:137日期:2023-10-21 09:34:16

在傳參與接收返回結(jié)果的時(shí)候,咱們一直是使用的全限定名。但是MyBatis自己在使用很多類型的時(shí)候(如Integer,Boolean)卻可以直接使用別名。那么,咱們自己的寫的類能不能使用別名呢?可以。需要配置。

mybatis配置文件:

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE configuration PUBLIC '-//mybatis.org//DTD Config 3.0//EN''http://mybatis.org/dtd/mybatis-3-config.dtd'><!-- 完成一個(gè)mybatis-config.xml的文件 -> 作用:配置連接數(shù)據(jù)庫(kù)的所有需要的環(huán)境 必須連接到所有要使用的映射文件(ProductMapper.xml) --> <!--configuration 根目錄 --><configuration> <!-- 引入(關(guān)聯(lián))db.properties文件 --> <properties resource='db.properties'></properties> <!-- 配置別名:在MyBatis中為一個(gè)類取別名 配置別名是為了在對(duì)象映射文件中接收參數(shù)類型和返回參數(shù)類型時(shí)使用--> <typeAliases> <!-- 設(shè)置這個(gè)包下面的所有類的別名 <package name='cn.itsource.domain'/> --> <!-- 設(shè)置單個(gè)類的別名 alias:取的別名 type:這個(gè)別名所對(duì)應(yīng)的Java類 別名使用的時(shí)候與大小寫無關(guān) --> <typeAlias alias='Product' type='cn.itsource.domain.Product'/> </typeAliases> <!-- 環(huán)境們:很多環(huán)境 default:表示默認(rèn)使用哪一個(gè)環(huán)境--> <environments default='development'> <!-- 單個(gè)環(huán)境:一個(gè)環(huán)境 id:表示這個(gè)環(huán)境的名稱--> <environment id='development'> <!-- transactionManager:事務(wù)管理器 (使用的JDBC事務(wù)管理器)--> <transactionManager type='JDBC'></transactionManager> <!-- MyBatis自??OOLED連接池(數(shù)據(jù)源) --> <dataSource type='POOLED'> <property name='driver' value='${db_driverClassname}' /> <property name='url' value='${db_url}' /> <property name='username' value='${db_username}' /> <property name='password' value='${db_password}' /> </dataSource> </environment> </environments> <!-- resource:表示 核心配置文件(mybatis-config.xml)必須與所有的對(duì)象映射文件(ProductMapper.xml)關(guān)聯(lián)!!!! --> <mappers> <mapper resource='cn/itsource/domain/ProductMapper.xml' /> </mappers></configuration>

上面配置了別名,那么對(duì)象與映射文件中就可以直接使用別名,而不需要使用全限定名稱

<?xml version='1.0' encoding='UTF-8'?><!-- 完成一個(gè)對(duì)象關(guān)系映射文件 -> 作用:一個(gè)對(duì)象的所有SQL都應(yīng)該寫在這個(gè)映射文件中 這個(gè)文件一般和我們的domain寫在同一個(gè)包里面,取名為 -> domain的名稱+Mapper.xml --> <!DOCTYPE mapper PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN''http://mybatis.org/dtd/mybatis-3-mapper.dtd'> <!-- namespace:命名空間(每個(gè)Mapper必須有命名空間) --><mapper namespace='cn.itsource.domain.ProductMapper'> <!-- select:它里面寫查詢語句 id:查詢語句的唯一標(biāo)識(shí)(名稱不能重復(fù)) 如何在 java代碼中找到sql語句? 命名空間+id 例子:cn.itsource.domain.ProductMapper.select parameterType:傳入的參數(shù)類型。 除了MyBatis支持的類型,其它的類型都通通使用全限定名 resultType:返回的每一條數(shù)據(jù)的結(jié)果類型(結(jié)果類型寫權(quán)限定名稱 ) 查詢功能使用 --> <select parameterType='Long' resultType='Product'> select * from product where id = #{id} </select> <!-- resultType:表示返回的數(shù)據(jù)類型 --> <select resultType='Product'> select * from Product </select> <!--parameterType :表示傳入?yún)?shù)(Product)。 useGeneratedKeys:是否需要獲取主鍵 keyColumn:主鍵在數(shù)據(jù)庫(kù)中的名稱(不寫的話默認(rèn)名稱和keyProperty一致) keyProperty:對(duì)象中的屬性(代表主鍵的那個(gè)屬性) --> <insert parameterType='Product' useGeneratedKeys='true' keyColumn='id' keyProperty='id'> insert into product (productName,dir_id,salePrice,supplier,brand,cutoff,costPrice) values(#{productName},#{dir_id},#{salePrice},#{supplier},#{brand},#{cutoff},#{costPrice}) </insert> <!-- parameterType:接收參數(shù)沒有寫權(quán)限頂名稱,使用的別名(簡(jiǎn)寫) --> <delete parameterType='long'> delete from product where id = #{id} </delete> <update parameterType='Product'> update product set productName=#{productName},dir_id=#{dir_id}, salePrice=#{salePrice},supplier=#{supplier},brand=#{brand},cutoff=#{cutoff},costPrice=#{costPrice} where id = #{id} </update> </mapper>

列名與屬性名不對(duì)應(yīng)的解決方案(截圖不完整)

做映射文件的時(shí)候,只做了表與對(duì)象之間的聯(lián)系。并沒有做列與字段之間的聯(lián)系。那么它們之間是怎么聯(lián)系上的呢?

由于之前咱們的列名與屬性名是一樣的,因此框架進(jìn)行了自動(dòng)的識(shí)別。

那么,如果咱們的列名與屬性名不一致了(對(duì)應(yīng)不上),這時(shí)候應(yīng)該怎么辦呢?這時(shí)候需要把哪些列名與屬性名對(duì)應(yīng)上。

在MyBatis中,提供了一個(gè)resultMap的標(biāo)簽,就是讓咱們來完成返回結(jié)果的關(guān)系對(duì)應(yīng)的,使用方式如下:

解決MyBatis中為類配置別名,列名與屬性名不對(duì)應(yīng)的問題

注意:主鍵設(shè)置需要單獨(dú)配置 如: <id column='id' property='id' />

<!-- 返回的數(shù)據(jù)映射 type:代表是要映射的對(duì)象 id:代表唯一(過會(huì)我們要拿到它)--><resultMap type='cn.itsource.domain.Product' id='productMap'> <!-- column:對(duì)應(yīng)的列名 property:對(duì)應(yīng)的屬性名 --> <id column='id' property='id' /> <result column='productName' property='name' /></resultMap> <select parameterType='long' resultMap='productMap'> select * from product where id = #{id}</select>

補(bǔ)充知識(shí):MyBatis - 實(shí)體類的屬性名和數(shù)據(jù)庫(kù)列名不一致時(shí)的兩種解決辦法!

問題:兩者不一致時(shí) , 查詢結(jié)果無法封裝到實(shí)體!(也就無法查詢出來)

解決MyBatis中為類配置別名,列名與屬性名不對(duì)應(yīng)的問題

① 查詢的sql語句中使用別名進(jìn)行查詢.

但要注意: 字段名的別名 要和 實(shí)體類的屬性名一致!

解決MyBatis中為類配置別名,列名與屬性名不對(duì)應(yīng)的問題

UserMapper.xml

<!-- namespace:接口的全路徑名. --><mapper namespace='com.xxx.dao.UserMapper'> <!-- 使用別名 --> <select resultType='com.xxx.domain.User'> select id as userId, username as userName, address as userAddress, sex as userSex, birthday as userBirthday from user; </select></mapper>

注: 如果使用別名 , 每一個(gè)sql語句都需要加別名 (很麻煩)

故: 一般都使用第二種.

② 使用resultMap ★

UserMapper.xml

<mapper namespace='com.jxj.dao.UserDao'> <resultMap type='User'> <!-- 主鍵字段 property: 實(shí)體類屬性名. column: 庫(kù)中表的列名 javaType: 數(shù)據(jù)類型. --> <id property='userId' column='id' javaType='int'></id> <!-- 非主鍵字段 --> <result property='userSex' column='sex' javaType='string'></result> <result property='userAddress' column='address' javaType='string'></result> <result property='userBirthday' column='birthday' javaType='date'></result> <result property='username' column='username' javaType='string'></result> </resultMap> <select resultMap='userResultMap'> select * from user </select>

注: select中resultMap的屬性值 要和 resultMap中id的屬性值一樣.

測(cè)試類: UserMapper.java

@Testpublic void queryAll() throws IOException { // 1.創(chuàng)建工廠類. InputStream in = Resources.getResourceAsStream('mybatis-config.xml'); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); // 2.創(chuàng)建sql對(duì)象. SqlSession sqlSession = sqlSessionFactory.openSession(); // 3.創(chuàng)建接口的實(shí)現(xiàn)類對(duì)象. UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 4.調(diào)用接口中的方法 (代理) List<User> users = mapper.queryAll(); for (User user : users) { System.out.println(user); } sqlSession.close(); in.close();}

以上這篇解決MyBatis中為類配置別名,列名與屬性名不對(duì)應(yīng)的問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

主站蜘蛛池模板: 钛板_钛管_钛棒_钛盘管-无锡市盛钛科技有限公司 | 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 订做不锈钢_不锈钢定做加工厂_不锈钢非标定制-重庆侨峰金属加工厂 | Win10系统下载_32位/64位系统/专业版/纯净版下载 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 德国UST优斯特氢气检漏仪-德国舒赐乙烷检测仪-北京泽钏 | 众品家具网-家具品牌招商_家具代理加盟_家具门户的首选网络媒体。 | 999范文网_优质范文下载写作帮手| 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 样品瓶(色谱样品瓶)百科-浙江哈迈科技有限公司 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | 流程管理|流程管理软件|企业流程管理|微宏科技-AlphaFlow_流程管理系统软件服务商 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 开云(中国)Kaiyun·官方网站 - 登录入口 | 仓储笼_金属箱租赁_循环包装_铁网箱_蝴蝶笼租赁_酷龙仓储笼租赁 测试治具|过炉治具|过锡炉治具|工装夹具|测试夹具|允睿自动化设备 | 杭州双螺杆挤出机-百科 | WTB5光栅尺-JIE WILL磁栅尺-B60数显表-常州中崴机电科技有限公司 | 氢氧化钾厂家直销批发-济南金昊化工有限公司 | 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 洗砂机械-球磨制砂机-洗沙制砂机械设备_青州冠诚重工机械有限公司 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 一体化污水处理设备,一体化污水设备厂家-宜兴市福源水处理设备有限公司 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 粘度计,数显粘度计,指针旋转粘度计 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 郑州墨香品牌设计公司|品牌全案VI设计公司 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 上海赞永| 皮带输送机-大倾角皮带输送机-皮带输送机厂家-河南坤威机械 | 全国冰箱|空调|洗衣机|热水器|燃气灶维修服务平台-百修家电 | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 |