MyBatis特殊SQL的執(zhí)行實(shí)例代碼
1.模糊查詢
接口:
public interface SelectMapper { List<User> getUserByLike(@Param("mohu") String mohu); }
SQL(錯(cuò)誤示范):
<select id="getUserByLike" resultType="com.atguigu.mybatis.pojo.User"> SELECT * FROM t_user WHERE PASSWORD LIKE '%#{mohu}%' </select>
測(cè)試:
public void test7(){ SqlSessionUtils sqlSessionUtils = new SqlSessionUtils(); SqlSession sqlSession = sqlSessionUtils.getSqlSession(); SelectMapper mapper = sqlSession.getMapper(SelectMapper.class); List<User> userByLike = mapper.getUserByLike("123"); System.out.println(userByLike); }
運(yùn)行結(jié)果:
SQL: SELECT * FROM t_user WHERE PASSWORD LIKE '%?%'
因?yàn)椋?{}:相當(dāng)于參數(shù)占位符,且會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào),外面已經(jīng)有一層引號(hào),所以報(bào)錯(cuò)。
SQL(正確示范,以下3種都行):
- select * from t_user where password like '%${mohu}%'
- select * from t_user where password like concat('%',#{mohu},'%')
- select * from t_user where password like "%"#{mohu}"%"
運(yùn)行結(jié)果:
2.批量刪除
接口:
/** * * @param ids * @return */ int deleteMoreUser(@Param("ids") String ids);
SQL:
<delete id="deleteMoreUser"> delete from t_user where id in(${ids}) </delete>
測(cè)試:
public void test8(){ SqlSessionUtils sqlSessionUtils = new SqlSessionUtils(); SqlSession sqlSession = sqlSessionUtils.getSqlSession(); SelectMapper mapper = sqlSession.getMapper(SelectMapper.class); int i = mapper.deleteMoreUser("1,2"); }
表:
運(yùn)行結(jié)果:
3.動(dòng)態(tài)設(shè)置表名
當(dāng)有多張表時(shí),例如 VIP表 和 普通表 ,這時(shí)需要?jiǎng)討B(tài)設(shè)置表名。
接口:
List<User> getAllUser(@Param("tableName") String tableName);
SQL:
select * from ${tableName}
注意:不能使用 #{}
select * from #{tableName}
因?yàn)?{} 會(huì)自動(dòng)添加單引號(hào),就變成了:
select * from '表名'
4.添加功能獲取自增的主鍵
場(chǎng)景模擬:
t_clazz(clazz_id,clazz_name)
t_student(student_id,student_name,clazz_id)
1 、添加班級(jí)信息
2 、獲取新添加的班級(jí)的 id
3 、為班級(jí)分配學(xué)生,即將某學(xué)的班級(jí) id 修改為新添加的班級(jí)的 id
接口:
int insertUser(User user);
SQL:
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id"> insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email}) </insert>
測(cè)試:
public void test9(){ SqlSessionUtils sqlSessionUtils = new SqlSessionUtils(); SqlSession sqlSession = sqlSessionUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = new User(null,"小K","183918389",22,"男","13121178@qq.com"); mapper.insertUser(user); System.out.println(user); }
效果:
如果把 useGeneratedKeys keyProperty 刪除
運(yùn)行結(jié)果:
發(fā)現(xiàn)id=null
useGeneratedKeys:設(shè)置使用自增的主鍵
keyProperty:因?yàn)樵鰟h改有統(tǒng)一的返回值是受影響的行數(shù),因此只能將獲取的自增的主鍵放在傳輸?shù)膮?shù)user對(duì)象的某個(gè)屬性中
總結(jié)
到此這篇關(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)單音樂(lè)播放器功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)單音樂(lè)播放器功能,涉及java針對(duì)多媒體文件相關(guān)載入、播放相關(guān)操作技巧,需要的朋友可以參考下2019-02-02ConcurrentHashMap?存儲(chǔ)結(jié)構(gòu)源碼解析
這篇文章主要為大家介紹了ConcurrentHashMap?存儲(chǔ)結(jié)構(gòu)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Java編程文件遍歷之指定遍歷的層數(shù)詳細(xì)代碼
這篇文章主要介紹了Java編程文件遍歷之指定遍歷的層數(shù)詳細(xì)代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12maven導(dǎo)入本地倉(cāng)庫(kù)jar包,報(bào):Could?not?find?artifact的解決
這篇文章主要介紹了maven導(dǎo)入本地倉(cāng)庫(kù)jar包,報(bào):Could?not?find?artifact的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03List對(duì)象去重和按照某個(gè)字段排序的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇List對(duì)象去重和按照某個(gè)字段排序的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05Java查詢Elasticsearch數(shù)據(jù)根據(jù)指定id檢索(in查詢)、sql權(quán)限過(guò)濾、多字段匹配檢索及數(shù)據(jù)排序
在Java開(kāi)發(fā)中Elasticsearch(簡(jiǎn)稱ES)是一個(gè)非常流行的搜索引擎,它提供了強(qiáng)大的全文搜索和分析功能,這篇文章主要給大家介紹了關(guān)于Java查詢Elasticsearch數(shù)據(jù)根據(jù)指定id檢索(in查詢)、sql權(quán)限過(guò)濾、多字段匹配檢索及數(shù)據(jù)排序的相關(guān)資料,需要的朋友可以參考下2024-05-05springmvc級(jí)聯(lián)屬性處理無(wú)法轉(zhuǎn)換異常問(wèn)題解決
這篇文章主要介紹了springmvc級(jí)聯(lián)屬性處理無(wú)法轉(zhuǎn)換異常問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12