我们进行模糊查询时,如果是Mysql数据库,经常用到的是一个concat用“%”和参数相连接,而Oracle是用“||”这样的连接符。这样SQL就要2种区实现,造成了数据库不可以更改的局面,于是Mybatis框架有了bind这个元素,我们就完全不用数据库的语言了。如:
第一种 用bind实现模糊查询 通用数据库
List<RoleEntity> selectBykeyWord(@Param("keyword") String keyword);
<select id="selectBykeyWord" parameterType="string" resultType="com.why.mybatis.entity.RoleEntity">
<bind name="pattern" value="'%' + keyword + '%'" >bind>
SELECT
*
FROM
t_role
WHERE
role_name LIKE #{pattern}
select>
这样我们把值赋给了pattern,我们就可以在select语句中就可以用,提高了数据库的可移植性,建议用这种方法。
如果keyword为空,会出现:Error querying database. Cause: java.lang.NullPointerException的错误,可以这样:
List<RoleEntity> selectBykeyWord(@Param("keyword") String keyword);
<select id="selectBykeyWord" parameterType="string" resultType="com.why.mybatis.entity.RoleEntity">
SELECT
*
FROM
t_role
WHERE 1=1
<if test="keyword!=null and keyword!=''">
<bind name="pattern" value="'%' + keyword + '%'" >bind>
and role_name LIKE #{pattern}
if>
select>
第2种 mysql数据库 用concat连接
public int countFirstName(String firstName);
<select id="countFirstName" parameterType="string" resultType="int">
SELECT
count(*) FROM t_role WHERE role_name LIKE concat('%',#{firstName},'%')
select>
第3种 模糊查询Oracle数据库 也有2种
由于在oracle中 concat不支持三个参数的 如concat(‘%’,#{studentName},’%’),如果我们要查询前后的话,一个是在前面添加%一个是在后面添加%,如果只需要前面或者后面添加%的模糊查询的话,只需要一个就好了
public int countFirstName(String firstName);
<select id="countFirstName" parameterType="string" resultType="int">
SELECT
count(*) FROM t_role WHERE role_name LIKE concat(concat('%',#{firstName}),'%')
select>
用”||“连接符查询大小写匹配查询
SELECT * FROM TABLENAME WHERE UPPER(SUBSYSTEM) LIKE '%' || UPPER('jz') || '%'
--或者是
SELECT * FROM TABLENAME WHERE LOWER(SUBSYSTEM) LIKE '%' || LOWER('jz') || '%'
第4种 可以在service层把要查询的字符拼接好‘%’再传入进来
public void countFirstName(String firstName) {
String firstName = "%" + firstName + "%";
userDao.countFirstName(firstName);
}
public int countFirstName(String firstName);
<select id="countFirstName" parameterType="string" resultType="int">
SELECT
count(*) FROM t_role WHERE role_name LIKE #{firstName}
select>
建议:大家用第一种方法最好。
原创来源:滴一盘技术