Mybatis實(shí)體類對(duì)象入?yún)⒉樵兊墓P記
Mybatis實(shí)體類對(duì)象入?yún)⒉樵?/h2>
測(cè)試實(shí)體類對(duì)象結(jié)構(gòu)如下
/** 使用lobmok插件 */ @Getter @Setter @NoArgsConstructor @ToString @EqualsAndHashCode public class Vendor { ? ? private String vend_id; ? ? private String vend_name; ? ? private String vend_address; ? ? private String vend_city; ? ? private String vend_state; ? ? private String vend_zip; ? ? private String vend_country; }
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="com.mybatis.mapper.VendorMapper"> ? ? <select id="findByVendorEntity" parameterType="vendor" resultType="vendor"> ? ?? ?select * from Vendors where vend_id = #{vend_id} and vend_name = #{vend_name} ? </select> </mapper>
接口文件
public interface VendorMapper { ?? ?//通過Vendor對(duì)象查詢 ?? ?Vendors findByVendorEntity(Vendor vendor); }
測(cè)試文件內(nèi)容
try { ?? ??? ??? ?String resource = "mybatis-config.xml"; ?? ??? ??? ?InputStream resourceAsStream = Resources.getResourceAsStream(resource); ?? ??? ??? ?SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream,"development2"); ?? ??? ??? ?//獲取SQLSession ?? ??? ??? ?SqlSession openSession = build.openSession(); ?? ??? ??? ? ?? ??? ??? ?VendorMapper mapper = openSession.getMapper(VendorMapper.class); ?? ??? ??? ?Vendor vendor = new Vendor(); ?? ??? ??? ?vendor.setId("BRE02"); ?? ??? ??? ?vendor.setName("Bear Emporium"); ?? ??? ??? ? ?? ??? ??? ?Vendor findByVendorEntity = mapper.findByVendorEntity(vendor); ?? ??? ??? ?System.out.println(findByVendorEntity); ?? ??? ?} catch (IOException e) { ?? ??? ??? ?System.out.println("加載配置文件失敗"); ?? ??? ??? ?e.printStackTrace(); ?? ??? ?}
筆記:
當(dāng)對(duì)象作為參數(shù)傳入查詢時(shí)(不一定指定parameterType屬性值為實(shí)體對(duì)象的別名或全路徑名,typeHandler貌似會(huì)自動(dòng)識(shí)別),SQL查詢語句的#{}中內(nèi)容需要與實(shí)體類的字段屬性一一對(duì)應(yīng)(并非實(shí)體類的屬性一定是數(shù)據(jù)庫(kù)表中的字段,只要填入的值對(duì)應(yīng)即可。
mybatis查詢條件是看sql語句的where后的查詢條件),如果表達(dá)式中的值沒有對(duì)應(yīng),則會(huì)報(bào)錯(cuò)。
錯(cuò)誤示例如下:
....Cause:org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'ids' in 'class com.mybatis.beans.Vendors' ....Cause:org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'ids' in 'class com.mybatis.beans.Vendors'...
Mybatis中的參數(shù)深入
一、mybatis的參數(shù)
parameterType參數(shù)
該參數(shù)表示的是輸入類型
1、傳遞簡(jiǎn)單類型
像int、string這種屬于簡(jiǎn)單類型
2、傳遞pojo對(duì)象
pojo對(duì)象就是我們所說的JavaBean,mybatis使用ognl表達(dá)式解析對(duì)象字段的值,#{}或者${}括號(hào)中的值為pojo屬性名稱
什么是ognl表達(dá)式?
3、傳遞pojo包裝對(duì)象
開發(fā)中通過實(shí)體類的包裝對(duì)象(pojo包裝對(duì)象)傳遞查詢條件,查詢條件是總和的查詢條件,不僅寶庫(kù)偶用戶的查詢條件,還包括其它的查詢條件,這時(shí)候使用包裝對(duì)象傳遞輸入?yún)?shù)
舉例說明,我們的QueryVo類中可以有多個(gè)對(duì)象,這里我們只存放一個(gè)user類
因?yàn)橥ㄟ^ognl表達(dá)式可以使用屬性名打點(diǎn)調(diào)用的方式來將user中的username當(dāng)作參數(shù),同時(shí)也可以將別的類的屬性當(dāng)作參數(shù)傳遞進(jìn)來
二、mybatis的輸出結(jié)果的封裝
resultType(輸出類型)
mysql在windows系統(tǒng)下不區(qū)分列名的大小寫,linux中嚴(yán)格區(qū)分大小寫
當(dāng)我們的實(shí)體類封裝的時(shí)候,如果屬性名和數(shù)據(jù)庫(kù)中的列名,我們?cè)谑褂胢ybatis查詢的時(shí)候是查詢不到的,那么我們?nèi)绾谓鉀Q這樣的問題
我們只需要使封裝的屬性和表中的列名對(duì)應(yīng)上就可以,
第一種解決方式:
查詢數(shù)據(jù)庫(kù)的時(shí)候起別名的方式
第二種解決方式,使用mybatis配置:
解釋說明標(biāo)簽中的屬性
- 如果哪一行sql語句想使用resutMap中的對(duì)應(yīng)關(guān)系就需要設(shè)置resultMap屬性和resuletMap標(biāo)簽中的id屬性相同
- resultMap中的type屬性表示的是封裝的實(shí)體類
- id標(biāo)簽和property標(biāo)簽中的property表示的是封裝的實(shí)體類中的屬性
- id標(biāo)簽和property標(biāo)簽中的column屬性表示的是映射的關(guān)系,也就是數(shù)據(jù)庫(kù)表中的列名
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java注解詳解及實(shí)現(xiàn)自定義注解的方法
這篇文章主要介紹了Java注解詳解及實(shí)現(xiàn)自定義注解的方法,本文給大家介紹了jdk中預(yù)定義的一些注解及自定義注解的相關(guān)知識(shí),需要的朋友可以參考下2022-06-06Java實(shí)戰(zhàn)角色權(quán)限后臺(tái)腳手架系統(tǒng)的實(shí)現(xiàn)流程
只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+Maven+myBaits-Plus+Vue+Element-UI+Mysql實(shí)現(xiàn)一個(gè)角色權(quán)限后臺(tái)腳手架系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2022-01-01IDEA使用GsonFormat完成JSON和JavaBean之間的轉(zhuǎn)換
這篇文章主要介紹了IDEA使用GsonFormat完成JSON和JavaBean之間的轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03圖解Java經(jīng)典算法希爾排序的原理與實(shí)現(xiàn)
希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡(jiǎn)單插入排序經(jīng)過改進(jìn)之后的一個(gè)更高效的版本,也稱為縮小增量排序,同時(shí)該算法是沖破O(n2)的第一批算法之一。本文會(huì)以圖解的方式詳細(xì)介紹希爾排序的基本思想及其代碼實(shí)現(xiàn)2022-09-09