1. 程式人生 > >mybatis學習之mybatis中mapper中傳入的引數處理

mybatis學習之mybatis中mapper中傳入的引數處理

單個引數時,mybatis不做任何處理
例如:

<select id="getPersonByid" resultType="mybatis_01.Person">
        select * from person where id=#{id}
</select>
此時由於只有一個引數,無論#{}中寫什麼,都是可以的

多個引數時,mybatis會做特殊的引數處理,以map的形式將引數封裝起來,例如

<select id="getPersonByidAndName" resultType="mybatis_01.Person">
        select
* from person where id=#{id} and name=#{name} </select>

由於mybatis多個引數時會以parameter1……parameterN的形式或者按照索引從0……N-1的形式表示,此時會出現錯誤,必須按照以下方法來寫

<select id="getPersonByidAndName" resultType="mybatis_01.Person">
        select * from person where id=#{parameter1} and name=#{parameter2}
</select
> 或者 <select id="getPersonByidAndName" resultType="mybatis_01.Person"> select * from person where id=#{0} and name=#{1} </select>

由於這樣的處理方式會很多不便,看起來不是很直觀,因此需要為引數命名,使用以下的方法@para(引數名)

public Person getPersonByidAndName(@Param("id")Integer id,@Param("name")String name);

此時以下方法就可以使用了

<select id="getPersonByidAndName" resultType="mybatis_01.Person">
        select * from person where id=#{id} and name=#{name}
</select>

在多個引數時,若傳入的引數是已經定義的實體類的屬性,為了方便,可以通過直接傳入實體類的形式來完成查詢,例如

public Person getPersonByidAndName(Person person);

<select id="getPersonByidAndName" resultType="mybatis_01.Person">
        select * from person where id=#{id} and name=#{name}
</select>

若傳入的引數不是已經定義好的實體類的屬性,且該查詢方法不會經常被呼叫,為了方便,可以通過將要傳入的引數封裝成map的形式,在查詢時直接傳入map進行查詢,如果傳入的引數不是已經定義好的實體類且該方法要經常呼叫,那麼可以自己手寫一個TO(資料傳入類),方便查詢。

特別注意一點,之前說過了當傳入一個引數時不做任何處理,但當傳入的引數型別為Collection型別時(List,Set),mybatis也會將引數封裝成map,此時map的key為型別的小寫 即 List型別的key為list。
例如

public Person getPersonByid(List<Integer> ids);

<select id="getPersonByid" resultType="mybatis_01.Person">
        select * from person where id=#{list[0]}
</select>

相關推薦

mybatis學習mybatismapper傳入引數處理

單個引數時,mybatis不做任何處理 例如: <select id="getPersonByid" resultType="mybatis_01.Person"> select * from person where id=

java mybatis學習$和#區別,mapper代理接口,動態SQL,在日誌輸出mybatis的sql語句

except 控制臺 處理方式 ron target 技術分享 需要 prefix job 1.在mybatis中,$和#的區別: #{}:表示一個預處理參數,參數類型不定,是根據傳入的參數類型來設定的。類似於JDBC中的? 特例使用,模糊查詢:(針對oracle): an

mybatis學習路(一)IDEmybatis環境的搭建並顯示資料庫一個表的所有資訊

①在IDE中建立Maven web專案②匯入mybatis jar包<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId&g

Mybatis學習總結-----mybatisrefid是什麼意思(十)

1、首先定義一個sql標籤,一定要定義唯一id<sql id="Base_Column_List" >name,age</sql>2、然後通過id引用<select id="selectAll">select <include refid="Base_Col

php學習道:phpis_file和file_exist的差別,and推斷文件夾is_dir

文件 -m post 文件的 style 文件夾 原因 -a 文件名 在PHP中,is_file和file_isexist是有非常小差別的 1) is_file: $path ="/path/to/file/text.txt"; if(file_exis

【前端小小白的學習路】 JavaScript的十個難點,你有必要知道。

計算 tel isa 耗時 一個 支持 rip 每次 javascrip 1. 立即執行函數 立即執行函數,即Immediately Invoked Function Expression (IIFE),正如它的名字,就是創建函數的同時立即執行。它沒有綁定任何事件,也無需

USB開裝置開發學習三:USB的端點詳細瞭解

原文:https://blog.csdn.net/go_str/article/details/80985717    前言     端點在實際的USB通訊過程種的具體作用與含義十分重要,但是有些難以理解,自己整理一些知識作為備忘。 (

MyBatis學習動態SQL

1、概述 MyBatis最為強大的部分是提供了動態SQL的支援,一些查詢邏輯可以直接在xml中完成,大大簡化了我們的操作,體現出了MyBatis的靈活性、拓展性、和可維護性。 MyBatis中的四大動態SQL元素: if choose (when, otherw

以問題推動學習——Mybatis(1)

以問題推動學習之——Mybatis(1) collection 需求 解決 深入理解 collection 需求 將上表中相同to_platform對應的flow_record_cnt變成ArrayLi

Vue原始碼學習——如何在ChromedeBug原始碼

參考連結 如果我們不用單檔案元件開發,一般直接<script src="dist/vue.js">引入開發版vue.js 這種情況下debug也是很方便的,只不過vue.js檔案程式碼是rollup生成的 但是如果能夠在vue專案中的src目錄下中的檔案打斷點除錯就

mybatis學習路----動態sqlif條件判斷各種使用方式

點滴記載,點滴進步,願自己更上一層樓。 由於需要看到效果,所以這節最好可以將sql語句打印出來。參考 mybatis學習之路----列印sql語句 mybatis的if判斷語句其實跟el表示式的if條件判斷有些類似。 例如: <if test="id != nul

機器學習Gradient Tree BoostingGBDT-- GradientBoostingClassifier

機器學習之Gradient Tree Boosting中GBDT-- GradientBoostingClassifier # -*- coding: utf-8 -*- """ Created on Mon Dec 3 22:24:34 2018 @author:

Swift4.0學習路08-Swift的字典的使用

swift中字典是由兩部分組成,key和value。字典允許按照某個鍵來訪問元素。key集合不能重複,但是value集合是可重複的// 1.定義一個不可變字典 let dictC = ["a" : 1,"b" : 2] // 2.定義一個可變字典 此處也根據型別推導來省略D

mybatis學習路----#{}, ${}兩種傳引數方式的區別--附原始碼解讀

點滴記載,點滴進步,願自己更上一層樓。 首先下個結論, ${} 會將傳入的引數完全拼接到sql語句中,也就是相當於一個拼接符號。 也就是,最後的處理方式就相當於  String sql = select * from user where id=${value}....

mybatis學習查詢快取

編寫mapper.xml,配置tyoe為ehcache對cache介面的實現型別 <!-- 開啟本mapper的namespace下的二級快取 type:指定cache介面的實現類的型別,預設使用PerpetualCache,要和EhCache整合,需要配置type為ehcac

mybatis學習路----批量更新資料兩種方法效率對比

點滴記載,點滴進步,願自己更上一層樓。 上節探討了批量新增資料,這節探討批量更新資料兩種寫法的效率問題。 實現方式有兩種, 一種用for迴圈通過迴圈傳過來的引數集合,迴圈出N條sql, 另一種 用mysql的case when 條件判斷變相的進行批量更新   下面進行實現

oracle 學習:for迴圈包涵select語句

      oracle中的for迴圈用法比較簡單,但是在一次用到包涵select語句的for迴圈時,還是發現了一些自己以前沒有注意的東西。       我的程式碼如下: declare val1 date;val2 date;begin   for i in (select

MyBatis學習四:MyBatis配置檔案

在定義sqlSessionFactory時需要指定MyBatis主配置檔案: Xml程式碼   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 

MyBatis學習程式碼生成器Generator

MyBatis Generator (MBG) 是一個Mybatis的程式碼生成器,它可以幫助我們根據資料庫中表的設計生成對應的實體類,xml Mapper檔案,介面以及幫助類(也就是我們可以藉助該類來進行簡單的CRUD操作),這樣就避免了我們每使用到一張

Mybatis學習自定義typeHandler

自定義typeHandler背景比如儲存到資料庫時,有以下需求:1.有個列舉型別的值,想要儲存到資料庫為字串或整數2.Date型別存入資料庫為毫秒數3.物件中的集合(List)屬性儲存資料庫為{xxx,xxx,xxx}的格式,讀取出來自動轉車List傳統的讀取操作也能達到這個