引言
核心思想
if 标签
实例理解
import com.example.demo.entity.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; //添加 @Mapper 注解 代表该接口会伴随这 项目的启动而注入到容器中 @Mapper public interface UserMapper { // 根据 name 和 age 字段来筛选用户信息 List<User> selectUser(@Param("user_name") String name, @Param("user_age") Integer age); }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mapper.UserMapper"> <select id="selectUser" resultType="com.example.demo.entity.User"> select * from user where 1=1 <if test="user_name != null"> and name = #{user_name} </if> <if test="user_age != null"> and age = #{user_age} </if> </select> </mapper>
情况一:
select * from user where name = #{user_name} and age = #{user_age}
情况二:
select * from user
情况三:
select * from user where age = #{user_age}
情况四:
select * from user where name = #{user_name}
注意:
@Test void selectUser() { List<User> users = userMapper.selectUser(null,20); users.stream().forEach(System.out::println); }
trim 标签
属性
- prefix:表示整个语句块,以 prefix 的值作为前缀
- suffix:表示整个语句块,以 suffix 的值作为后缀
- prefixOverrides:表示整个语句块,所需要去除的多余前缀
- suffixOverrides:表示整个语句块,所需要去除的多余后缀
实例理解
<select id="selectUser" resultType="com.example.demo.entity.User"> select * from user where 1=1 <if test="user_name != null"> and name = #{user_name} </if> <if test="user_age != null"> and age = #{user_age} </if> </select>
select * from user <trim prefix="where" suffixOverrides="and"> <if test="user_name != null"> name = #{user_name} and </if> <if test="user_age != null"> age =#{user_age} </if> </trim>
分析该 sql 语句
注意:
where 标签
实例理解
<select id="selectUser" resultType="com.example.demo.entity.User"> select * from user <where> <if test="user_name != null"> name = #{user_name} </if> <if test="user_age != null"> and age =#{user_age} </if> </where> </select>
注意:
<select id="selectUser" resultType="com.example.demo.entity.User"> select * from user <where> <if test="user_name != null"> name = #{user_name} and </if> <if test="user_age != null"> age =#{user_age} </if> </where> </select>
set 标签
实例理解
import com.example.demo.entity.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; //添加 @Mapper 注解 代表该接口会伴随这 项目的启动而注入到容器中 @Mapper public interface UserMapper { // 根据 id 修改用户信息 Integer updateById(User user); }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mapper.UserMapper"> <update id="updateById" parameterType="com.example.demo.entity.User"> update user <set> <if test="name != null"> name = #{name}, </if> <if test="age != 0"> age = #{age}, </if> <if test="password != null"> password = #{password}, </if> <if test="state != 0"> state = #{state} </if> </set> where id = #{id} </update> </mapper>
@Test void updateById() { User user = new User(); user.setId(4); user.setName("haoran"); user.setAge(20); user.setPassword("123123"); int result = userMapper.updateById(user); System.out.println("updateById 方法 :" + (result == 1 ? "修改成功" : "修改失败")); }
执行测试方法
- 测试方法成功执行
- 观察数据库中的 user 表
注意:
foreach 标签
属性
- collection:绑定方法参数中的集合,如 List、Set、Map 或数组对象
- item:遍历时的每一个对象
- open:语块开头的字符串
- close:语块结束的字符串
- separator:每次遍历之间间隔的字符串
实例理解
实现 UserMapper 接口
import com.example.demo.entity.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; //添加 @Mapper 注解 代表该接口会伴随这 项目的启动而注入到容器中 @Mapper public interface UserMapper { // 根据多个 id 批量封禁用户 Integer updateStateByIds(@Param("user_ids") List<Integer> ids); }
实现 UserMapper XML 文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mapper.UserMapper"> <update id="updateStateByIds"> update user set state = 0 where id in <foreach collection="user_ids" item="item" open="(" close=")" separator=","> #{item} </foreach> </update> </mapper>
- 此处我们封禁 id = 1、4、8、9 的用户
@Test void updateStateByIds() { List<Integer> ids = new ArrayList<>(); ids.add(1); ids.add(4); ids.add(8); ids.add(9); int result = userMapper.updateStateByIds(ids); System.out.println("updateById 方法 :" + (result > 1 ? "修改成功" : "修改失败")); }
执行测试方法
- 测试方法成功执行
- 观察数据库中的 user 表
原文地址:https://blog.csdn.net/weixin_63888301/article/details/134654661
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_27974.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。