Mybatis中特殊SQL的執(zhí)行
1.模糊查詢
大家應(yīng)該還記得sql語(yǔ)句的模糊查詢?cè)趺磳?xiě)吧,那就是使用關(guān)鍵字like,
并且有相應(yīng)的通配符一起使用,%表示多個(gè)字符,_表示一個(gè)字符,比如說(shuō)現(xiàn)在有一張表user,查詢name中第一個(gè)字母是l的人select * from user where name like ‘_l’;
如果是查詢name中有 l 的人select * from user where name like ‘%l%’;
模糊查詢不可以使用#{},接下來(lái)通過(guò)案例來(lái)說(shuō)明一下,提供一個(gè)mapper接口用來(lái)測(cè)試,里面定義了操作數(shù)據(jù)庫(kù)的各種方法
/** ? ? ?* 根據(jù)用戶名模糊查詢用戶信息 ? ? ?*/ ? ? List<User> getUserByLike(@Param("username") String username);
在映射文件中寫(xiě)上我們要進(jìn)行執(zhí)行的sql語(yǔ)句
<select id="getUserByLike" resultType="com.atguigu.mybatis.pojo.User"> ? ? ? ? select * ? ? ? ? from t_user ? ? ? ? where username like ?'%#{username}%'; ? ? </select>??
然后進(jìn)行測(cè)試
那要怎么解決上述問(wèn)題呢,有兩種方式可以解決。
解決方法1
SQL語(yǔ)句中的#{}換成${}
?<select id="getUserByLike" resultType="com.atguigu.mybatis.pojo.User"> ? ? ? ? select * ? ? ? ? from t_user ? ? ? ? where username like ?'%${username}%'; ? ? </select>?
解決方法2
使用字符串拼接
?<select id="getUserByLike" resultType="com.atguigu.mybatis.pojo.User"> ? ? ? ? select * ? ? ? ? from t_user ? ? ? ? where username like ?concat('%',#{username},'%'); ? ? </select>
解決方法3(建議使用這種方式)
?<select id="getUserByLike" resultType="com.atguigu.mybatis.pojo.User"> ? ? ? ? select * ? ? ? ? from t_user ? ? ? ? where username like ? "%"#{username}"%"; ? ? </select>
2.批量刪除
delete from 表名 where 篩選條件
?int delete(@Param("ids") String ids);
在映射文件中寫(xiě)下面的代碼
?<delete id="delete" > ? ? ? ? delete ?from t_user where id in(#{ids}); ? ? </delete>
那我們要怎么解決呢?
可以使用${}
?<delete id="delete" > ? ? ? ? delete ?from t_user where id in(#{ids}); ? ? </delete>
總結(jié): 在這里批量刪除不能使用#{},因?yàn)樗鼤?huì)自動(dòng)加上’ '進(jìn)行字符串拼接 ,而我們的數(shù)據(jù)庫(kù)中,字段id的屬性是int類型的,由于#{}會(huì)自動(dòng)加上單引號(hào)所以不可以,是不正確的,但是如果id字段的屬性是varchar,我們就得用#{],而不是${}
3.動(dòng)態(tài)設(shè)置表名
也就是說(shuō)我們查詢的時(shí)候,能不能不要把表名給寫(xiě)死,我們可以傳入表的名字,然后根據(jù)表名來(lái)查詢數(shù)據(jù)
? /** ? ? ?* 查詢表名來(lái)查詢數(shù)據(jù) ? ? ?*/ ? ? List<User> getUserByTableName(@Param("tableName") String table);
?<select id="getUserByTableName" resultType="com.atguigu.mybatis.pojo.User"> ? ? ? ? ? select * from ${tableName} ? ? </select>
注意點(diǎn):我們以前在學(xué)習(xí)MySQL的時(shí)候,比如說(shuō)寫(xiě)一個(gè)查詢語(yǔ)句select * from user;我們這里的表名不能加引號(hào)對(duì)吧,同樣的道理我們?cè)谟成湮募?xiě)的sql語(yǔ)句,表名也不能加引號(hào),那樣就變成字符串了,所以動(dòng)態(tài)設(shè)置表名應(yīng)該使用${}
4. 添加功能獲取自增的主鍵
- t_clazz(clazz_id,clazz_name)
- t_student(student_id,student_name,clazz_id)
- 1.添加班級(jí)信息
- 2.獲取新添加的班級(jí)id
- 3.為班級(jí)分配學(xué)生,就是說(shuō)把某一個(gè)學(xué)生的班級(jí)id修改成新添加的班級(jí)id
/** ? 添加用戶信息 ? ? useGeneratedKeys:設(shè)置使用自增的主鍵 keyProperty:因?yàn)樵鰟h改有統(tǒng)一的返回值是受影響的行數(shù), 因此只能將獲取的自增的主鍵放在傳輸?shù)膮?shù)user對(duì)象的某個(gè)屬性中 */ int insertUser(Useruser);
<! --int insertUser(Useruser); --> <insert id="insertUser"useGeneratedKeys="true"keyProperty="id"> insert into t_user values(null,#{username},#{password} ) </insert>
到此這篇關(guān)于Mybatis中特殊SQL的執(zhí)行的文章就介紹到這了,更多相關(guān)Mybatis SQL 執(zhí)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)幾種常見(jiàn)排序算法代碼
排序(Sorting) 是計(jì)算機(jī)程序設(shè)計(jì)中的一種重要操作,它的功能是將一個(gè)數(shù)據(jù)元素(或記錄)的任意序列,重新排列成一個(gè)關(guān)鍵字有序的序列2013-09-09java簡(jiǎn)單實(shí)現(xiàn)多線程及線程池實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹了java簡(jiǎn)單實(shí)現(xiàn)多線程,及java爬蟲(chóng)使用線程池實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03java中重寫(xiě)equals()方法的同時(shí)要重寫(xiě)hashcode()方法(詳解)
下面小編就為大家?guī)?lái)一篇java中重寫(xiě)equals()方法的同時(shí)要重寫(xiě)hashcode()方法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05java 實(shí)現(xiàn)通過(guò) post 方式提交json參數(shù)操作
這篇文章主要介紹了java 實(shí)現(xiàn)通過(guò) post 方式提交json參數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09解決SpringBoot運(yùn)行Test時(shí)報(bào)錯(cuò):SpringBoot Unable to find
這篇文章主要介紹了SpringBoot運(yùn)行Test時(shí)報(bào)錯(cuò):SpringBoot Unable to find a @SpringBootConfiguration,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java Math類的三個(gè)方法ceil,floor,round用法
這篇文章主要介紹了Java Math類的三個(gè)方法ceil,floor,round用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07idea同時(shí)打開(kāi)多個(gè)項(xiàng)目的圖文教程
這篇文章主要給大家介紹了idea同時(shí)打開(kāi)多個(gè)項(xiàng)目的圖文教程,文章通過(guò)圖文結(jié)合的形式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02Maven倉(cāng)庫(kù)分類的優(yōu)先級(jí)
本文主要介紹了Maven倉(cāng)庫(kù)分類的優(yōu)先級(jí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04