SELECT id,name,url,age,country FROM website AND name LIKE CONCAT('%',#{name},'%')显然以上语句会出现 SQL 语法异常,但加入“1=1”这样的条件又非常奇怪,所以 MyBatis 提供了 where 标签。
<where> <if test="判断条件"> AND/OR ... </if> </where>if 语句中判断条件为 true 时,where 关键字才会加入到组装的 SQL 里面,否则就不加入。where 会检索语句,它会将 where 后的第一个 SQL 条件语句的 AND 或者 OR 关键词去掉。
<select id="selectWebsite" resultType="net.biancheng.po.Website"> select id,name,url from website <where> <if test="name != null"> AND name like #{name} </if> <if test="url!= null"> AND url like #{url} </if> </where> </select>WebsiteMapper 类中方法如下。
public List<Website> selectWebsite(Website website);测试类代码如下。
public class Test { public static void main(String[] args) throws IOException { // 读取配置文件mybatis-config.xml InputStream config = Resources.getResourceAsStream("mybatis-config.xml"); // 根据配置文件构建 SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config); // 通过SqlSessionFactory创建SqlSession SqlSession ss = ssf.openSession(); Website site = new Website(); site.setname("编程"); List<Website> siteList = ss.selectList("net.biancheng.mapper.WebsiteMapper.selectWebsite", site); for (Website ws : siteList) { System.out.println(ws); } } }输出结果如下。
DEBUG [main] - ==> Preparing: SELECT id,name,url,age,country FROM website WHERE name LIKE CONCAT('%',?,'%')
DEBUG [main] - ==> Parameters: 编程(String)
DEBUG [main] - <== Total: 1
Website[id=1,name=编程帮,url=https://www.lmcjl.com/,age=10,country=CN]
本文链接:http://task.lmcjl.com/news/14187.html