mybatis中的这些小细节你知道吗?

本文详细介绍了MyBatis中#{ }与${ }的区别,包括安全性和使用场景。讲解了如何利用#{ }进行安全的数据库操作防止SQL注入,以及${ }在特定情况下的字符串拼接和替换。此外,还讨论了动态SQL的使用,如<selectKey>标签用于获取主键值,<if>、<where>、<set>和<foreach>标签实现逻辑判断和循环处理。同时,文章提到了使用Map作为参数和返回值的情况,以及为何在某些情况下选择使用Map而非实体类。
摘要由CSDN通过智能技术生成

目录

#{}占位符

${}字符串拼接或字符串替换

  2)字符串替换

返回主键值

UUID

什么是动态sql

指定参数位置

入参是map(重点掌握) 

返回值是map


#{}占位符


  传参大部分使用#{}传参,它的底层使用的是PreparedStatement对象,是安全的数据库访问 ,防止sql注入。
  #{}里如何写,看parameterType参数的类型
  1)如果parameterType的类型是简单类型(8种基本(封装)+String),则#{}里随便写。
 

 <select id="getById" parameterType="int" resultType="users">  ===>入参类型是简单类型
        select id,username,birthday,sex,address
        from users
        where id=#{zar}  ===>随便写
    </select>  


  2)parameterType的类型是实体类的类型,则#{}里只能是类中成员变量的名称,而且区分大小写。

    <insert id="insert" parameterType="users" >  ===>入参是实体类
        insert into users (username, birthday, sex, address) values(#{userName},#{birthday},#{sex},#{address})  ==>成员变量名称
    </insert>


${}字符串拼接或字符串替换


  1)字符串拼接,一般用于模糊查询中.建议少用,因为有sql注入的风险
    也分两种情况,同样的看parameterType的类型
    A. 如果parameterType的类型是简单类型,则${}里随便写,但是分版本,如果是3.5.1及以下的版本,只以写value 

<select id="getByName" parameterType="string" resultType="users">  ===>入参是简单类型
        select id,username,birthday,sex,address
        from users
        where username like '%${zar}%'   ===>随便写
    </select> 

B. 如果parameterType的类型是实体类的类型,则${}里只能是类中成员变量的名称.(少用)

C. 优化后的模糊查询(以后都要使用这种方式) 

 

 <select id="getByNameGood" parameterType="string" resultType="users">
        select id,username,birthday,sex,address
        from users
        where username like concat('%',#{name},'%')
    </select>

  2)字符串替换

  需求:模糊地址或用户名查询  

select * from users where username like '%小%';
select * from users where address like '%市%'



  <!--
    //模糊用户名和地址查询
    //如果参数超过一个,则parameterType不写
    List<Users> getByNameOrAddress(
            @Param("columnName")  ===>为了在sql语句中使用的名称
            String columnName,
            @Param("columnValue")   ===>为了在sql语句中使用的名称
            String colu
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值