select count(*)

from t_user

loginacct like concat("%",#{queryText},"%")

1.动态查询语句

2.SQL中占位符不能在单引号中,否则,会以?进行查询数据

'%#{param}%'

'%?%'

3.SQL中不能使用加号进行字符串拼接,加号是用来做运算的

'%'+'D'+'%'

4.MyBatis进行拼串,拼串会出现 SQL注入情况 ,例如:“or 1=1”

'%${param}%'

5.使用内置方法进行拼串

concat('%',#{param},'%')

6.查询条件值本身为%,查询出所有的数据

concat('%',#{param},'%') => '%%%'

'%\%%'  使用转译字符再进行查询。

7.#和\是一个意思,表示转译。使用#代替\

select * from t_user where username like '%#%%' escape '#'

select * from t_user where loginacct like '%@%%' escape '@'

SELECT * FROM t_user WHERE loginacct LIKE concat('%','@%','%') ESCAPE '@'

8.常见的SQL文,在Oracle中,使用两个竖线用来表示字符串拼接,MySQL中没有这样的语法。

select * from t_user where username like '%'|| #{param} ||'%'

SQL参数问题

select count(*) from t_user

loginacct like '%#{queryText}%'

select * from t_user

loginacct like '%#{queryText}%'

limit #{start}, #{size}

有3个参数,但是只是指定了2个.

Select * from t_user where loginacct like '%#{loginacct}%' limit?,?

org.springframework.dao.TransientDataAccessResourceException:

### Error querying database.  Cause: java.sql.SQLException:Parameter index out of range (3 > number of parameters, which is 2).

### The error may exist in URL [jar:file:/F:/atcrowdfunding/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/atcrowdfunding-main/WEB-INF/lib/atcrowdfunding-user-0.0.1-SNAPSHOT.jar!/mybatis/mapper-user.xml]

### The error may involve defaultParameterMap

### The error occurred while setting parameters

### SQL:select * from t_user           WHERE loginacct like '%?%'          limit ?, ?

### Cause: java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).

; SQL []; Parameter index out of range (3 > number of parameters, which is 2).; nested exception is java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).

SQL注入问题 :

Id = 100 OR 1=1

SELECT * FROM t_user WHERE id= ${id}

SELECT * FROM t_user WHERE id=  100 OR 1=1

在特定场合可以使用${}:

例如:

Create table ${tableName} …      //表名称位置不能使用?占位符,所以也就不能使用#{}

Order by ${fieldName} asc   //对字段进行排序,可以 传递动态字段名称.

select count(*) from t_user

loginacct like'%${queryText}%'

select * from t_user

loginacct like '%${queryText}%'

limit #{start}, #{size}

SQL拼接问题

不能使用加号拼接

使用concat()函数拼接字符串

select count(*) from t_user

loginacct likeconcat('%',#{queryText},'%')

select * from t_user

loginacct likeconcat('%',#{queryText},'%')

limit #{start}, #{size}

查询关键字为% 和 \

查询关键字为%将数据都查询出来了,不安全.

对查询的特殊符号进行转译.

解决:

Java中转译

String queryText = "%";

if(StringUtil.isNotEmpty(queryText)){

//斜线本身需要转译,regex中两个\\表示一个\ ; Java中也是两个\\表示一个\;所以,需要四个斜线

queryText = queryText.replaceAll("%", "\\\\%");

System.out.println("--------------"+queryText);

}

SQL语句中转译

对特殊符号进行转译;斜杠本身也属于特殊符号,需要转译.

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

注意:

尽量在保存数据时,验证数据的合法性,尽量避免存在的字符串中含有特殊符号.

但是,有时无法避免,则需要进行特殊处理:

例如:

"<>"

"D:\\atguigu"

mybatis mysql 模糊查询语句_mybatis模糊查询语句及注意事项相关推荐

  1. mybatis mysql 中文乱码_Mybatis + Mysql 插入数据时中文乱码问题

    近日跟朋友一起建立一个项目,用的是spring+mybatis+mysql. 今天碰到一个mybatis向mysql中插入数据时,中文显示为'???'的问题,拿出来说下. 对于数据库操作中出现的中文乱 ...

  2. mybatis mysql 分表_Mybatis的分表实战

    前言: 以前写代码, 关于mysql的分库分表已被中间件服务所支持, 业务代码涉及的sql已规避了这块. 它对扩展友好, 你也不知道到底他分为多少库, 多少表, 一切都是透明的. 不过对于小的团队/工 ...

  3. mybatis mysql 树形结构_Mybatis查询树形结构数据

    数据表的设计 创建数据表 对于树形结构的数据库设计通常是基于继承关系设计的,也就是通过父ID关联来实现的. 一张树形结构的数据表基本的三个字段:id(自己).name(名称)和parentid(父类编 ...

  4. mybatis mysql 模糊查询_MyBatis Oracle、MySQL、DB2、SQLServer的like模糊查询

    Oracle数据库: select * from t_user where name like '%'||#{search_name}||'%' 或者 select * from t_user whe ...

  5. mybatis mysql 中文乱码_mybatis连接mysql数据库插入中文乱码

    对于mysql数据库的乱码问题,有两中情况: 1. mysql数据库编码问题(建库时设定). 2. 连接mysql数据库的url编码设置问题. 对于第一个问题,目前个人发现只能通过重新建库解决,建库的 ...

  6. 在线MySQL,SQL Server建表语句生成JSON测试数据工具

    在线MySQL,SQL Server建表语句生成JSON测试数据工具 在线MySQL,SQL Server建表语句生成JSON测试数据工具 本工具可以将SQL建表语句生成JSON测试数据,支持MySQ ...

  7. mybatis查询mysql blob字段_mybatis+spring+mySql 处理Blob字段(报错:data too long for column 'descrip')...

    通过Spring+Mybatis+Mysql搭建了一个框架,在向MYSQl插入图片信息时,将其保存为BLOB类型到数据库. 前台JAVA代码如下: @RequestMapping("/zdf ...

  8. 微信小程序+SpringBoot+mybatis+MySQL实现简单的登录

    微信小程序+SpringBoot+mybatis+MySQL实现简单的登录 当下微信小程序和springboot都是比较火的.今天我们来用springboot和微信小程序来实现简单的登录. 1.首先来 ...

  9. 使用Intellij Idea创建第一个SpringBoot+MyBatis+MySql项目并运行(附安装教程),使用Maven构建项目并管理第三方jar

    Intellij Idea 背景 开发工具及主要框架 Maven 下载安装 settings.xml修改 IDEA配置Maven 注册私有jar Maven打包 MySql安装 配置环境变量 Inte ...

最新文章

  1. 核酸和CT同时用, 听谁的?——兼释一天新增一万多
  2. cocos2dx event call stack
  3. 工具在软件过程改进中的重要作用
  4. TensorFlow-CIFAR10 CNN代码分析
  5. 牛客题霸 [ 验证IP地址] C++题解/答案
  6. tinymce移动端使用_关于在移动端避免使用100vh的原因及解决方案
  7. 两个字符串日期怎么比较大小_面对家中两个孩子的争抢哭闹,那家长应该怎么处理才比较好呢?...
  8. JAVA内存管理+String创建字符串对象+常量池详解(合集)
  9. 链表实现直接选择排序
  10. 深度 | 面目全非自动化
  11. 数据结构课程设计(选):连连看
  12. golang学习之五:error、painc、recover
  13. 基金投资基本常识【狂神说】
  14. 无线通信学习之——OFDM
  15. 蓝牙AOA到达角算法(二)
  16. 五彩斑斓的黑,找到了
  17. Hadoop、Spark、Storm对比
  18. 【IDE-Visual Studio】VC\VS2005\VS2008\VS2010 消除 忽略 加强警告Warning
  19. Linux内核内存相关问题,这一篇让你彻底了解
  20. ImageSpan的使用

热门文章

  1. Fasterkv Epoch 保护框架
  2. Radeon Software:Host Application,CPU占用率过高
  3. 精心总结了10个matplotlib绘图技巧,短小精悍,威力无穷
  4. 【塔望方法论】塔望3W消费战略 - UA研究法
  5. 神奇的python系列5:python基础数据类型三(字典)
  6. 用户注册与单点登录(SSO)
  7. 【ChatGPT】GPT-3.5+ChatGPT:图解概述
  8. 笔记本安装固态硬盘及系统迁移
  9. CRM客户管理系统的重要性体现在哪些方面?
  10. 22年的甲骨文生涯后 谷歌云新主管面临一场文化冲突