处理数据库模糊查询%,_问题(JAVA)

本文介绍了在使用MyBatis进行web项目开发时,如何正确处理含有特殊字符%和_的模糊查询,避免查询结果不准确的问题。通过转译参数,确保了查询的准确性,适用于MySQL和Oracle数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis%_查询

本文章向大家介绍mybatis%_查询(hibernate也可用相同的处理方式),具有一定的参考价值,需要的朋友可以参考一下。

出现问题得原因

在我们做web项目 使用模糊查询的时候,如果前端传% 或者 _ 查询,如果不处理的话,查询是所有的,这样的效果是不对的,所以需要对参数进行转译,从而达到想要的效果。

mysql数据库:

对于mysql来说:

select * from   category  where name like '%%%'
select * from   category  where name like '%\%%'

结果:
第一条sql的结果集:
在这里插入图片描述
第二条sql的结果集:
在这里插入图片描述
第二条sql的结果集是想要的效果,所以需要转译,具体实现如下:

public static String queryString(String temp) {
 		if (temp==null) {
 			return "";
 		}
 		StringBuilder b = new StringBuilder();
 		b.append(temp.trim());
 		StringBuilder tempBuilder = new StringBuilder();
 		tempBuilder.append(temp.trim());
 		for (int i = 0, j = 0; i < b.length(); i++) {
 			char x = b.charAt(i);
 			if (x == '%' || x == '_') {
 				tempBuilder.insert(i + j, '\\');
 				j++;
 			}
 		}
 		return tempBuilder.toString();
 	}
<select id="getlikeCategory" parameterType="String" resultType="Category">
    select * from   category  where name like  concat('%',#{0},'%') 
</select>

测试代码:

public class Main {
	public static void main  (String[] args) throws IOException {
		//根据配置文件mybatis-config.xml得到sqlSessionFactory 
		String resource  = "mybatis-config.xml";
		InputStream input = Resources.getResourceAsStream(resource);
		SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(input);
		//然后再根据sqlSessionFactory 得到session
		SqlSession session=sf.openSession();
		String name = Category.queryString("%");
		//执行sql
		List<Category> cs = session.selectList("getlikeCategory",name);
		
		for (Category category : cs) {
			System.out.println(category.getName());
		}
        session.commit();
        session.close();
        
	}
}

结果为:category%1

Oracle数据库:

对于oracle来说 处理方式与mysql相同,但是SQL语句条件后需要加 ESCAPE ‘/’ ;

谢谢您的观看!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值