Mybatis中特殊SQL的執(zhí)行
1.模糊查詢
大家應該還記得sql語句的模糊查詢怎么寫吧,那就是使用關鍵字like,
并且有相應的通配符一起使用,%表示多個字符,_表示一個字符,比如說現(xiàn)在有一張表user,查詢name中第一個字母是l的人select * from user where name like ‘_l’;
如果是查詢name中有 l 的人select * from user where name like ‘%l%’;
模糊查詢不可以使用#{},接下來通過案例來說明一下,提供一個mapper接口用來測試,里面定義了操作數(shù)據(jù)庫的各種方法
/** ? ? ?* 根據(jù)用戶名模糊查詢用戶信息 ? ? ?*/ ? ? List<User> getUserByLike(@Param("username") String username);
在映射文件中寫上我們要進行執(zhí)行的sql語句
<select id="getUserByLike" resultType="com.atguigu.mybatis.pojo.User"> ? ? ? ? select * ? ? ? ? from t_user ? ? ? ? where username like ?'%#{username}%'; ? ? </select>??
然后進行測試
那要怎么解決上述問題呢,有兩種方式可以解決。
解決方法1
SQL語句中的#{}換成${}
?<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);
在映射文件中寫下面的代碼
?<delete id="delete" > ? ? ? ? delete ?from t_user where id in(#{ids}); ? ? </delete>
那我們要怎么解決呢?
可以使用${}
?<delete id="delete" > ? ? ? ? delete ?from t_user where id in(#{ids}); ? ? </delete>
總結: 在這里批量刪除不能使用#{},因為它會自動加上’ '進行字符串拼接 ,而我們的數(shù)據(jù)庫中,字段id的屬性是int類型的,由于#{}會自動加上單引號所以不可以,是不正確的,但是如果id字段的屬性是varchar,我們就得用#{],而不是${}
3.動態(tài)設置表名
也就是說我們查詢的時候,能不能不要把表名給寫死,我們可以傳入表的名字,然后根據(jù)表名來查詢數(shù)據(jù)
? /** ? ? ?* 查詢表名來查詢數(shù)據(jù) ? ? ?*/ ? ? List<User> getUserByTableName(@Param("tableName") String table);
?<select id="getUserByTableName" resultType="com.atguigu.mybatis.pojo.User"> ? ? ? ? ? select * from ${tableName} ? ? </select>
注意點:我們以前在學習MySQL的時候,比如說寫一個查詢語句select * from user;我們這里的表名不能加引號對吧,同樣的道理我們在映射文件寫的sql語句,表名也不能加引號,那樣就變成字符串了,所以動態(tài)設置表名應該使用${}
4. 添加功能獲取自增的主鍵
- t_clazz(clazz_id,clazz_name)
- t_student(student_id,student_name,clazz_id)
- 1.添加班級信息
- 2.獲取新添加的班級id
- 3.為班級分配學生,就是說把某一個學生的班級id修改成新添加的班級id
/** ? 添加用戶信息 ? ? useGeneratedKeys:設置使用自增的主鍵 keyProperty:因為增刪改有統(tǒng)一的返回值是受影響的行數(shù), 因此只能將獲取的自增的主鍵放在傳輸?shù)膮?shù)user對象的某個屬性中 */ int insertUser(Useruser);
<! --int insertUser(Useruser); --> <insert id="insertUser"useGeneratedKeys="true"keyProperty="id"> insert into t_user values(null,#{username},#{password} ) </insert>
到此這篇關于Mybatis中特殊SQL的執(zhí)行的文章就介紹到這了,更多相關Mybatis SQL 執(zhí)行內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java中重寫equals()方法的同時要重寫hashcode()方法(詳解)
下面小編就為大家?guī)硪黄猨ava中重寫equals()方法的同時要重寫hashcode()方法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05java 實現(xiàn)通過 post 方式提交json參數(shù)操作
這篇文章主要介紹了java 實現(xiàn)通過 post 方式提交json參數(shù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09解決SpringBoot運行Test時報錯:SpringBoot Unable to find
這篇文章主要介紹了SpringBoot運行Test時報錯:SpringBoot Unable to find a @SpringBootConfiguration,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Java Math類的三個方法ceil,floor,round用法
這篇文章主要介紹了Java Math類的三個方法ceil,floor,round用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07