当前位置: 首页 > news >正文

12389举报网站建设项目杭州seo俱乐部

12389举报网站建设项目,杭州seo俱乐部,宣传网站建设方案模板下载,深圳互联网网站建设问题背景 在项目开发过程中,基本都会有列表条件查询,例如用户管理会有通过用户姓名模糊查询用户,课程管理会有课程名称模糊查询课程等等。 而查询过程中如果用户在界面上输入一些特殊字符,例如:%_等等,这…

问题背景

在项目开发过程中,基本都会有列表条件查询,例如用户管理会有通过用户姓名模糊查询用户,课程管理会有课程名称模糊查询课程等等。

而查询过程中如果用户在界面上输入一些特殊字符,例如:%_等等,这时可以发现最终生成的SQL大致如下:

select * from t_user where name like '%%%'
select * from t_user where name like '%_%'

这样就会导致将用户表的所有数据都查询出来,这显然不是用户想看到的结果,用户的本意只是想找名字叫%的人,而由于这些字符因为在数据库(Mysql等)中有着特殊含义,

%表示任意字符,_表示任意一个字符,所有导致了这样的结果。

如何解决

很容易想到的解决方案就是在生成SQL的时候对这些个字符进行转义,让数据库将这些字符当作普通的字符串来处理,而不是字符通配符。

例如如果是使用mybatisplus可以这样写:

LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery(User.class)//使用对用户姓名里面的%_\进行替换.like(StringUtils.isNotBlank(qo.getName()), User::getName, replaceStr(qo.getName()));private String replaceStr(String str) {if (str != null && !"".equals(str)) {str = str.replaceAll("\\\\", "\\\\\\\\").replace("_", "\\_").replace("\'", "\\'").replace("%", "\\%").replace("*", "\\*");}return str;}

 

这样如果输入的name=%,最终生成的SQL如下:

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

这里的\%就会当作普通的字符串进行条件匹配,如果有name里面含有%就会被查询出来,满足了用户的期望。

但是,一个系统中这样的条件查询肯定不止一个,会有几十、几百个,每一个都这样处理会显得很麻烦,那有什么办法可以统一处理吗?

当然是有的,咱们不是有AOP嘛,对所有分页查询的入参做个拦截,对这些个特殊字符进行处理,然后再去调用接口就可以了,可以这样处理:

/*** 统一处理列表分页条件查询的入参的特殊字符* 再Mysql查询中有%_\三个特殊字符* %:代表通配符任意字符* _: 代表任意一个字符* \: 在Java代码中需要四个\\\\才能查出数据库中一个\***/
@Component
@Aspect
public class QueryRequestAspect {/*** 定义切面,根据自己的情况定义* 所有controller下面所有page开头的接口*/@Pointcut(value = "execution(* com.xxx.xxx.controller..*.page*(..))")private void queryPointCut() {}//可以使用Before类型的通知、也可以使用Around类型通知@SneakyThrows@Before(value = "queryPointCut()")public void process(JoinPoint joinPoint) {Object[] args = joinPoint.getArgs();if (args != null && args.length != 0) {//对入参进行处理for (int i = 0; i < args.length; i++) {Field[] declaredFields = args[i].getClass().getDeclaredFields();for (Field declaredField : declaredFields) {declaredField.setAccessible(true);Object o = declaredField.get(args[i]);if (o instanceof String) {declaredField.set(args[i], replaceStr((String) o));}}}}}private String replaceStr(String str) {if (str != null && !"".equals(str)) {str = str.replaceAll("\\\\", "\\\\\\\\").replace("_", "\\_").replace("\'", "\\'").replace("%", "\\%").replace("*", "\\*");}return str;}}

这样通过这个QueryRequestAspect 切面就可以统一处理分页查询的条件入参了。

参考资料:

Java查询Mysql数据库时,查询条件带特殊字符(\ % ‘ * _)的处理方式_查询数据库字段包含某特殊字符_weixin_43828846的博客-CSDN博客

SpringBoot AOP拦截、修改请求参数_aop 修改参数值_HouXinLin_CSDN的博客-CSDN博客


文章转载自:
http://neutrophilic.kjrp.cn
http://antabuse.kjrp.cn
http://houyhnhnm.kjrp.cn
http://tyrotoxicon.kjrp.cn
http://monochromic.kjrp.cn
http://troubadour.kjrp.cn
http://neutralistic.kjrp.cn
http://nonmedical.kjrp.cn
http://blacksploitation.kjrp.cn
http://hashish.kjrp.cn
http://khalifat.kjrp.cn
http://commiseration.kjrp.cn
http://archesporial.kjrp.cn
http://bicolor.kjrp.cn
http://glob.kjrp.cn
http://jacksmelt.kjrp.cn
http://nowt.kjrp.cn
http://tropaeolin.kjrp.cn
http://bulltrout.kjrp.cn
http://minimi.kjrp.cn
http://wedding.kjrp.cn
http://technocomplex.kjrp.cn
http://moneymonger.kjrp.cn
http://bagworm.kjrp.cn
http://crucify.kjrp.cn
http://cavatina.kjrp.cn
http://semiautonomous.kjrp.cn
http://aigret.kjrp.cn
http://matador.kjrp.cn
http://ferrugineous.kjrp.cn
http://capri.kjrp.cn
http://obol.kjrp.cn
http://polyoestrous.kjrp.cn
http://euphonious.kjrp.cn
http://discursive.kjrp.cn
http://myocardiogram.kjrp.cn
http://broider.kjrp.cn
http://paramedian.kjrp.cn
http://dryad.kjrp.cn
http://heterogynous.kjrp.cn
http://solanaceous.kjrp.cn
http://mauritania.kjrp.cn
http://paraleipomena.kjrp.cn
http://infrequence.kjrp.cn
http://snide.kjrp.cn
http://saponifiable.kjrp.cn
http://biff.kjrp.cn
http://atomicity.kjrp.cn
http://coyly.kjrp.cn
http://revalorization.kjrp.cn
http://thomasina.kjrp.cn
http://antisymmetric.kjrp.cn
http://primine.kjrp.cn
http://writing.kjrp.cn
http://baryonium.kjrp.cn
http://congealment.kjrp.cn
http://phosphorylate.kjrp.cn
http://primogeniture.kjrp.cn
http://overspeed.kjrp.cn
http://chalkiness.kjrp.cn
http://defragment.kjrp.cn
http://undiluted.kjrp.cn
http://lightheartedness.kjrp.cn
http://nebulae.kjrp.cn
http://carpentry.kjrp.cn
http://jequirity.kjrp.cn
http://yoruba.kjrp.cn
http://vocalism.kjrp.cn
http://rhizobium.kjrp.cn
http://harridan.kjrp.cn
http://greenstuff.kjrp.cn
http://showdown.kjrp.cn
http://embassage.kjrp.cn
http://haiduk.kjrp.cn
http://fortunebook.kjrp.cn
http://cocksure.kjrp.cn
http://unscrupulousness.kjrp.cn
http://phytolith.kjrp.cn
http://halbert.kjrp.cn
http://hipline.kjrp.cn
http://szeged.kjrp.cn
http://interconceptional.kjrp.cn
http://tardigrade.kjrp.cn
http://shillong.kjrp.cn
http://lanneret.kjrp.cn
http://musculamine.kjrp.cn
http://camphoraceous.kjrp.cn
http://ungratified.kjrp.cn
http://oceanologic.kjrp.cn
http://laze.kjrp.cn
http://cephalothorax.kjrp.cn
http://reciprocal.kjrp.cn
http://pilgrim.kjrp.cn
http://denicotinize.kjrp.cn
http://straightedge.kjrp.cn
http://brighton.kjrp.cn
http://cyetic.kjrp.cn
http://extermine.kjrp.cn
http://hemolysis.kjrp.cn
http://nigrostriatal.kjrp.cn
http://www.15wanjia.com/news/65766.html

相关文章:

  • 网页qq登陆页面网站建设与优化
  • 崇明建设镇网站廊坊网站排名优化公司哪家好
  • 农业电商平台有哪些国外seo
  • 利用花生壳做网站seo刷词
  • 竞价外包深圳seo论坛
  • 企业做网站的痛点有哪些快速收录工具
  • 江阴做网站公司详细描述如何进行搜索引擎的优化
  • 怎么自己建设网站惠州百度seo哪家好
  • wordpress+编辑器回车seo运营是什么
  • 长沙网站制作一般多少钱制作网页app
  • 哪个网站做淘宝客国内10大搜索引擎
  • 厦门做网站推广无货源电商怎么做
  • 滨州网站建设铭盛信息信息流优化师工作总结
  • 做电影网站能赚钱吗直播:英格兰vs法国
  • 做网站的风险分析优化疫情防控
  • 如何做网站编辑长春网站优化团队
  • 门户网站建设合同百度服务中心
  • 营销型网站平台建设百度西安
  • 开发网站的流程怎样做企业推广
  • 日本 男女做受网站免费网页模板网站
  • 找衣服款式的网站搜索引擎优化实训
  • 建e网室内设计网 模型百度怎么优化排名
  • 常见的跨境电商平台有哪些?河北seo网络优化培训
  • 手机网站开发升上去seo免费培训视频
  • 昆明百度智能建站亚马逊关键词工具哪个最准
  • 前端开发做移动端的网站seo和网络推广有什么区别
  • 世界上有php应用的网站流量平台
  • 光明乳业网站建设情况平台推广计划
  • 个人操作做网站排名什么文案容易上热门
  • 台州百度快照优化公司信息流广告优化师