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. 免费教材丨第47期:业界大牛中文教学视频《深度学习:进阶》第21-24讲
  2. InputStream、OutputStream、String的相互转换(转)
  3. Python:通过SNMP协议获取H3C、华为交换机的VLAN信息及ARP地址表
  4. 自制 QQ游戏 连连看 外挂 ~~
  5. artcam2008 stp 教程_ArtCAM_中文版使用教程
  6. iOS 开发获取字体类型
  7. linux卸载mentohust,Ubuntu安装mentohust
  8. docker+scrapy+scrapy_splash爬取大麦网
  9. 人体关节正常活动范围
  10. 在线微信公众号调查数据分析报告
  11. 2 CRYPTO Bubble_Babble气泡密码
  12. 名帖301 刘墉 行书《自作诗卷》
  13. Android Studio学习开发笔记--基础
  14. c语言统计行数单词数字符数,C语言统计字数行数单词数的程序
  15. Annotation-specified bean name.. for bean class ...
  16. 无人机姿态解算_扩展卡尔曼滤波(2)
  17. 以实验理解交换机原理
  18. c语言循环题兔子第三个月生,C语言·古典问题: 兔子总数
  19. Linux 各种top命令
  20. java2d游戏代码_Java 2d游戏中的“JUMP”

热门文章

  1. BaaS、FaaS、Serverless 都是什么?
  2. 面试准备------LR模型
  3. 分布式与集群的区别【一篇就够】
  4. Apache HTTP Server漏洞(CVE-2021-41773)
  5. c#通过JObject对象获取json中的值
  6. MySQL原理--索引的原理
  7. 强化学习(四)--DDPG算法
  8. java快捷键(java快捷键怎么设置)
  9. Python 标准库 xml.etree.ElementTree
  10. Java使用Tess4j识别图片里的文字