美文网首页
动态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