MyBatis Mapper對映檔案

2021-09-25 05:03:49 字數 4424 閱讀 2542

"add"

parametertype

="student"

usegeneratedkeys

="true"

keyproperty

="id"

>

insert into students(name,schoolname,age,birth)

values(#,#,#,#)

insert

>

"add"

parametertype

="person"

>

order

="before"

keyproperty

="id"

resulttype

="_int"

>

select crm_seq.nextval from dual

selectkey

>

insert into tbl_person(name,salary,birth,registertime)

values(#,#,#,#);

insert

>

tip:insert、update、delete、select標籤中並不是只可以寫對應型別的sql語句,各個標籤中都可以寫任何sql語句,比如在標籤中寫delete語句也是可以正確執行的,其他也是如此,但不推薦這麼做

2、parametertype屬性:輸入引數型別,支援簡單型別、pojo物件、map、口袋pojo(即將sql中用到的多個pojo物件的屬性封裝為乙個物件,可以使用map代替)

示例①:傳入pojo型別,則sql文中的#{}中獲取的值來自於該pojo物件的同名屬性

"getbyentity"

parametertype

="student"

resulttype

="student"

>

select * from students where name = # and age = #

select

>

示例②:模糊查詢

a、使用#{}時sql文中在#{}的兩邊無法加%變為 like 『%#%』,而沒有%是沒辦法完成模糊查詢的,就變成了全匹配,只能在呼叫時傳入%,很顯然這種方式不夠優雅

"getbyname"

parametertype

="string"

resulttype

="student"

>

select * from students where name like #

select

>

list>

b、使用$時可以在sql文中拼接%,但這種方式無法防止sql注入,是不安全的

"getbyname"

parametertype

="string"

resulttype

="com.bdm.entities.student"

>

select * from students where name like '%$%'

select

>

list>

c、上面的兩個示例中,a不夠優雅,b不夠安全,開發中採用的方式是使用#{},然後在sql文中使用concat()函式拼接%的方式,即安全又優雅

"getbyname"

parametertype

="string"

resulttype

="student"

>

select * from students where name like concat('%',#,'%')

select

>

list>

tip:使用#{}和${}的區別

1️⃣#{}可看作是jdbc中的preparedstatement中的佔位符,相對比較安全,可以防止sql注入,而${}中的內容類似於拼接sql語句,無法防止sql注入

2️⃣使用#{}和${}在parametertype是物件(pojo物件、map、口袋pojo)的時候都是從物件中獲取同名屬性值填充sql文,不同的是在高版本的mybatis中如果parametertype是簡單資料型別或string時若使用#{}則#{}中填寫任何內容都可以獲取到傳入的值,而使用\${}時\${}內的內容必須是value或者_paramter才可以。但在低版本的mybatis中有兩種方式,一是在介面宣告的方法的入參位置使用@param註解,然後在#{}中填寫註解中的value中,二是若沒有@param則必須填寫_parameter,無論高低版本對於${}都可以使用@param的方式,這一點要尤為注意,例如:

"getbyname"

parametertype

="string"

resulttype

="com.bdm.entities.student"

>

select * from students where name like '%$%'

select

>

list>

3️⃣使用${}時兩邊必須加上引號(單引號或者雙引號)

示例③:傳入hashmap,當sql語句需要多個資料,而這些資料又沒有封裝在同乙個類(跨pojo)中時可以使用hashmap,幾乎在所有情況下都可使用map,不管是parametertype還是resulttype

"getbymap"

parametertype

="hashmap"

resulttype

="cat"

>

select * from cats where id = # and name like #

select

>

map>

map = new hashmap>

();map.put("id", 1);

map.put("name", "%mm%");

3、resulttype屬性:返回值型別

①返回簡單資料型別:integer、string等

②返回單個pojo

③返回乙個list(配置和返回pojo相同)

④返回hashmap(比如想獲取查詢記錄中的幾個值,就可以將這條記錄的幾個值封裝到乙個map中),比如:

"getbyid" parametertype=

"integer" resulttype=

"hashmap"

>

select name,age,birth from cats where id = #

<

/select>

4、resultmap標籤:結果集對映,查詢欄位的column名(可以採用別名的方式)和pojo裡面的field一一對應時,resulttype可以指定為pojo型別,將查詢結果集直接對映為pojo物件,如果不一致就需要使用標籤定義對映關係

type

="com.bdm.entities.student"

id="hostmap"

>

column

="id"

property

="id"

/>

column

="host_name"

property

="name"

/>

column

="host_email"

property

="email"

/>

resultmap

>

"getbyid"

parametertype

="integer"

resultmap

="hostmap"

>

select * from hosts where id = #

select

>

"allcolumns"

>

sql>

"selectbypk"

parametertype

="com.bdm.base.sysmissedcallpk"

resultmap

="sysmissedcallrm"

>

select refid

="allcolumns"

/>

from sys_missed_call

where id = #

select

>

mybatis mapper呼叫mysql儲存過程

mybatis版本 3.4.4 select id calltest statementtype callable select 注意 parametermap已被捨棄,請直接在sql語句中定義傳參型別。注意 out引數必須指定jdbctype void calltest mapparams 注意 ...

MyBatis Mapper 傳遞多個引數

在pojo類對應的對映檔案中,對應的引數型別可以省略。傳遞方式 1.介面正常書寫,對映檔案中sql語句的佔位符必須用 arg0 agr1 或param1 param2 介面 public customer getcustomerwithid integer id,string name 對應的配置檔...

mybatis mapper檔案裡的

簡單介紹 翻看以前在學校寫的 發現那時候有乙個sql寫的很有意思,用到了 標籤,和我現在寫的雖然有點差別,但是效果一樣 update event title event where id update event title event where id 解釋屬性,順便再補充幾個常用的屬性 inse...