【Mybatis】對映檔案
Mybatis的對映檔案中定義了操作資料庫的sql,每個sql是一個Statement,因此mybatis涉及到了專案的核心,畢竟所有的sql語句都是寫在這裡的。如果說配置檔案是在告訴mybatis操作哪個資料庫,那麼對映檔案就是在告訴mybatis該怎麼樣操作資料庫。所以關於對映檔案的總結要多寫幾篇文章。
1. 兩個佔位符
#{}實現的是向prepareStatement中的預處理語句中設定引數值,sql語句中#{}表示一個佔位符即?。使用#{}可以防止sql注入,mybatis會自動進行java型別和jdbc型別的轉換。#{}可以接收簡單型別值或pojo屬性值。
${}可以將parameterType 傳入的內容拼接在sql中。它不會進行型別轉換。
簡單來說就是使用#{}傳入字串會mybatis會為我們自動加入’’,但是${}會直接進行拼接。
下面看一個例子。
<!-- 根據名稱模糊查詢使用者資訊--使用${} -->
<select id="selectUserByName" parameterType="string" resultType="user">
select * from user where username like '%${value}%'
</select>
<!-- 根據名稱模糊查詢使用者資訊--使用#{},在傳入引數的時候就必須加 %% 來實現模糊查詢-->
<select id="selectUserByName" parameterType="string" resultType="user">
select * from user where username like #{value}
</select>
2 Select
Select元素是相對來說比較常見的一個元素,比如
<select id="selectPerson" parameterType="int" resultType="hashmap">
SELECT * FROM PERSON WHERE ID = #{id}
</select>
在select中還有好多可以設定的屬性,看下面的圖表。
3 insert、update、delete
這三個屬性的使用和select很相似,不在舉例,只是列出以下摘這三個元素中我們可能要使用到的一些屬性設定
4.主鍵生成方式
在insert元素中,我們需要插入主鍵,這時我們就需要來設定主鍵生成方式了。
如果你的資料庫支援自動生成主鍵的欄位(比如MySQL和SQL Server)那麼就可以設定 useGeneratedKeys=”true”,然後再把 keyProperty設定到目標屬性上。
<insert id="insertAuthor" useGeneratedKeys="true"
keyProperty="id">
insert into Author (username,password,email,bio)
values (#{username},#{password},#{email},#{bio})
</insert>
對於不支援自動生成主鍵的資料庫我們就需要另一種方式來生成了。
<insert id="insertAuthor">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
</selectKey>
insert into Author
(id, username, password, email,bio, favourite_section)
values
(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
</insert>
在上面的示例中,selectKey元素將會首先執行,Author的 id 會被設定,然後插入語句會被呼叫。這給你了一個和資料庫中來處理自動生成的主鍵類似的行為,避免了使 Java程式碼變得複雜。
selectKey 元素描述如下:
<selectKey
keyProperty="id"
resultType="int"
order="BEFORE"
statementType="PREPARED">
總結
mybatis的對映檔案是mybatis中涉及業務的一個對映檔案,這裡簡單的總結了常用的一些知識,下篇文章繼續。
相關推薦
【Mybatis】對映檔案
Mybatis的對映檔案中定義了操作資料庫的sql,每個sql是一個Statement,因此mybatis涉及到了專案的核心,畢竟所有的sql語句都是寫在這裡的。如果說配置檔案是在告訴
【Hibernate】對映檔案型別錯誤
hibernate對映檔案中的“type”型別錯誤會報如下異常:java.lang.ClassCastException: java.lang.String cannot be cast to jav
【Mybatis】mapper動態代理和對映檔案配置標籤
提要:主要演示了mybatis中,在類中的其他自定義類,在sql語句中如何取值。sql語句中,範圍sql與集合的對應 一、目錄結構 二、相關實體類 QueryVo package com.test.domain; import java.io.Seria
【mybatis】【mapper介面代替dao類】【對映檔案的引數】
簡介 在操作物件的增刪改時候, //第一個形參:表示要呼叫的sql語句 //第二個形參:表示要傳遞才引數 session.insert("對映檔案的名稱空間.sql的id值",new User()); 如此長度的字串,不適合用. mapper
【Mybatis】Mybatis generator如何修改Mapper.java檔案
我寫的程式碼生成外掛Gitee地址 同樣是在擴充套件 Mybatis generator外掛的時候,有這樣一個需求是需要在生成的,那麼 如何修改Mapper.java檔案? 跟著Mybatis generator 原始碼去找一找 哪裡可以擴充套件 原始碼分析: 原始碼入口:Con
【Mybatis】如何繼承Mybatis中的Mapper.xml檔案
最近在寫一個 Mybatis 程式碼自動生成外掛,用的是Mybatis來擴充套件,其中有一個需求就是 生成javaMapper檔案和 xmlMapper檔案的時候 希望另外生成一個擴充套件類和擴充套件xml檔案。原檔案不修改,只存放一些基本的資訊,開發過程中只修改擴充套件的Ext檔案 形式
【Mybatis】MyBatis配置檔案的使用(二)
本例在【Mybatis】MyBatis快速入門(一)基礎上繼續學習XML對映配置檔案 MyBatis 的配置檔案包含了會深深影響 MyBatis 行為的設定(settings)和屬性(properties)資訊。文件的頂層結構如下: configuration 配置 prop
Mybatis框架中Mapper檔案傳值引數獲取。【Mybatis】
Mybatis框架中,Mapper檔案引數獲取一般有以下幾種: 1、引數個數為1個(string或者int) dao層方法為以下兩種: /** * 單個int型 */ public Lis
【Mybatis】MyBatis對錶執行CRUD操作(三) 【Mybatis】MyBatis配置檔案的使用(二)
本例在【Mybatis】MyBatis配置檔案的使用(二)基礎上繼續學習對錶執行CRUD操作 使用MyBatis對錶執行CRUD操作 1、定義sql對映xml檔案(EmployeeMapper.xml) 1 <?xml version="1.0" encoding="UTF-8"
Mybatis框架中Mapper文件傳值參數獲取。【Mybatis】
ram keyword ddr gem cli view ati copyto one Mybatis框架中,Mapper文件參數獲取一般有以下幾種: 1、參數個數為1個(string或者int) dao層方法為以下兩種: [java] view plain
【Mybatis】連接斷開問題
blog val property www nbsp nsh 數據 query uid 參考:http://www.jianshu.com/p/5124eef40bf0 http://blog.csdn.net/qianbw123/article/details/41959
【MyBatis】-----【MyBatis】--CURD---表級聯系【一對一】
去除 style print alt 得到 tag ack clas return 一、核心配置文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PU
【MyBatis】-----【MyBatis】---表級聯系【一對多】
new pda 聯合 測試 asr exc ack 負責 trace 一、核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//myba
【mybatis】IF判斷的坑
log 語法 == pan sta 標簽 使用 myba mybatis <if test="type==‘y‘"> and status = 0 </if> 即使type=y 裏面的sql也不會執行,只需改為 <if
【mybatis】mybatis中的<if test=“”>test中多條件
ID span lun tco sel myba cloud ise uid mybatis中的<if test=“”>test中多條件 代碼展示: 其中 accountCode和apiName都是ApiAllRespBean的屬性 <select
【mybatis】mybaits generator 逆向工程的使用
alibaba gin resolve PE div sed pen sss bsp mybatis逆向工程官方網站:http://www.mybatis.org/generator/quickstart.html
【mybatis】mybatis中insert 主鍵自增和不自增的插入情況【mysql】
pro SQ class TE IV rop generate mys bat 主鍵不自增:返回值是插入的條數 <insert id="add" parameterType="EStudent"> insert into TStudent(name,
【MyBatis】緩存配置
big dtd 應用 使用註解 sql mapper utf actor note 前言 使用緩存可以使應用更快的獲取數據,避免頻繁的數據庫交互,尤其是在查詢越多、緩存命中率越高的情況下,使用緩存的作用就越明顯。MyBatis作為持久化框架,提供了非常強大的查詢緩存特性
【mybatis】mybatis中 <if test=>等於的條件怎麽寫
collect dex cti lis myba ring class elf flag 經常在mybatis中使用<if test="aa != ‘值‘ ">的話 怎麽怎麽樣 那麽等於怎麽寫呢? 註意 要想使用 == 僅僅需要將雙引號和單引號的位置換
【java】【mybatis】在使用mybatis進行批量插入,批量更新等批量操作時,切割In集合List進行分批批量操作的java中的切割代碼
lse span ati 批量更新 次數 sublist 調用 size == 紅字部分代表mybatis的批量操作調用方法: int num = 0; int maxLength = 200; in