Mybatis常见使用总结

  • Mapper中#{}和${}的区别
  1. #{}采用的是占位符进行拼接sql语句,${}直接显式的显式字符串
  2. #{}会尽可能的防止sql注入的问题,${}会发生sql注入

相比来说最好是使用#{}不要使用${},但是Order By时一般使用$
所谓安全性的sql注入问题,例如:

select * from ${tableName} where name = #{name}   

假如${tableName}="user; delete user; -- "

select * from user; delete user; -- where name = ?;

完,用户表没了...


  • Mapper中批量添加和删除

批量操作使用的是foreach标签
collection:要做foreach的对象,作为入参时,List<?>对象默认用list代替作为键,数组对象有array代替作为键,Map对象没有默认的键。
当然在作为入参时可以使用@Param("keyName")来设置键,设置keyName后,list,array将会失效。 除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:
如果User有属性List ids。入参是User对象,那么这个collection = "ids"
如果User有属性Ids ids;其中Ids是个对象,Ids有个属性List id;入参是User对象,那么collection = "ids.id"
item:循环的变量别名
separator:集合中每个对象之间的分隔符
open:以。。。开始
close:以。。。结束
index:集合序号
批量添加

<insert id="batchSaveUser">
    insert into t_user (user_name,sex) values
    <foreach collection="users" item="u" separator=",">
        (#{u.userName},#{u.sex})
    </foreach>
</insert>

批量删除

<delete id="batchDeleteUser">
    delete from t_user where id in (
    <foreach collection="ids" item="id" separator=",">
        #{id}
    </foreach>
    )  
</delete>

添加用户并返回新添加的用户

<insert id="insertUser" parameterType="cn.xinxinkaikai.pojo.User">
    <!-- 
        keyProperty:执行sql语句后保存的位置
        resultType:返回类型
        order:该sql语句执行时期,相对于insert语句执行的时间
     -->
    <selectKey keyProperty="uId" resultType="Integer" order="AFTER">
        select LAST_INSERT_ID()
    </selectKey>
    insert into users(uName,uPasswd) values (#{uName},#{uPasswd})
</insert>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值