本文共 3741 字,大约阅读时间需要 12 分钟。
在一些情况下,如查询参数不确定时,需要用到动态sql
例子,根据动态输入的查询条件查询student.
一.if语句
1.StudentTMapper
package com.skymr.mybatis.mappers;import java.util.List;import java.util.Map;import com.skymr.mybatis.model.Student;public interface StudentTMapper { public Listmap参数是查询条件searchStudents(Map map);}
2.StudentTMappler.xml
3.测试
package com.skymr.mybatis.service;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.ibatis.session.SqlSession;import org.junit.After;import org.junit.Before;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.skymr.mybatis.mappers.StudentTMapper;import com.skymr.mybatis.model.Student;import com.skymr.mybatis.util.MybatisUtil;public class StudentTest4 { private Logger logger = LoggerFactory.getLogger(StudentTest4.class); private SqlSession session; @Before public void beforeTest(){ session = MybatisUtil.openSession(); } @After public void afterTest(){ session.close(); } @Test public void testSearch(){ logger.info("测试查询学生"); StudentTMapper mapper = session.getMapper(StudentTMapper.class); Mapmap = new HashMap (); map.put("name", "%aaa%"); map.put("age", 111); List list = mapper.searchStudents(map); logger.info(list.toString()); } }
二.choose,when ,otherwise
Sometimes we don’t want all of the conditionals to apply, instead we want to choose only one caseamong many options. Similar to a switch statement in Java, MyBatis offers a choose element.Let’s use the example above, but now let’s search only on title if one is provided, then only by authorif one is provided. If neither is provided, let’s only return featured blogs (perhaps a strategically listselected by administrators, instead of returning a huge meaningless list of random blogs).有些时候我们不想所有的条件都使用到,只想在所有条件中选择一个条件.与java的switch语种相似,Mybatis提供了一个元素.让我们做个例子. 上面的例子是引用Mybatis文档.
自己的例子:
三.trim, where, set元素1.当没有条件时,有可能会生成这样的sql
SELECT * FROM BLOGWHERE
如果不在后边加入 1=1,则应该加上where标签
改成这样就可以避免以上情况. 2.还有这种情况SELECT * FROM BLOGWHEREAND title like ‘someTitle’需要去年多余的and /or 同样,update set语句也会出现多余的","的问题
也可以使用trim修改update Author where id=#{id} username=#{username}, password=#{password}, email=#{email}, bio=#{bio}
四.foreach元素update Author where id=#{id} username=#{username}, password=#{password}, email=#{email}, bio=#{bio}
这是一个非常有用的动态sql元素,用来遍历集合,常应用于IN语句中,例:
IN condition. For example:
foreach元素非常强大,它允许你指定一个集合,声明item和index变量,在元素内部使用.生成有"开始/结尾/分隔符"的字符串,这个元素非常智能,它不会不小心添加额外的分隔符.
记住,你可以把一个List实例或者一个数组当作参数传递到MyBatis.当你这样做了,MyBatis会自动放到一个Map里.List实例会以"list"作为Key值,数组实例会以"array"作为Key值.
foreach元素的属性主要有 item,index,collection,open,separator,close。 item表示集合中每一个元素进行迭代时的别名. index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置. open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符. close表示以什么结束.上面的例子生成的sql相当于
SELECT *
FROM POST P WHERE ID in (?,?,?)转载地址:http://jnihj.baihongyu.com/