like通过两个匹配符%和_进行模糊查询.

%: 匹配任意个任意字符

_: 匹配一个字符

以下以userid为例,  在数据库中的值如下图所示:

 V1.11及之前版本, 使用Op.like, 需要判断值是否为空字段,是否只含有匹配符(%和_)

 Op.like可以创建比左右匹配更复杂的模糊查询,但需要防止,最终的值只包含有匹配符(%和_)

在V1.17( 1.17.0.9) 中,能明确%使用在左还是右,还是同时使用在左右, 则应该选用:likeLeft,likeRight,likeLeftRight;

Bee框架会对这三种用法的值进行转义(匹配符%,由框架添加), 转义后值中的%(如果有),只代表符号%.

 where 条件中,不建议只使用not like一个过滤条件(结合其它条件使用则可以)

public class LikeTest {public static void main(String[] args) {test();}public static void test() {try{Suid suid = BeeFactory.getHoneyFactory().getSuid();Orders orders = new Orders();Condition condition=BF.getCondition();//         condition.op("1=1 -- userid", Op.like, "bee%") // test invalid field.op("userid", Op.like, "bee%") //模糊查询
//       .op("userid", Op.like, "%") //模糊查询     只有%或_, 从1.17开始,Bee会抛出异常. .op("userid", Op.like, "_").op("userid", Op.like, "") 使用Op.like,调用方需要对传入的字符进行过滤,特别是1.17之前的版本.
//       ;List<Orders> list2 =null;list2=suid.select(orders, condition);
//      for (int i = 0; i < list2.size(); i++) {
//          Logger.info(list2.get(i).toString());
//      }condition=BF.getCondition();condition.op("userid", Op.like, "test\\%"); //userid是test%list2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}condition=BF.getCondition();condition.op("userid", Op.like, "test%"); //test开头的list2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}condition=BF.getCondition();condition.op("userid", Op.like, "test_"); //test开头有5个字符的list2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}condition=BF.getCondition();condition.op("userid", Op.like, "test\\_"); //userid是test_list2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}condition=BF.getCondition();condition.op("userid", Op.likeLeft, "test"); //likeLeftlist2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}condition=BF.getCondition();condition.op("userid", Op.likeRight, "test"); //likeRightlist2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}condition=BF.getCondition();condition.op("userid", Op.likeLeftRight, "test"); //likeLeftRightlist2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}condition=BF.getCondition();condition.op("userid", Op.likeLeft, "test%"); //likeLeftlist2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
//      condition=BF.getCondition();
//      condition.op("userid", Op.likeLeft, ""); //likeLeft
//      list2 = suid.select(orders, condition);
//      for (int i = 0; i < list2.size(); i++) {
//          Logger.info(list2.get(i).toString());
//      }//     condition=BF.getCondition();
//      condition.op("userid", Op.likeLeft, null); //likeLeft
//      list2 = suid.select(orders, condition);
//      for (int i = 0; i < list2.size(); i++) {
//          Logger.info(list2.get(i).toString());
//      }condition=BF.getCondition();condition.op("userid", Op.likeLeft, "test\\%"); //likeLeftlist2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}condition=BF.getCondition();condition.op("userid", Op.likeLeft, "test_"); //likeLeftlist2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}condition=BF.getCondition();condition.op("userid", Op.likeLeft, "test\\u0025"); //likeLeftlist2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2");condition=BF.getCondition();condition.op("userid", Op.like, "\\\u0025\\\u0025"); //like  \u0025 is %  转义 \%是\\\u0025list2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}condition=BF.getCondition();condition.op("userid", Op.likeLeft, "\\\u0025"); //like  \u0025 is %  转义 \%是\\\u0025list2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}//查询 userid=\u0025condition=BF.getCondition();condition.op("userid", Op.like, "\\\\u0025"); //like  \u0025 is %list2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}}catch (Exception e) {Logger.error("In ConditionExam (Exception):"+e.getMessage());e.printStackTrace();}}}

like需要防止是否会受到攻击,而暴露整个表的数据.

where 条件中,不建议只使用not like一个过滤条件(结合其它条件使用则可以)

最终的值只包含有匹配符(%和_)

/*** V1.11及之前版本, 使用Op.like, 需要判断值是否为空字段,是否只含有匹配符(%和_)* <br>Op.like可以创建比左右匹配更复杂的模糊查询,但需要防止,最终的值只包含有匹配符(%和_)* <br>在V1.17( 1.17.0.9) 中,能明确%使用在左还是右,还是同时使用在左右, 则应该选用:likeLeft,likeRight,likeLeftRight* <br>where 条件中,不建议只使用not like一个过滤条件(结合其它条件使用则可以)* @author Kingstar* @since  1.17*/
public class LikeEnhanceTest {private static PreparedSql preparedSql = BF.getPreparedSql();private static Suid suid = BF.getSuid();public static void main(String[] args) {try {Map<String, Object> map = new HashMap<>();map.put("name", "");selectNoPage(CustomSql.getCustomSql("example.autosql.like.isNotNull"), map);
//      example.autosql.like.isNotNull=select * from orders where <if isNotNull>name like #{%name}</if>// name的值非null,会保留<if isNotNull></if>之前的内容,但name的值为空字符,会有注入风险,所以报错.} catch (Exception e) {e.printStackTrace();}Condition condition = null;List<Orders> list2 = null;Orders orders = new Orders();try {condition = BF.getCondition();condition// .op("1=1 -- userid", Op.like, "bee%") // test invalid field// .op("userid", Op.like, "bee%") //模糊查询.op("userid", Op.like, "%") // 模糊查询 只有%或_, 从1.17开始,Bee会抛出异常.// .op("userid", Op.like, "_")// .op("userid", Op.like, "")// 使用Op.like,调用方需要对传入的字符进行过滤,特别是1.17之前的版本.;list2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}} catch (Exception e) {e.printStackTrace();}try {condition = BF.getCondition();condition.op("userid", Op.like, "\u0025"); // like \u0025 is %list2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}} catch (Exception e) {e.printStackTrace();}try {condition = BF.getCondition();condition.op("userid", Op.like, "\u005f"); // like \u005f is _list2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}} catch (Exception e) {e.printStackTrace();}try {condition = BF.getCondition();condition.op("userid", Op.like, "\u0025\u0025"); // like \u0025 is %list2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}} catch (Exception e) {e.printStackTrace();}try {condition = BF.getCondition();condition.op("userid", Op.likeLeft, ""); // likeLeftlist2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}} catch (Exception e) {e.printStackTrace();}try {condition = BF.getCondition();condition.op("userid", Op.likeLeft, null); // likeLeftlist2 = suid.select(orders, condition);for (int i = 0; i < list2.size(); i++) {Logger.info(list2.get(i).toString());}} catch (Exception e) {e.printStackTrace();}//      PreparedSqlExam.java    PreparedSql preparedSql = BF.getPreparedSql();String sql3_2 = CustomSql.getCustomSql("osql.example.entity.selectOrdersLikeNameViaMap2"); // %nameMap<String, Object> map2 = new HashMap<>();
//      map2.put("name", "Bee");
//      map2.put("name", ""); //1.17之前的版本,需要判断传入的值不能为空字符,%,_.// case "%"try {map2.put("name", "%");
//              map2.put("name", "_");
//              map2.put("name", null);preparedSql.select(sql3_2, new Orders(), map2);// map} catch (Exception e) {e.printStackTrace();}// case ""try {map2 = new HashMap<>();map2.put("name", ""); // 1.17之前的版本,需要判断传入的值不能为空字符,%,_.preparedSql.select(sql3_2, new Orders(), map2);// map} catch (Exception e) {e.printStackTrace();}// case "_"try {map2 = new HashMap<>();map2.put("name", "_"); // 1.17之前的版本,需要判断传入的值不能为空字符,%,_.preparedSql.select(sql3_2, new Orders(), map2);// map} catch (Exception e) {e.printStackTrace();}// case null//[WARN] the parameter value in like is null !try {map2 = new HashMap<>();map2.put("name", null); // 1.17之前的版本,需要判断传入的值不能为空字符,%,_.preparedSql.select(sql3_2, new Orders(), map2);// map} catch (Exception e) {e.printStackTrace();}System.out.println("finished!");}private static void selectNoPage(String sql, Map<String, Object> map) {List<Orders> list3 = preparedSql.select(sql, new Orders(), map);// map}}

模糊查询like用法实例(Bee)相关推荐

  1. Oracle 模糊查询like用法

    一.我们可以在where子句中使用like关键字来达到Oracle模糊查询的效果:在Where子句中,可以对datetime.char.varchar字段类型的列用Like关键字配合通配符来实现模糊查 ...

  2. mysql预编译模糊查询like用法,在多个字段查找

    目标:在试题的问题和四个选项多个字段中查找关键词获得相应记录.且在后端查找函数中使用预编译语句. 多字段查找:使用CONCAT(-,-,-) 预编译语句编写: String sql="sel ...

  3. 03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询

    映射文件的sql语句中 #{} 和 ${} 区别以及实现模糊查询 目录 sql 语句中的 #{} #{} 模糊查询错误用法 #{} 实现模糊查询 sql 语句中的 ${} ${} 实现模糊查询 #{} ...

  4. 【MyBatis笔记】03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询

    映射文件的sql语句中 #{} 和 ${} 区别以及实现模糊查询 sql 语句中的 #{} #{} 模糊查询错误用法 #{} 实现模糊查询 sql 语句中的 ${} ${} 实现模糊查询 #{} 与 ...

  5. mysql like 字符串拼接_mysql like查询字符串的实例分享

    MySQL提供标准的SQL模式匹配,以及基于象Unix实用程序如vi.grep和sed的扩展正则表达式模式匹配的格式. 一.SQL模式 SQL的模式匹配允许使用"_"匹配任何单个字 ...

  6. Mybatis模糊查询

    今天弄了一下mybatis,发现网上关于mybatis模糊查询的很多人不知道,好像也没人说,所以我就把我关于mybatis模糊查询的用法写出来供有需要的人参考一下,希望对有需要的人能有所帮助! Xml ...

  7. SQL Server数据库第五课:使用SQL进行模糊查询、聚合函数的使用

    知识点:SQL中通配符的用法.掌握like.between.in模糊查询的用法.聚合函数的用法. 1.模糊查询 什么是模糊查询?上一章我们在做查询时使用的条件都是明确的,比如找叫"李明&qu ...

  8. MySQL模糊查询%

    文章目录 一.模糊查询% 二.实例 1.设计一个员工表 2.模糊查询员工信息 一.模糊查询% 使用场景: 当要查询某个人的名字,突然记不起全名时,可以通过模糊匹配的方式,把他找出来.通过这个例子,可以 ...

  9. c3p0 参数 模糊查询_MySQL模糊查询用法大全(正则、通配符、内置函数等)

    文章来源:MySQL模糊查询用法大全(正则.通配符.内置函数等) 原文作者:陈哈哈 来源平台:CSDN SELECT * from table where username like '%陈哈哈%' ...

  10. php like %%,thinkphp实现like模糊查询实例

    本文实例讲述了thinkphp实现like模糊查询的方法,分享给大家供大家参考.具体实现方法如下: 目前使用thinkphp框架进行项目开发的人越来越多了,由于其封装性较好,导致了很多纯PHP开发的部 ...

最新文章

  1. JTable是Swing编程中很常用的控件
  2. 福布斯:2022年计算机视觉领域五大发展趋势
  3. Web版的Tabcontrol控件的制作过程
  4. 开3389后不能登录的六种原因
  5. sse php,sse.php · Gitee 极速下载/modphp - Gitee.com
  6. 【CyberSecurityLearning 62】文件包含
  7. MyCat介绍与配置(精)
  8. 网页英文字体和中文字体应用
  9. wlnmp+nginx+mysql+php集合包_Centos7下编译安装Nginx、Mysql、PHP
  10. LINUX移植——内核移植(一)
  11. android网页自动输入,android浏览器自动填表
  12. Proteus仿真:简易独立式键盘
  13. 产品经理必读书单(2019史上最全)
  14. 东芝300d硒鼓清零代码_东芝300d怎么清?
  15. hive怎么发音_Hadoop Hive概念学习系列之hive里的HiveQL——查询语言(十五)
  16. 如何缩小png图片大小kb?如何让png图片变小?
  17. android 系统重装,手机系统重装教程[多图]
  18. kafka如何创建topic
  19. 《精通git》笔记之九(储藏与清理、签署工作、搜索)
  20. cad断点快捷键_CAD打断和打断于点怎么使用?CAD打断快捷键命令及操作方法

热门文章

  1. 程序员强烈推荐:IDEA 常用配置指南
  2. 时间序列数据库 (TSDB)
  3. 动态库与静态库的区别
  4. 微信小程序weui在线入门教程-WeUi基础组件-preview表单预览
  5. ubuntu初始化安装
  6. 多目标跟踪概述(一)
  7. CentOS的安装和网络配置详细教程
  8. 知识图谱—知识推理综述(二)
  9. monkey测试方法及命令
  10. Oracle LSNRCTL------监听器的启动和关闭