久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Mybatis中處理特殊SQL處理邏輯解析

瀏覽:5日期:2023-09-28 21:00:59
目錄0、前言1、模糊查詢(xún)2、動(dòng)態(tài)表名3、獲取自增的組件4、批量刪除0、前言

在MyBatis中可能會(huì)有一些特殊的SQL需要去執(zhí)行,一般就是模糊查詢(xún)、批量刪除、動(dòng)態(tài)設(shè)置表名、添加功能獲取自增的主鍵這幾種,現(xiàn)在分別來(lái)進(jìn)行說(shuō)明。為了方便演示 ,定義了訪問(wèn)的接口

public interface SQLMapper { /** * 根據(jù)用戶(hù)名模糊查詢(xún)用戶(hù)信息 */ List<User> getUserByLike(@Param('username') String username); /** * 批量刪除 */ int deleteMore(String ids); /** * 查詢(xún)指定表中的數(shù)據(jù) */ List<User> getUserByTableName(String tableName); /** * 添加用戶(hù) */ void insetUser(User user);}1、模糊查詢(xún)

模糊查詢(xún)非常的有用,對(duì)于一些訪問(wèn)量不是很大的搜索都是直接使用模糊查詢(xún)的方式來(lái)做的。SQLMapper類(lèi):

public interface SQLMapper { /** * 根據(jù)用戶(hù)名模糊查詢(xún)用戶(hù)信息 */ List<User> getUserByLike(@Param('username') String username);}

對(duì)于SQLXml的編寫(xiě);

<!-- List<User> getUserByLike(@Param('username') String username);--><!-- 使用#{},因?yàn)榘ㄔ趩我?hào)里,會(huì)被認(rèn)為是字符串的一部分:select * from t_user where username like '%#{username}%'--><!-- 三種方式--> <select resultType='User'> <!-- 第一種 select * from t_user where username like '%${username}%' 第二種 select * from t_user where username like concat('%', #{username}, '%')--> <!--第三種 推薦使用-->select * from t_user where username like '%'#{username}'%' </select>

需要注意的是Mybatis對(duì)JDBC進(jìn)行了進(jìn)一步封裝,使得我們可以更加便捷的使用Java操作數(shù)據(jù)庫(kù)。Mybatis獲取參數(shù)值有兩種方式:#{}和${}

在大部分情況下,#{}和${}都能相互替代,使用兩者之一即可,更加推薦使用#{},因?yàn)榭梢苑乐筍QL注入問(wèn)題,但是由于#{}和${}本質(zhì)上的不同,部分SQL語(yǔ)句使用#{}和${}需要格外注意

#{}和${}本質(zhì)區(qū)別

#{}本質(zhì)上是占位符賦值,為字符串類(lèi)型或日期類(lèi)型的字段進(jìn)行賦值時(shí),可以自動(dòng)添加單引號(hào)${}本質(zhì)上是字符串拼接,為字符串類(lèi)型或日期類(lèi)型的字段進(jìn)行賦值時(shí),需要手動(dòng)加單引號(hào)

這個(gè)場(chǎng)景下,使用#{}和${}都能達(dá)到目的,但是用法稍有不同如果是直接使用

<select resultType='pojo.User'>select * from user where user_name like '%#{username}%'</select>

這種方式,?被作為是字符串來(lái)處理了。

將#{}換成${}

<select resultType='pojo.User'> select * from user where user_name like '%${username}%'</select>

成功執(zhí)行如果非要使用#{},也不是沒(méi)有解決辦法使用""拼接

<select resultType='pojo.User'> select * from user where user_name like '%'#{username}'%'</select>

執(zhí)行結(jié)果

或者是使用concat()函數(shù)來(lái)拼接

<select resultType='pojo.User'> select * from user where user_name like concat('%',#{likeString},'%')</select>

結(jié)果是;

2、動(dòng)態(tài)表名

在某些場(chǎng)景下,我們需要來(lái)回操作各種表,但SQL語(yǔ)句功能一致,這時(shí)我們可以使用動(dòng)態(tài)表名,即傳參為表名類(lèi)型,這時(shí)就要從#{}和${}中進(jìn)行選擇了Mapper接口

List<User> selectAllFromTable(@Param('tableName') String tableName);

如果是直接使用#{}的方式

<select resultType='pojo.User'> select * from #{tableName}</select>

結(jié)果報(bào)錯(cuò),原因在于#{}為占位符賦值,傳參為String的話就會(huì)自動(dòng)補(bǔ)上單引號(hào)'',而表名不允許添加單引號(hào),所以導(dǎo)致出錯(cuò)。

直接使用${}的方式

<select resultType='pojo.User'> select * from ${tableName}</select>

結(jié)果成功了,所以在動(dòng)態(tài)表名的情況下,我們只能使用${}

3、獲取自增的組件

需要在xml中配置 useGeneratedKeys , keyProperty 兩個(gè)屬性的值.

<!-- void insetUser(User user);--><!-- 方法的返回值是固定的useGeneratedKeys 設(shè)置當(dāng)前標(biāo)簽中的sql使用了自增的主鍵 (id)keyProperty 將自增的主鍵的值 賦值給 傳輸?shù)接成湮募械膮?shù)的某個(gè)屬性(user.id)--> <insert useGeneratedKeys='true' keyProperty='id'>insert into t_user values(null, #{username}, #{password},#{age},#{gender},#{email}) </insert>4、批量刪除

有些場(chǎng)景,需要我們根據(jù)id數(shù)組批量刪除記錄,這個(gè)時(shí)候也有一些坑由于id數(shù)組的長(zhǎng)度是不確定的,所以我們不能確定參數(shù)的個(gè)數(shù),但是我們可以使用in關(guān)鍵字,這個(gè)時(shí)候我們將id數(shù)組轉(zhuǎn)為字符串進(jìn)行傳參就好了。[1,2,3] => 1,2,3Mapper接口

Integer deleteByIds(String Ids);

使用#{}

<delete id='deleteByIds'> delete from user where id in (#{ids})</delete>

結(jié)果報(bào)錯(cuò),原因在于in后面的小括號(hào)里面的'1,2,3'為字符串類(lèi)型且為一個(gè)整體,與整數(shù)類(lèi)型不符,因此不能使用#{}

使用${}

<delete id='deleteByIds'> delete from user where id in (${ids})</delete>

結(jié)果成功了,看來(lái)有些場(chǎng)景不得不使用${}

到此這篇關(guān)于Mybatis中處理特殊SQL處理邏輯的文章就介紹到這了,更多相關(guān)Mybatis特殊SQL處理內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MsSQL 數(shù)據(jù)庫(kù)
主站蜘蛛池模板: 一级做a爰片性色毛片2021 | 91av导航 | 99视频免费播放 | 免费二区 | 欧美日韩视频在线观看一区 | 日本黄色大片免费 | 99精品免费视频 | 亚洲精品久久久久avwww潮水 | 福利精品视频 | 国产高清精品一区二区三区 | 在线视频不卡一区 | 国产日韩精品在线观看 | 午夜精品久久久 | 国产四区 | 久久久av | www.xxx在线观看 | 欧美一级视频免费 | 精品三级在线观看 | 欧美亚洲视频 | 国产高清在线精品一区二区三区 | 日韩无 | www.麻豆 | 国产高清一区二区 | 久久精品国产亚洲精品 | 欧美视频精品 | 日产一区二区 | 国产夜夜夜| 一区二区中文 | 亚洲精选久久 | 日日摸天天爽天天爽视频 | 免费99精品国产自在在线 | 99福利视频 | 不卡一二 | 国精产品一区二区三区黑人免费看 | 亚洲免费在线观看 | 一区二区中文 | av大全在线 | 成人在线视频网站 | 精品国产乱码久久久久久1区2区 | 在线免费看黄视频 | 久久国产精品99久久久久久老狼 |