Mybatis中關于自定義mapper.xml時,參數(shù)傳遞的方式及寫法
在使用mybatis框架時,大多時候自動生成的mapper.xml文件能滿足我們所需的數(shù)據(jù)庫操作,但一些情況下還是需要我們自己寫sql;為了加深印象,總結(jié)了下參數(shù)傳遞的方式以及各個關鍵字的含義如下:
語句中接收參數(shù)的方式有兩種
1、 #{}預編譯 (可防止sql注入)
2、${}非預編譯(直接的sql拼接,不能防止sql注入)
參數(shù)類型有三種
1、 基本數(shù)據(jù)類型
2、 HashMap(使用方式和pojo類似 )
3、 Pojo自定義包裝類型
基本數(shù)據(jù)類型使用方式
List<Bean> selectIdBySortTime(@Param(value="id")Long id); <sql id="Base_Column_List" > id, car_dept_name, car_maker_name, icon,car_maker_py,hot_type </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" > select <include refid="Base_Column_List" /> from common_car_make where id = #{id,jdbcType=BIGINT} (jdbcType可省略) </select>
基本類型多參傳遞時候的方式,sql中不指定接收參數(shù)類型,直接對應即可:
User login(@Param(value="name")String name,@Param(value="password")String password ); <select id="login" resultType="com.pojo.User"> select * from us where name=#{name} and password=#{password} </select>
復雜類型–map類型
Service層 Map<String, Object> paramMap=new hashMap(); paramMap.put(“id”, value); paramMap.put(“carDeptName”,value); paramMap.put(“carMakerName”,value); paramMap.put(“hotType”,value); Dao層 (如果不使用@Param注解,則sql中也可以省略屬性前綴cm.) List<Bean> queryCarMakerList(@Param(value="cm")Map paramMap); <select id="queryCarMakerList" resultMap="BaseResultMap" parameterType="java.util.Map"> select <include refid="Base_Column_List" /> from common_car_make cm where 1=1 <if test="id != null"> and id = #{cm.id,jdbcType=DECIMAL} </if> <if test="carDeptName != null"> and car_dept_name = #{cm.carDeptName,jdbcType=VARCHAR} </if> <if test="carMakerName != null"> and car_maker_name = #{cm.carMakerName,jdbcType=VARCHAR} </if> <if test="hotType != null" > and hot_type = #{cm.hotType,jdbcType=BIGINT} </if> ORDER BY id </select>
復雜類型–類類型
與Map傳參的使用方式基本相同,不同的地方在于不同自己再填充map數(shù)據(jù),直接使用已定義的bean類即可。
<update id="updateByPrimaryKeySelective" parameterType="com.epeit.api.model.CommonCarMake" > update common_car_make <set > <if test="carDeptName != null" > car_dept_name = #{carDeptName,jdbcType=VARCHAR}, </if> <if test="carMakerName != null" > car_maker_name = #{carMakerName,jdbcType=VARCHAR}, </if> <if test="icon != null" > icon = #{icon,jdbcType=VARCHAR}, </if> <if test="carMakerPy != null" > car_maker_py = #{carMakerPy,jdbcType=VARCHAR}, </if> <if test="hotType != null" > hot_type = #{hotType,jdbcType=BIGINT}, </if> </set> where id = #{id,jdbcType=BIGINT} </update>
返回類型與接收類型關鍵字的區(qū)別
resultMap和 resultType的區(qū)別
兩者都是表示查詢結(jié)果集與java對象之間的一種關系,處理查詢結(jié)果集,映射到java對象。
- resultMap表示將查詢結(jié)果集中的列一一映射到bean對象的各個屬性,映射的查詢結(jié)果集中的列標簽可以根據(jù)需要靈活變化。
- resultType表示的是bean中的對象類,此時可以省略掉resultMap標簽的映射,但是必須保證查詢結(jié)果集中的屬性 和 bean對象類中的屬性是一一對應的,此時大小寫不敏感,但是有限制。
parameterMap(不推薦) & parameterType
parameterMap和resultMap類似,表示將查詢結(jié)果集中列值的類型一一映射到java對象屬性的類型上,在開發(fā)過程中不推薦這種方式。
一般使用parameterType直接將查詢結(jié)果列值類型自動對應到java對象屬性類型上,不再配置映射關系一一對應,例如上述代碼中下劃線部分表示將查詢結(jié)果類型自動對應到Bean對象的屬性類型
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Mybatis之mapper接口多參數(shù)方式
- Mybatis往Mapper.xml文件中傳遞多個參數(shù)問題
- 一文搞懂Mybatis中Mapper配置文件獲取參數(shù)的五種方式
- MyBatis在mapper中傳遞參數(shù)的四種方式
- MyBatis在Mapper中傳遞多個參數(shù)的四種方法詳解
- Mybatis?Mapper中多參數(shù)方法不使用@param注解報錯的解決
- mybatis?mapper.xml?注釋帶參數(shù)的坑及解決
- MyBatis Mapper接受參數(shù)的四種方式代碼解析
- 解決Mybatis?mappe同時傳遞?List?和其他參數(shù)報錯的問題
相關文章
SpringBoot使用itext填充pdf表單及導出pdf的流程
由于最近開發(fā)的項目需要用到打印單據(jù),就在網(wǎng)上找了一下方案,反反復復,都沒有找到合適的,借鑒了網(wǎng)上資源,使用itext5、itext7的工具包,所以本文介紹了SpringBoot使用itext填充pdf表單及導出pdf的流程,需要的朋友可以參考下2024-09-09IDEA中Maven依賴包無法下載或?qū)氲慕鉀Q方案(系統(tǒng)缺失文件導致)
在配置Maven環(huán)境時,可能會遇到各種報錯問題,首先確保Maven路徑配置正確,例如使用apache-maven-3.5.0版本,則需要在系統(tǒng)環(huán)境變量的Path中添加其bin目錄路徑,并上移優(yōu)先級,接下來,在Maven的conf目錄下修改settings.xml文件,將鏡像源改為阿里云2024-09-09java后端請求兌現(xiàn)request的中文亂碼問題解決
文章主要講述了在處理處理方案工作中遇到中文亂碼問題的解決過程,通過復現(xiàn)和分析亂碼問題,發(fā)現(xiàn)是由于解碼規(guī)則和后端服務編碼不一致導致的,最終通過修改過濾器中的編碼設置解決了問題2025-02-02解析Java?中for循環(huán)和foreach循環(huán)哪個更快
這篇文章主要介紹了Java中for循環(huán)和foreach循環(huán)哪個更快示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09解決若依pageHelper在動態(tài)切換數(shù)據(jù)源問題
這篇文章主要介紹了解決pageHelper在動態(tài)切換數(shù)據(jù)源問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01