MyBatis特殊SQL的執(zhí)行實例代碼
1.模糊查詢
接口:
public interface SelectMapper { List<User> getUserByLike(@Param("mohu") String mohu); }
SQL(錯誤示范):
<select id="getUserByLike" resultType="com.atguigu.mybatis.pojo.User"> SELECT * FROM t_user WHERE PASSWORD LIKE '%#{mohu}%' </select>
測試:
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); }
運行結(jié)果:
SQL: SELECT * FROM t_user WHERE PASSWORD LIKE '%?%'
因為:#{}:相當于參數(shù)占位符,且會對自動傳入的數(shù)據(jù)加一個雙引號,外面已經(jīng)有一層引號,所以報錯。
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}"%"
運行結(jié)果:
2.批量刪除
接口:
/** * * @param ids * @return */ int deleteMoreUser(@Param("ids") String ids);
SQL:
<delete id="deleteMoreUser"> delete from t_user where id in(${ids}) </delete>
測試:
public void test8(){ SqlSessionUtils sqlSessionUtils = new SqlSessionUtils(); SqlSession sqlSession = sqlSessionUtils.getSqlSession(); SelectMapper mapper = sqlSession.getMapper(SelectMapper.class); int i = mapper.deleteMoreUser("1,2"); }
表:
運行結(jié)果:
3.動態(tài)設(shè)置表名
當有多張表時,例如 VIP表 和 普通表 ,這時需要動態(tài)設(shè)置表名。
接口:
List<User> getAllUser(@Param("tableName") String tableName);
SQL:
select * from ${tableName}
注意:不能使用 #{}
select * from #{tableName}
因為#{} 會自動添加單引號,就變成了:
select * from '表名'
4.添加功能獲取自增的主鍵
場景模擬:
t_clazz(clazz_id,clazz_name)
t_student(student_id,student_name,clazz_id)
1 、添加班級信息
2 、獲取新添加的班級的 id
3 、為班級分配學(xué)生,即將某學(xué)的班級 id 修改為新添加的班級的 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>
測試:
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 刪除
運行結(jié)果:
發(fā)現(xiàn)id=null
useGeneratedKeys:設(shè)置使用自增的主鍵
keyProperty:因為增刪改有統(tǒng)一的返回值是受影響的行數(shù),因此只能將獲取的自增的主鍵放在傳輸?shù)膮?shù)user對象的某個屬性中
總結(jié)
到此這篇關(guān)于MyBatis特殊SQL的執(zhí)行的文章就介紹到這了,更多相關(guān)MyBatis特殊SQL執(zhí)行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ConcurrentHashMap?存儲結(jié)構(gòu)源碼解析
這篇文章主要為大家介紹了ConcurrentHashMap?存儲結(jié)構(gòu)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10maven導(dǎo)入本地倉庫jar包,報:Could?not?find?artifact的解決
這篇文章主要介紹了maven導(dǎo)入本地倉庫jar包,報:Could?not?find?artifact的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03Java查詢Elasticsearch數(shù)據(jù)根據(jù)指定id檢索(in查詢)、sql權(quán)限過濾、多字段匹配檢索及數(shù)據(jù)排序
在Java開發(fā)中Elasticsearch(簡稱ES)是一個非常流行的搜索引擎,它提供了強大的全文搜索和分析功能,這篇文章主要給大家介紹了關(guān)于Java查詢Elasticsearch數(shù)據(jù)根據(jù)指定id檢索(in查詢)、sql權(quán)限過濾、多字段匹配檢索及數(shù)據(jù)排序的相關(guān)資料,需要的朋友可以參考下2024-05-05springmvc級聯(lián)屬性處理無法轉(zhuǎn)換異常問題解決
這篇文章主要介紹了springmvc級聯(lián)屬性處理無法轉(zhuǎn)換異常問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下2019-12-12