龙空技术网

【Mybatis实战第14天】Mybatis like语句四种传参方式

天罡gg 348

前言:

此刻大家对“java传参两种方式”可能比较讲究,兄弟们都想要分析一些“java传参两种方式”的相关资讯。那么小编也在网络上收集了一些关于“java传参两种方式””的相关知识,希望同学们能喜欢,我们一起来了解一下吧!

前言

在实际开发中,SQL中使用 模糊查询like使用非常普遍,在MyBatis中,为了防止SQL注入攻击,可以使用#{}来传递参数,切记like语句不要使用${}的方式!

这里我总结了 四种 like语句传参方式,以模糊查询user表的name为例,我推荐方式二方式三

方式一:Java代码拼接

在Java代码中拼接字符串,不推荐

Mapper.xml

<select id="selectByName" resultMap="UserMap" >    select * from user where name LIKE #{name}</select>

Java调用代码

userMapper.selectByName("%天罡%")

不推荐原因 Java代码中承担了拼接%的职责,而这些本属于SQL语句的职责:%左模糊、右模糊,全模糊应该是由SQL语句负责,违背了单一职责原则!

至于将#换成$,就更不推荐了,并且是严格禁止的,因为有SQL注入的风险!

方式二:MySQL CONCAT函数

MySQL 提供了CONCAT函数拼接字符串,在使用MySQL时很常用,推荐!

Mapper.xml

<select id="selectByName" resultMap="UserMap">    select * from user where name LIKE CONCAT('%', #{name}, '%')</select>

Java调用代码

userMapper.selectByName("天罡")
方式三:Mybatis bind标签

Mybatis本身提供了bind标签,适配所有支持的数据库!

bind 标签允许你在 OGNL 表达式以外创建一个变量,并将其绑定到当前的上下文。

使用它可以 绑定参数到 SQL 语句,方便地执行动态 SQL,推荐!

Mapper.xml

<select id="selectByName" resultMap="UserMap">    <bind name="pattern" value="'%' + name + '%'"/>    select * from user where name LIKE #{pattern}</select>

Java调用代码

userMapper.selectByName("天罡")
方式四:SQL拼接

下面这种方式更简单直接,注意: 此处不能写成 "%#{name}%", 应该写成: "%" #{name} "%",即 #{name}是一个整体, 前后加上% 。

Mapper.xml

<select id="selectByName" resultMap="UserMap">    select * from user where name LIKE "%"#{name}"%"</select>

Java调用代码

userMapper.selectByName("天罡")

如果有收获,请关注我:天罡gg,一个全网才5万多粉,竟然干了十多年的架构师,后面还有更多干货等着你,加油!

标签: #java传参两种方式