Mybatis #{}和${}

大多数情况下,都是使用#{}

1.${}和#{}

#{} 占位符,可以有效地防止SQL注入

  • 传参大部分使用#{},底层使用的是PreparedStatement对象,是安全的数据库访问,能有效防止SQL注入
  • parameterType 即传入参数的类型是八种基本类型的时候
    #{} 中的内容书写没有限制
    使用?
    <select id="getOneById" parameterType="_int" resultType="string">
        select name
        from student
        where id=#{zhang}/*这里面的内容可以随便写,不写都可以*/
    </select>
  • parameterType 即传入参数的类型是实体类的类型时
    #{} 中的内容必须是类中成员变量的名称,要区分大小写
    <insert id="insert" parameterType="student">
        insert into student (name,email,age)
        values (#{name},#{email},#{age})/*这三个参数都是实体类的属性*/
    </insert>

${} 字符串拼接

  • 一般用于模糊查询(like)中,但是有SQL注入的风险
  • parameterType 即传入参数的类型是八种基本类型的时候
    3.5.1及以下的版本,${} 只能写value
    3.5.1以上的版本,${} 随便写
    <select id="getByName" parameterType="string" resultType="student">
        select id,name,email,age
        from student
        where name like '%${name}%'/*随便写*/
    </select>
  • parameterType 即传入参数的类型是实体类的类型时
    ${} 中的内容必须是类中成员变量的名称,要区分大小写

${} 字符串替换

2.优化模糊查询,防SQL注入

Mapper接口中定义方法

List<Users> getByName(String name);

映射文件中

	<!--
		优化模糊查询
			#{}中的内容写法还是那样
	-->
    <select id="getByName" parameterType="string" resultType="student">
        select id,name,email,age
        from student
        where name like concat('%',#{name},'%')
    </select>

3.${}字符串替换

${} 字符串替换 —— ${} 少有的优势(灬ꈍ ꈍ灬)

Mapper接口中定义方法

List<Users> getByNameOrAge(
@Param("columnName")//这里面可以随便写,但是要求与参数名相同
String columnName
@Param("columnValue")
String columnValue);

当传入参数多于1个的时候省略parameterType属性

    <select id="getByName" resultType="student">
        select id,name,email,age
        from student
        where ${columnName} like concat('%',#{columnValue},'%')
    </select>

这样可以减少重复的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

364.99°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值