Fork me on Github

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     }

 

posted @ 2022-04-15 09:36  昂昂呀  阅读(440)  评论(0)    收藏  举报