- Mapper中#{}和${}的区别
- #{}采用的是占位符进行拼接sql语句,${}直接显式的显式字符串
- #{}会尽可能的防止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>