以下实例假定项目已经建成,只对部分文件(用户信息)进行更新。
1.动态查询
1.1使用<where>标签
1、修改UserMapper.xml,具体如下:
<select id="findUserByInfo" parameterType="Map"
resultMap="UserResult">
select * from user
<where>
<if test="username!=null">
<span style="white-space:pre"> </span>username like #{username}
</if>
<if test="gender!=null">
AND gender=#{gender}
</if>
<if test="department!=null">
AND department like #{department}
</if>
</where>
</select>
说明:
(1)、select之后不直接写Sql语句的where,而是使用<where>标签;
(2)、<where>标签只有在一个以上的<if>条件有值的情况下才去插入“WHERE”子句;
(3)、按照标准写法,第一个<if>标签内的AND应该不写,但是,即使书写也不会报错。where标签自动的移除了第一个AND连接,但是,第二个之后的<if>标签内,必须有AND连接;
(4)、若内容是“AND”或“OR”开头的,where 元素也知道如何将他们去除
(5)、如果没有一个条件符合,则返回所有条目。
2、修改AplicationTests.java中的单元测试方法,具体如下:
try {
Map<String, Object> map = new HashMap<String, Object>();
map.put("username", "胡");
map.put("gender", "1");
map.put("department", "开发");
List<User> userList = userMapper.findUserByInfo(map);
for (user:userList) {
logger.info(user.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
1.2使用<trim>标签
该标签的功能与<where>类似,额外的提供了前缀后缀功能.
1、修改UserMapper.xml,具体如下:
<select id="findUserByInfo" parameterType="Map" resultMap="UserResult">
select * from user
<trim prefix="where" prefixOverrides="and|or">
<if test="username!=null">
AND username like #{username}
</if>
<if test="gender!=null">
AND gender=#{gender}
</if>
<if test="department!=null">
AND department like #{department}
</if>
</trim>
</select>
说明:
(1)、属性“prefix”表示:加入前缀where;
(2)、属性“prefixOverrides”表示:自动覆盖第一个“and”或者“or”
(3)、后缀的用法类似;
2、修改AplicationTests.java中的单元测试方法(同上)
2.动态更新
1.1使用<set>标签
1、修改UserMapper.xml,具体如下:
<update id="updateUserById" parameterType="user">
update user
<set>
<if test="username!=null">
username=#{username},
</if>
<if test="gender!=null">
gender=#{gender} ,
</if>
<if test="department!=null">
department=#{department} ,
</if>
</set>
where userId=#{userId}
</update>
说明:
(1)、SQL语句的set被<set>标签替代。
(2)、<set>标签能够自动的移除最后一个<if>中的逗号(按照SQL语法,这个逗号是不能有的。
2、修改AplicationTests.java中的单元测试方法,具体如下:
try {
User user=new User();
user.setUsername("张三");
user.setGender("男");
user.setDepartment("市场部");
boolean result = userMapper.updateUserById(user);
for (result ) {
logger.info("修改成功");
}
} catch (Exception e) {
e.printStackTrace();
}
1.2使用<trim>标签
1、修改UserMapper.xml,具体如下:
<update id="updateUserById" parameterType="user">
update user
<trim prefix="SET" suffixOverrides=",">
<if test="username!=null">
username=#{username} ,
</if>
<if test="gender!=null">
gender=#{gender} ,
</if>
<if test="department!=null">
department=#{department} ,
</if>
</trim>
where userId=#{userId}
</update>
说明:
(1)、SQL语句的set被<set>标签替代。
(2)、<set>标签能够自动的移除最后一个<if>中的逗号(按照SQL语法,这个逗号是不能有的。
2、修改AplicationTests.java中的单元测试方法(同上)
Mybatis动态查询和动态更新
最新推荐文章于 2024-02-28 18:36:16 发布