前言:
此刻大家对“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传参两种方式