Mybatis實體類對象入參查詢的筆記
Mybatis實體類對象入參查詢
測試實體類對象結構如下
/** 使用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對象查詢 ?? ?Vendors findByVendorEntity(Vendor vendor); }
測試文件內容
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(); ?? ??? ?}
筆記:
當對象作為參數(shù)傳入查詢時(不一定指定parameterType屬性值為實體對象的別名或全路徑名,typeHandler貌似會自動識別),SQL查詢語句的#{}中內容需要與實體類的字段屬性一一對應(并非實體類的屬性一定是數(shù)據(jù)庫表中的字段,只要填入的值對應即可。
mybatis查詢條件是看sql語句的where后的查詢條件),如果表達式中的值沒有對應,則會報錯。
錯誤示例如下:
....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、傳遞簡單類型
像int、string這種屬于簡單類型
2、傳遞pojo對象
pojo對象就是我們所說的JavaBean,mybatis使用ognl表達式解析對象字段的值,#{}或者${}括號中的值為pojo屬性名稱
什么是ognl表達式?
3、傳遞pojo包裝對象
開發(fā)中通過實體類的包裝對象(pojo包裝對象)傳遞查詢條件,查詢條件是總和的查詢條件,不僅寶庫偶用戶的查詢條件,還包括其它的查詢條件,這時候使用包裝對象傳遞輸入參數(shù)
舉例說明,我們的QueryVo類中可以有多個對象,這里我們只存放一個user類
因為通過ognl表達式可以使用屬性名打點調用的方式來將user中的username當作參數(shù),同時也可以將別的類的屬性當作參數(shù)傳遞進來
二、mybatis的輸出結果的封裝
resultType(輸出類型)
mysql在windows系統(tǒng)下不區(qū)分列名的大小寫,linux中嚴格區(qū)分大小寫
當我們的實體類封裝的時候,如果屬性名和數(shù)據(jù)庫中的列名,我們在使用mybatis查詢的時候是查詢不到的,那么我們如何解決這樣的問題
我們只需要使封裝的屬性和表中的列名對應上就可以,
第一種解決方式:
查詢數(shù)據(jù)庫的時候起別名的方式
第二種解決方式,使用mybatis配置:
解釋說明標簽中的屬性
- 如果哪一行sql語句想使用resutMap中的對應關系就需要設置resultMap屬性和resuletMap標簽中的id屬性相同
- resultMap中的type屬性表示的是封裝的實體類
- id標簽和property標簽中的property表示的是封裝的實體類中的屬性
- id標簽和property標簽中的column屬性表示的是映射的關系,也就是數(shù)據(jù)庫表中的列名
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java實戰(zhàn)角色權限后臺腳手架系統(tǒng)的實現(xiàn)流程
只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+Maven+myBaits-Plus+Vue+Element-UI+Mysql實現(xiàn)一個角色權限后臺腳手架系統(tǒng),大家可以在過程中查缺補漏,提升水平2022-01-01IDEA使用GsonFormat完成JSON和JavaBean之間的轉換
這篇文章主要介紹了IDEA使用GsonFormat完成JSON和JavaBean之間的轉換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03