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. java和python哪个好就业2020-Python和Java学哪个好就业?
  2. .net md5 java 偏移量_C# java MD5加密方不一致问题
  3. 新浪微博开放平台深度历险
  4. 罗永浩担任“大局官”,小米双十一狂发补贴
  5. buck电路pscad仿真_100kVar SVG模块主电路选型分析[李博士]
  6. python传递类的实例_使用Python将变量从一个类实例传递到另一个类实例?
  7. python 中的 [-1::1] 啥意思
  8. 自我监督学习和无监督学习_弱和自我监督的学习-第3部分
  9. Flash,EEPROM差别
  10. 浙大PAT甲级题目1061-1080代码详细解答|标准答案|C++语言|浙软机试
  11. Aspose for Maven 使用
  12. TwinCAT3入门教程3——PLC程序变量定义和硬件IO关联
  13. python 面板数据分析_stata面板数据模型分析的详细步骤和命令
  14. 新浪短网址申请 如何申请开通新浪短网址(t.cn短链接)服务
  15. 游戏建模:场景模型制作所需软件科普,让建模更简单!
  16. 绝地求生6月23号服务器维护到几点,绝地求生6月23号更新内容汇总 维护公告信息一览...
  17. C#扫雷外挂辅助工具
  18. 串口之COMMTIMEOUTS结构体详解
  19. [BUUCTF]PWN——pwnable_orw
  20. 蓝牙ble自定义广播内容()

热门文章

  1. 阿里Maven仓库配置
  2. JavaScript-API-2-笔记
  3. redis重启命令Linux,Redis启动、配置 及 常用命令-Go语言中文社区
  4. 【史上最全】MySQL各种锁详解:一文搞懂MySQL的各种锁
  5. oracle listagg 函数实例
  6. 位运算面试题 python
  7. 【软考 系统架构设计师】原创必过论文① 论软件系统架构评估
  8. cocos2dx fnt生成工具—bmfont的bug
  9. java异常的栈轨迹记录(stack trace)
  10. istream, outstream使用及常见错误