#
可以防止sql注入 而 $ 不能
<!-- 如果存在表 删除表 #和$的区别 $可以防止sql注入 #不行 $是将传入的值直接显示 不会进行转换
比如 select * from user where name =#{name} 如果name是jack 翻译成 name ='jack'
select * from user where name =${name} 如果name是jack 翻译成 name = jack
-->
if test
的语法使用 一般在列表页面,有多个查询条件,并且不确定条件是否使用的时候可以使用 if test
语法
Mapper
//这里需要注意的是,一般持久层中,查询条件多个两个的时候最好创建一PO模型
List<UserInfoVo> findByKeywords(Map<String,String) param)
//如果这里使用了@Param("param")注解的时候,在xml映射中,需要使用param.xxx的方式获取参数
XXMapper.xml
<select id ="findByKeywords" parameterType="java.util.Map" resultType="com.example.test.vo.UserInfoVo>
SELECT * from user where user_type =1
<if test="username != null">
and username like concat('%',#{username},'%)
</if>
<!-- 如果持久层中使用注解@Param时候,这里获取参数值的方式为 param.idnumber-->
<if test="idnumber != null">
and idnumber like concat('%',#{idnumber},'%')
</if>
</select>
大于 >
小于<
等于=
forEach
的使用 foreach
元素的属性主要有item
,index
,collection
,open
,separator
,close
<select id="getUsersWihtStatus" resultType="com.wm.adminbackend.entity.user.SysUserDTO">
SELECT * FROM sys_user WHERE status IN
<foreach collection="ids" item="status" open="(" separator="," close=")" >
#{status}
</foreach>
</select>
更新多条2数据的时候,也可以使用此种方法
<update id="updateBatch" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
update course
<set>
name=#{item.name}
</set>
where id = #{item.id}
</foreach>
</update>
sql中定义的代码可以重复使用
<sql id="Base_Column_List">
id,name,password,email,phone,address,sex,idnumber
</sql>
然后在后面需要使用这些字段时候通过refid="Base_Column_List"
的方式使用,避免重复写大量的字段名
<select id="getByIds" resultType="com.haocang.equipment.domain.fault.Fault">
select
<include refid="Base_Column_List" />
from fault a
where a.state != -1
and a.id in
<foreach collection="ids" item="item" separator="," open="("
close=")">
#{item,jdbcType=INTEGER}
</foreach>
order by a.id DESC
</select>
Trim
标签的用法trim
标签有三个关键的属性prefix.suffix,prefixOverrides,suffixOverrides
prefix
: 给包裹的sql语句加上前缀.suffix
: 给包裹的sql语句加上后缀.prefixOverrides
: 如果包裹的sql
语句是空语句(经常出现在 if
判断为否的情况下),取消指定的前缀,如where.
suffixOverrides
: 如果包裹的sql
语句是空语句(经常出现在 if
判断为否的情况下),取消指定的后缀,如and
| or.
逗号等<insert id="insertSelective" parameterType="repository.entity.user.User" >
insert into USER
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
id,
</if>
<if test="userId != null" >
user_id,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >
#{id,jdbcType=VARCHAR},
</if>
<if test="userId != null" >
#{userId,jdbcType=VARCHAR},
</if>
</trim>
</insert>