Mybatis模糊查詢之三種定義參數(shù)方法和聚合查詢、主鍵回填實現(xiàn)方法
一、使用#定義參數(shù)
1. 持久層接口添加根據(jù)名字內(nèi)容模糊查詢方法
// 根據(jù)名字內(nèi)容模糊查詢
List<User> findByNameLike(String username);2. UserMapper.xml映射文件添加標(biāo)簽
<!-- 使用#定義參數(shù) -->
<select id="findByNameLike" parameterType="string"
resultType="com.mybatisstudy.pojo.User">
select * from user where username like #{name}
</select>我們看到在映射文件中,parameterType的值為 string 而沒有寫java.lang.String ,這是為什么呢?參數(shù)/返回值類型為基本數(shù)據(jù)類型/包裝類/String等類型時,我們可以寫全類名,也可以寫別名。
下表就是一些數(shù)據(jù)類型對應(yīng)的別名
數(shù)據(jù)類型 | 別名 |
|---|---|
| byte | _byte |
| long | _long |
| short | _short |
| int | _int |
| int | _integer |
| double | _double |
| float | _float |
| boolean | _boolean |
| String | string |
| Byte | byte |
| Long | long |
| Short | short |
| Interger | int / interger |
| Double | double |
| Float | float |
| Boolean | boolean |
| Date | date |
| BigDecimal | decimal / bigdecimal |
| Object | object |
| Map | map |
| HashMap | hashmap |
| List | list |
| ArrayList | arraylist |
| Collection | collection |
| Iterator | iterator |
3. 添加測試方法
// 測試根據(jù)名字模糊查詢
@Test
public void testFindByNameLike(){
String like = "%l%";
List<User> list = userMapper.findByNameLike(like);
list.forEach(System.out::println);
}4. 運行結(jié)果

OK,這里是成功查詢出來了,并且控制臺打印日志也和我們的參數(shù)一致
二、使用$定義參數(shù)
模糊查詢?nèi)绻幌朐谡{(diào)用方法時參數(shù)加%,可以使用拼接參數(shù)的方式設(shè)置Sql:
1. UserMapper.xml映射文件更改標(biāo)簽內(nèi)容
<!-- 使用$定義參數(shù) -->
<select id="findByNameLike" resultType="com.mybatisstudy.pojo.User" parameterType="string">
select * from user where username like '%${value}%'
</select>2. 修改測試方法
// 測試根據(jù)名字模糊查詢
@Test
public void testFindByNameLike(){
String like = "l";
List<User> list = userMapper.findByNameLike(like);
list.forEach(System.out::println);
}3. 運行結(jié)果

#和$的區(qū)別:
#表示sql模板的占位符,$表示將字符串拼接到sql模板中。#可以防止sql注入,一般能用#就不用$。${}內(nèi)部的參數(shù)名必須寫value。
三、使用<bind>標(biāo)簽定義參數(shù)
如果使用 # 還不想在調(diào)用方法的參數(shù)中添加 % ,可以使用 <bind> , <bind> 允許我們在 Sql語句以外創(chuàng)建一個變量,并可以將其綁定到當(dāng)前的Sql語句中。用法如下:
1. UserMapper.xml映射文件更改標(biāo)簽內(nèi)容
<!-- 使用<bind>標(biāo)簽定義參數(shù) -->
<select id="findByNameLike" parameterType="String" resultType="com.mybatisstudy.pojo.User">
<bind name="likeName" value="'%' + username + '%'"/>
select * from user where username like #{likeName}
</select>2. 運行結(jié)果

四、聚合查詢
1. 持久層接口添加查詢所有用戶個數(shù)方法
// 查詢用戶總數(shù)
int findCount();2. UserMapper.xml添加標(biāo)簽
<!-- 聚合查詢 -->
<select id="findCount" resultType="int">
select count(id) from user
</select>3. 添加測試方法
// 測試聚合查詢方法
@Test
public void testFindCount(){
System.out.println(userMapper.findCount());
}4. 運行結(jié)果


還是比較可靠的,確實查詢出來了用戶總數(shù)
五、主鍵回填
有時我們需要獲取新插入數(shù)據(jù)的主鍵值。如果數(shù)據(jù)庫中主鍵是自增的,這時我們就需要使用MyBatis的主鍵回填功能。
1. 持久層接口添加新增用戶方法
// 主鍵回填-新增用戶
void add2(User user);2. UserMapper.xml添加標(biāo)簽
<!-- 主鍵回填 -->
<insert id="add2" parameterType="com.mybatisstudy.pojo.User">
<!-- keyProperty:主鍵屬性名,keyColumn:主鍵列名,resultType:主鍵類型,order:執(zhí)行時機 -->
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into user(username,sex,address)
values (#{username},#{sex},#{address})
</insert>SELECT LAST_INSERT_ID():查詢剛剛插入的記錄的主鍵值,只適用于自增主鍵,且必須和insert語句一起執(zhí)行。
3. 添加測試方法
// 測試主鍵回填功能
@Test
public void testAdd2(){
User user = new User("Lions","man","Beijing");
userMapper.add2(user);
session.commit();
System.out.println(user.getId());
}4. 運行結(jié)果

好,控制臺是成功顯示添加了,用戶id為11,那我們看看表里面是否成功添加了

確實是成功添加了,ok,本篇文章到此為止了,感謝小伙伴的瀏覽,順便點擊下面投一下票囖,看看您是否有學(xué)到了呢
到此這篇關(guān)于Mybatis模糊查詢之三種定義參數(shù)方法和聚合查詢、主鍵回填實現(xiàn)方法的文章就介紹到這了,更多相關(guān)Mybatis模糊查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決window.location.href之后session丟失的問題
今天小編就為大家分享一篇關(guān)于解決window.location.href之后session丟失的問題,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
使用@CachePut?更新數(shù)據(jù)庫和更新緩存
這篇文章主要介紹了使用@CachePut?更新數(shù)據(jù)庫和更新緩存方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring?Cloud微服務(wù)架構(gòu)Sentinel數(shù)據(jù)雙向同步
這篇文章主要為大家介紹了Spring?Cloud微服務(wù)架構(gòu)Sentinel數(shù)據(jù)雙向同步示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10

