MyBatis模糊查询的4种实现方式

MyBatis模糊查询的4种实现方式1、根据姓名模糊查询员工信息1.1、方式一步骤一:编写配置文件步骤二:测试步骤三:分析此种方式需要在调用处手动的去添加“%”通配符。1.2、方式二说明:使用方式一可以实现模糊查询,但是有一点不方便的地方就是:在测试类中,调用selectList()方法传参时需要调用者手动的添加%号通配符,显然是麻烦的,能否在映射配置文件中直接将%号写好呢?有的朋友可能会这么想,好办,直接在配置文件中这么写:形如1:测试后发现,程序会报错,原因是:缺少单引号。这…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1、根据姓名模糊查询员工信息

1.1、方式一

步骤一:编写配置文件

MyBatis模糊查询的4种实现方式

 

步骤二:测试

MyBatis模糊查询的4种实现方式

 

步骤三:分析 此种方式需要在调用处手动的去添加“%”通配符。1.2、方式二

说明: 使用方式一可以实现模糊查询,但是有一点不方便的地方就是:在测试类中,调用selectList()方法传参时需要调用者手动的添加%号通配符,显然是麻烦的,能否在映射配置文件中直接将%号写好呢? 有的朋友可能会这么想,好办,直接在配置文件中这么写:形如1:

MyBatis模糊查询的4种实现方式

 

测试后发现,程序会报错,原因是:缺少单引号。

这个时候,有朋友可能会这样想了,那干脆加一个“单引号”不就得了,形如2:

形如2:

MyBatis模糊查询的4种实现方式

 

测试后发现,程序依然会报错,原因是:如果加上单引号,那么就当成是一个字符串,而#{ }写在字符串中不能识别,要改写成${ }这种形式。

即:形如3

形如3

MyBatis模糊查询的4种实现方式

 

分析: 通过使用“$”也可以实现。但是通过$的方式拼接的sql语句,不再是以占位符的形式生成sql,而是以拼接字符串的方式生成sql,这样做带来的问题是:会引发sql注入的问题。1.3、方式三

说明:通过前两种写法,虽然可以解决模糊查询的问题,但是还是不好,因为通过%的方式会引发sql注入的问题,现在的期望是:既能够解决sql注入又能在配置文件中写%该如何实现呢,可以借助mysql的函数。步骤一:编写映射文件

MyBatis模糊查询的4种实现方式

 

步骤二:测试 此步骤省略,比较简单。1.4、方式四

说明: 当然对于方式三,也可以使用$,不过需要特别留意单引号的问题。步骤一:编写配置文件

MyBatis模糊查询的4种实现方式

 

步骤二:测试 该步骤省略。2、总结

#{ }是预编译处理,MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,使用占位符的方式提高效率,可以防止sql注入。${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中,可能引发sql注入。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/219235.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux vim怎么退出编辑模式_centos7退出vi编辑

    linux vim怎么退出编辑模式_centos7退出vi编辑转载自:http://blog.csdn.net/u010648555/article/details/50676647初学Linux的时候,在使用vi操作时候,有时候可能进入的是一个文件夹,这样子在退出的时候很不好操作!下面总结一些vi退出命令,学习!进入编辑模式,按o进行编辑编辑结束,按ESC键跳到命令模式,然后输入退出命令::w保存文件但不退出vi编辑:w!强制保存,不退出v…

  • Java多线程死锁问题

    Java多线程死锁问题死锁这么重要,请仔细阅读死锁问题死锁定义死锁举例如何排查死锁死锁发生的条件怎么解决死锁问题?线程通讯机制(wait/notify/notifyAll)LockSupport死锁问题死锁定义多线程编程中,因为抢占资源造成了线程无限等待的情况,此情况称为死锁。死锁举例注意:线程和锁的关系是:一个线程可以拥有多把锁,一个锁只能被一个线程拥有。当两个线程分别拥有一把各自的锁之后,又尝试去获取对方的锁,这样就会导致死锁情况的发生,具体先看下面代码:/***线程死锁问题*/public

  • adb出现adb server is out of date时的解决的方法「建议收藏」

    adb出现adb server is out of date时的解决的方法「建议收藏」出错的原因是adb的port被其它程序的进程占据了,所以要做的就是找到并kill该进程。步骤:、1、在cmd中运行adbnodaemonserver,查看adb的port号是多少,普通情况下是50

  • Sqlite #1 命令行工具sqlite3

    Sqlite #1 命令行工具sqlite3

  • node配置淘宝镜像_node配置淘宝镜像

    node配置淘宝镜像_node配置淘宝镜像node安装推荐去官网下载最新版本的,官网地址:https://nodejs.org/en/download/依照系统版本下载即可,推荐window系统下载msi格式的。下载下载直接安装下一步下一步。安装成功了以后打开cmdnode-v来检测是否安装成功cnpm安装由于我们被墙的厉害,所以使用npm下载模块时候会发现效率真的很慢,所以推荐淘宝的镜像,安装说明推荐:$npmins

  • SQL数据库字符串与时间相互转换「建议收藏」

    SQL数据库字符串与时间相互转换「建议收藏」SQL数据库字符串与时间相互转换,字符串转日期时间格式,日期时间格式转字符串格式。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号