美文网首页
动态SQL 添加 Trim 标签

动态SQL 添加 Trim 标签

作者: 神豪VS勇士赢 | 来源:发表于2018-07-29 10:59 被阅读50次

分析需求:
完整添加SQL:
insert into userinfo(user_name,user_pass) values(#{userName},#{userPass})
如果只有第一个字段的情况:
insert into userinfo(user_name,) values(#{userName},)//多余的,问题

Trim(对包含的内容加上前缀或后缀)
<trim prefix="(" suffix=")" suffixOverrides="," >
prefix前缀, suffix后缀.
suffixOverrides后缀判断去多余
<if test="typeId != null" >
type_id,
</if>
</trim>

需求:多字段任意添加
任意添加:注意第二个trim的前缀。

映射文件如下所示:

第一种 VALUES 放在外面 :
<insert id="insertMyUserInfo" parameterType="com.zyh.pojo.UserInfo">
INSERT
INTO t_user_info
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="uName !=null">
u_name,
</if>
<if test="uPass !=null">
u_pass,
</if>
</trim>
VALUES
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="uName !=null">
#{uName},
</if>
<if test="uPass !=null">
#{uPass},
</if>
</trim>
</insert>

第二种 VALUES 放在 prefix=" VALUES ( "

<insert id="insertMyUserInfo" parameterType="com.zyh.pojo.UserInfo">
INSERT
INTO t_user_info
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="uName !=null">
u_name,
</if>
<if test="uPass !=null">
u_pass,
</if>
</trim>

<trim prefix="VALUES  (" suffix=")" suffixOverrides=",">
  <if test="uName !=null">
    #{uName},
  </if>
  <if test="uPass !=null">
    #{uPass},
  </if>
</trim>

</insert>

注意上面输入参数使用的是 实体类 UserInfo 当然我们可以将输入参数修改成Map 所以第三种产生了。

第三种 :
<insert id="insertMyUserInfoMap" parameterType="java.util.Map">
INSERT
INTO t_user_info
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="uName !=null">
u_name,
</if>
<if test="uPass !=null">
u_pass,
</if>
</trim>
VALUES
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="uName !=null">
#{uName},
</if>
<if test="uPass !=null">
#{uPass},
</if>
</trim>
</insert>

映射文件对应的接口如下所示:

int  insertMyUserInfo(UserInfo userInfo);
int  insertMyUserInfoMap(Map map);

对应的测试代码如下:
@Test
public void testInsertMyUserInfo(){
SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();
UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class);
UserInfo user=new UserInfo();
user.setuName("张英海啊");
user.setuPass("十个好人啊");
int i = mapper.insertMyUserInfo(user);
System.out.println(i);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testInsertMyUserInfoMap(){
SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();
UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class);

    Map<String ,String>  integerMap =new HashMap<>();
    integerMap.put("uName","张颖豪aaaaaa");
    mapper.insertMyUserInfoMap(integerMap);
    sqlSession.commit();
    sqlSession.close();
}

可以发现传入实体对象类以及Map 都可以完成。

相关文章

网友评论

      本文标题:动态SQL 添加 Trim 标签

      本文链接:https://www.haomeiwen.com/subject/tpdzmftx.html