Mybatis动态sql的使用
通過mybatis提供的各種標(biāo)簽方法實(shí)現(xiàn)動(dòng)態(tài)拼接sql。
為什么用if標(biāo)簽?
UserMapper.xml配置sql,如下:
<!-- 根據(jù)條件查詢用戶 --> <select id="queryUserByWhere" parameterType="user" resultType="user">SELECT id, username, birthday, sex, address FROM `user`WHERE sex = #{sex} AND username LIKE'%${username}%' </select>Mapper接口
List<User> queryUserByWhere(User user);測試方法
測試方法:
此時(shí)的測試結(jié)果是正常的,如果注釋掉 user.setSex(“1”),那么輸出的結(jié)果為空,因?yàn)槲覀兊膚here中必須同時(shí)去匹配sex與username如果我們想通過其中任意一個(gè)查詢數(shù)據(jù)庫結(jié)果,那么又需要分別添加兩個(gè)SQL語句代碼,那么如果有多個(gè)條件呢?是不是每次都要重新添加,顯然之前這種方式是不靠譜的,因?yàn)橐雱?dòng)態(tài)sql的if標(biāo)簽可以解決此問題。
使用if標(biāo)簽
注意:字符串類型的數(shù)據(jù)需要要做不等于空字符串校驗(yàn)。
and放在sex或者username的前面是合法的,如果前面沒有條件會(huì)自動(dòng)把a(bǔ)nd去掉,如果放在條件后面不會(huì)自動(dòng)去掉,可能造成異常!
where 1=1是sql語句條件邏輯判斷表達(dá)式,由于1=1成立,恒為真,該表達(dá)式1=1將始終返回”真”。
改造UserMapper.xml
Where標(biāo)簽
上面的sql還有where 1=1 這樣的語句,很麻煩
可以使用where標(biāo)簽進(jìn)行改造
改造UserMapper.xml,如下
sql片段使用
Sql中可將重復(fù)的sql提取出來,使用時(shí)用include引用即可,最終達(dá)到sql重用的目的。
把上面例子中的id, username, birthday, sex, address提取出來,作為sql片段,如下:
注意:申明用sql標(biāo)簽使用用include和里面的refid屬性
如果要使用別的Mapper.xml配置的sql片段,可以在refid前面加上對應(yīng)的Mapper.xml的namespace
foreach標(biāo)簽
向sql傳遞數(shù)組或List,mybatis使用foreach解析,如下:
根據(jù)多個(gè)id查詢用戶信息
查詢sql:
SELECT * FROM user WHERE id IN (1,10,24)
QueryVo類:
如下圖在pojo中定義list屬性ids存儲(chǔ)多個(gè)用戶id,并添加getter/setter方法
Mapper.xml文件
UserMapper.xml添加sql,如下:
測試方法:
@Test public void testQueryUserByIds() {// mybatis和spring整合,整合之后,交給spring管理SqlSession sqlSession = this.sqlSessionFactory.openSession();// 創(chuàng)建Mapper接口的動(dòng)態(tài)代理對象,整合之后,交給spring管理UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 使用userMapper執(zhí)行根據(jù)條件查詢用戶QueryVo queryVo = new QueryVo();List<Integer> ids = new ArrayList<>();ids.add(1);ids.add(10);ids.add(24);queryVo.setIds(ids);List<User> list = userMapper.queryUserByIds(queryVo);for (User u : list) {System.out.println(u);}// mybatis和spring整合,整合之后,交給spring管理sqlSession.close(); }總結(jié)
以上是生活随笔為你收集整理的Mybatis动态sql的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel中VBa应用总结
- 下一篇: 回调函数的应用