MySQL Mybatis 动态批量替换 (模拟Oracle regexp_replace功能)

在项目中遇到了一个地方,需要把原先用Oracle写的sql改成MySQL的,然而里面就设计到了标题提到的regexp_replace函数。


我们的需求就是,要替换掉数据库中数据中的一些特殊字符,来和后台处理过特殊字符的数据进行比对,判断是否相同。


举个例子,数据库里面有一个字段的值是AB.C-D&V,后台通过处理,得到一个字符串为ABCDV,这个时候我们比较的结果肯定是不等的,所以我们要对数据库的值也进行一个处理。


MySQL直到8.0才出了regexp_replace函数,稳妥起见我们还是不要先用这么新的版本,所以只能通过别的方式来解决。

我的想法很简单,既然没有这个函数,我们就一直用replace替换,动态的生成你需要替换掉的字符,循环的用replace函数替换掉它们。

首先我们新建一张表,取名为mychar。在这表里我们主要存储我们需要替换掉的特殊字符。

字段 描述
id 主键(意思一下)
old_char 需要替换掉的字符
new_char 替换成的字符
// 接下来我们就新建一个参数类,用来传入查询的参数
public class InChar {
	private List chars;
	private String customerName;
	// get和set方法省略...
}
// 对应新建的mychar表的实体类
public class MyChar {
	private int id;
	private String oldChar;
	private String newChar;
	// get和set方法省略...
}

mychar表的查询方法就省略了…



这样,基本上就可以满足替换掉特殊字符的需求了,开始是准备一个个replace手动加的,写死的,后来写着写着发现这太蠢了,而且也不好维护,所以改成了这个样子,虽然还是很蠢,但是还算是比较好维护了,后期如果有新的特殊字符出现,也只需要改下数据库的数据就OK了。

这种做法只是我个人针对项目的实际需求想到办法,虽然很蠢,但是还是可以有效的解决遇到的问题,不知道能不能帮助到你,如果有更好的方法欢迎在评论区留言。

你可能感兴趣的:(MySQL Mybatis 动态批量替换 (模拟Oracle regexp_replace功能))