侵删JAVA 框架 / MYBATIS / MYBATIS系列教材 (三)- 基础 - MYBATIS 多条件查询和模糊查询实例
1. 修改Category.xml,提供listCategoryByName查询语句
select * from category_ where name like concat('%',#{0},'%')
concat('%',#{0},'%') 这是mysql的写法
如果是oracle,写法是 select * from category_ where name like '%'||#{0}||'%'
SQL语句中: CONCAT 关键字:把字符串拼接到一起
LIKE 关联字:模糊匹配 。"%" 可用于定义通配符(模式中缺少的字母)。
SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL中,SQL的模式缺省是忽略大小写的。
2. 运行测试
List<Category> cs = session.selectList("listCategoryByName","cat");
但是,看下图。。。
配置文件报错:不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
解决方法:
规范的XML格式、
<?xml version="1.0" encoding="UTF-8"?> 必须是XML文件的第一个元素且前面不能空格。
不按上面的解决方法做,非注释在上,注释了的在下面,还是报错。。
顶格没事了
结合前面的模糊查询,多一个id>多少的条件
1. Category.xml 准备sql语句
<select id="listCategoryByIdAndName" parameterType="map" resultType="Category">
select * from category_ where id> #{id} and name like concat('%',#{name},'%')
</select>
2. 测试代码
因为是多个参数,而selectList方法又只接受一个参数对象,所以需要把多个参数放在Map里,然后把这个Map对象作为参数传递进去
Map<String,Object> params = new HashMap<>();
params.put("id", 3);
params.put("name", "cat");
List<Category> cs = session.selectList("listCategoryByIdAndName",params);