分析需求:
完整添加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 都可以完成。
网友评论