BaseMapper接口 CRUD
一、select 查询数据
1.select查询和Wrapper
selectById:根据 ID 查询
selectBatchIds:根据 ID 批量查询,即一次传递多个 ID
selectOne:根据构建的 Wrapper 条件查询数据,且只返回一个结果对象
selectCount:根据构建的 Wrapper 条件对象查询数据条数
1)根据 ID 查询
1 @Autowired
2 private SimpleMapper simpleMapper;
3
4 @Test
5 void contextLoads() {
6 UserBean userBean = simpleMapper.selectById(1);
7 System.out.println(userBean);
8 }
2)根据 ID 进行批量查询
1 @Autowired
2 private SimpleMapper simpleMapper;
3
4 @Test
5 void contextLoads() {
6 List<Integer> ids = Arrays.asList(1, 2, 3);
7 List<UserBean> userBeanList = simpleMapper.selectBatchIds(ids);
8 for(UserBean userBean : userBeanList) {
9 System.out.println(userBean);
10 }
11 }
3)根据构建的 Wrapper 条件(根据ID查询用户信息)对象,使用 selectOne 查询数据,且只返回一个对象
1 @Autowired
2 private SimpleMapper simpleMapper;
3
4 @Test
5 void contextLoads() {
6 List<Integer> ids = Arrays.asList(1, 2, 3);
7 List<UserBean> userBeanList = simpleMapper.selectBatchIds(ids);
8 for(UserBean userBean : userBeanList) {
9 System.out.println(userBean);
10 }
11 }
4)获取数据总数,也可以使用 Wrapper 条件过滤数据
1 @Autowired
2 private SimpleMapper simpleMapper;
3
4 @Test
5 void contextLoads() {
6 // 统计年龄大于等于 28 岁的用户数
7 QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
8 wrapper.gt("age", 28);
9 int count = simpleMapper.selectCount(wrapper);
10 System.out.println("count=" + count);
11 }
2.select 复杂
1 // 根据 entity 条件,查询全部记录 2 List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); 3 // 查询(根据 columnMap 条件) 4 List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); 5 // 根据 Wrapper 条件,查询全部记录 6 List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); 7 // 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值 8 List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
1)根据 userId、姓名和年龄查询条件创建一个 Wrapper 条件对象,查询用户列表
1 @Autowired 2 private SimpleMapper simpleMapper; 3 4 @Test 5 void contextLoads() { 6 query(1, null, null); 7 query(1, "赫仑", null); 8 query(1, "赫仑", 27); 9 } 10 11 private void query(int userId, String name, Integer age) { 12 System.out.println("\n查询数据:"); 13 QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); 14 wrapper.eq("user_id", userId); 15 16 // 第一个参数为是否执行条件,为true则执行该条件 17 // 下面实现根据 name 和 age 动态查询 18 wrapper.eq(StringUtils.isNotEmpty(name), "name", name); 19 wrapper.eq(null != age, "age", age); 20 21 List<UserBean> userBeanList = simpleMapper.selectList(wrapper); 22 for(UserBean userBean : userBeanList) { 23 System.out.println(userBean); 24 } 25 }
2)使用 Map 作为查询条件参数
1 @Autowired 2 private SimpleMapper simpleMapper; 3 4 @Test 5 void contextLoads() { 6 query(1, null, null); 7 query(1, "赫仑", null); 8 query(1, "赫仑", 27); 9 } 10 11 private void query(int userId, String name, Integer age) { 12 System.out.println("\n查询数据:"); 13 Map<String,Object> map = new HashMap<>(); 14 map.put("user_id", userId); 15 16 // 第一个参数为是否执行条件,为true则执行该条件 17 // 下面实现根据 name 和 age 动态查询 18 if(StringUtils.isNotEmpty(name)) { 19 map.put("name", name); 20 } 21 if(null != age) { 22 map.put("age", age); 23 } 24 25 List<UserBean> userBeanList = simpleMapper.selectByMap(map); 26 for(UserBean userBean : userBeanList) { 27 System.out.println(userBean); 28 } 29 }
3.动态 select 查询
“wrapper.eq(null != age, "age", age);”语句的第一个参数是一个布尔值
当该布尔值为 true 时,则将该条件应用到结果集中,类似 XML 文件的 <if> 标签,等同于下面 Mapper XML:
<if test="null != age"> and age=#{age} </if>
有了这个布尔参数,可以根据传递的条件动态选择查询条件
1)根据用户ID、用户名和年龄查询数据,如果用户名为空,则不使用名称进行查询;如果 age 为 null,则不使用 age 进行查询
1 private void query(int userId, String name, Integer age) { 2 System.out.println("\n查询数据:"); 3 QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); 4 wrapper.eq("user_id", userId); 5 6 // 第一个参数为是否执行条件,为true则执行该条件 7 // 下面实现根据 name 和 age 动态查询 8 wrapper.eq(StringUtils.isNotEmpty(name), "name", name); 9 wrapper.eq(null != age, "age", age); 10 11 List<UserBean> userBeanList = simpleMapper.selectList(wrapper); 12 for(UserBean userBean : userBeanList) { 13 System.out.println(userBean); 14 } 15 }
二、select 分页查询
selectPage:根据 entity 条件,查询全部记录
selectMapsPage:根据 Wrapper 条件,查询全部记录
1.配置分页插件
Spring Boot 项目需要通过 @Configuration 和 @Bean 注解来添加配置
1 @Configuration 2 public class MybatisPlusConfig { 3 4 /** 5 * 分页插件。如果你不配置,分页插件将不生效 6 */ 7 @Bean 8 public MybatisPlusInterceptor paginationInterceptor() { 9 MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); 10 // 指定数据库方言为 MYSQL 11 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); 12 return interceptor; 13 } 14 15 }
2.使用 QueryWrapper 和 Page 作为参数进行分页
1 @Autowired 2 private SimpleMapper simpleMapper; 3 4 @Test 5 void contextLoads() { 6 QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); 7 wrapper.isNotNull("user_id"); 8 9 // 创建分页对象(1表示第一页;4表示每页大小为4) 10 Page<UserBean> page = new Page<>(1, 4); 11 Page<UserBean> result = simpleMapper.selectPage(page, wrapper); 12 System.out.println("page == result: " + (page == result)); 13 System.out.println("size: " + result.getSize()); 14 System.out.println("total: " + result.getTotal()); 15 for(UserBean userBean : result.getRecords()) { 16 System.out.println(userBean); 17 } 18 }
page 和 selectPage 返回的 result 相等,说明两者是同一个对象。因此,可以忽略掉 selectPage 方法的返回结果,如下:
Page<UserBean> page = new Page<>(1, 4); simpleMapper.selectPage(page, wrapper);
3.selectMapsPage
selectMapsPage 和上面的使用方法一样,仅仅是返回类型不一样
@Autowired private SimpleMapper simpleMapper; @Test void contextLoads() { // 返回的结果类型为 Map<String,Object> Page<Map<String,Object>> page = new Page<>(1, 4); simpleMapper.selectMapsPage(page, null); System.out.println("size: " + page.getSize()); System.out.println("total: " + page.getTotal()); System.out.println("pages: " + page.getPages()); for(Map<String,Object> map : page.getRecords()) { System.out.println(map); } }
三、insert 保存数据
// 插入一条记录 int insert(T entity);
entity:一个实体对象需要使用 @TableName 和 @TableId 注解指明该实体对应那张表,其中哪个字段是ID字段。
例如:
1 @TableName("user") 2 public class UserBean { 3 @TableId 4 private Integer userId; 5 private String name; 6 private String sex; 7 private Integer age; 8 private byte[] face; 9 private Float salary; 10 private Date borthday; 11 }
1.将一个 UserBean 中的内容保存到数据库
insert 方法将返回影响数据库记录数。如果插入成功则返回 1,否则插入失败
1 @Autowired 2 private SimpleMapper simpleMapper; 3 4 @Test 5 void contextLoads() { 6 UserBean userBean = new UserBean(); 7 userBean.setUserId(999); 8 userBean.setName("insert test"); 9 userBean.setAge(30); 10 userBean.setSex("男"); 11 userBean.setFace("Hello World".getBytes()); 12 userBean.setBorthday(new Date()); 13 14 int result = simpleMapper.insert(userBean); 15 System.out.println("result=" + result); 16 }
四、update 更新数据
// 根据 whereEntity 条件,更新记录 int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper); // 根据 ID 修改 int updateById(@Param(Constants.ENTITY) T entity);
1.根据 ID 更新数据
1 @Autowired 2 private SimpleMapper simpleMapper; 3 4 @Test 5 void contextLoads() { 6 UserBean userBean = new UserBean(); 7 userBean.setUserId(999); 8 userBean.setName("insert test update"); 9 userBean.setAge(40); 10 userBean.setSex("女"); 11 userBean.setFace("welcome".getBytes()); 12 userBean.setBorthday(new Date()); 13 14 int result = simpleMapper.updateById(userBean); 15 System.out.println("result=" + result); 16 }
2.根据查询条件批量更新数据
1 @Autowired 2 private SimpleMapper simpleMapper; 3 4 @Test 5 void contextLoads() { 6 UpdateWrapper<UserBean> wrapper = new UpdateWrapper<>(); 7 wrapper.ge("age", 30); // 大于等于 30 8 9 UserBean userBean = new UserBean(); 10 userBean.setAge(80); 11 int result = simpleMapper.update(userBean, wrapper); 12 System.out.println("result=" + result); 13 }
五、delete 删除数据
// 根据 wrapper 条件,删除记录 int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper); // 删除(根据ID 批量删除) int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); // 根据 ID 删除 int deleteById(Serializable id); // 根据 columnMap 条件,删除记录 int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
1.根据ID删除数据
1 @Autowired 2 private SimpleMapper simpleMapper; 3 4 @Test 5 void contextLoads() { 6 int result = simpleMapper.deleteById(999); 7 System.out.println("result=" + result); 8 }
2.使用 Map 类型的条件删除数据
1 @Autowired 2 private SimpleMapper simpleMapper; 3 4 @Test 5 void contextLoads() { 6 Map<String,Object> map = new HashMap<>(); 7 map.put("sex", "女"); 8 int result = simpleMapper.deleteByMap(map); 9 System.out.println("result=" + result); 10 }
3.根据 Wrapper 查询对象删除数据
1 @Autowired 2 private SimpleMapper simpleMapper; 3 4 @Test 5 void contextLoads() { 6 QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); 7 wrapper.le("age", 30); // 小于等于30 8 9 int result = simpleMapper.delete(wrapper); 10 System.out.println("result=" + result); 11 }
4.一次性删除多个ID数据
1 @Autowired 2 private SimpleMapper simpleMapper; 3 4 @Test 5 void contextLoads() { 6 List<Integer> ids = Arrays.asList(2, 4, 6, 7); 7 int result = simpleMapper.deleteBatchIds(ids); 8 System.out.println("result=" + result); 9 }

浙公网安备 33010602011771号