当前位置: 首页 > article >正文

MybaitsPlus学习笔记(二)基本CURD

目录

一、BaseMapper

二、常用实例

1、插入

2、删除

3、修改

4、查询

三、IService

四、 IService中的一些方法测试


一、BaseMapper

        MyBatis-Plus中的基本CRUD在内置的BaseMapper中都已得到了实现,我们可以直接使用,接口如 下:

public interface BaseMapper<T> extends Mapper<T> {

    /**
     * 插入一条记录
     *
     * @param entity 实体对象
     */
    int insert(T entity);

    /**
     * 根据 ID 删除
     *
     * @param id 主键ID
     */
    int deleteById(Serializable id);

    /**
     * 根据实体(ID)删除
     *
     * @param entity 实体对象
     * @since 3.4.4
     */
    int deleteById(T entity);

    /**
     * 根据 columnMap 条件,删除记录
     *
     * @param columnMap 表字段 map 对象
     */
    int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);

    /**
     * 根据 entity 条件,删除记录
     *
     * @param queryWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
     */
    int delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

    /**
     * 删除(根据ID或实体 批量删除)
     *
     * @param idList 主键ID列表或实体列表(不能为 null 以及 empty)
     */
    int deleteBatchIds(@Param(Constants.COLLECTION) Collection<?> idList);

    /**
     * 根据 ID 修改
     *
     * @param entity 实体对象
     */
    int updateById(@Param(Constants.ENTITY) T entity);

    /**
     * 根据 whereEntity 条件,更新记录
     *
     * @param entity        实体对象 (set 条件值,可以为 null)
     * @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
     */
    int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);

    /**
     * 根据 ID 查询
     *
     * @param id 主键ID
     */
    T selectById(Serializable id);

    /**
     * 查询(根据ID 批量查询)
     *
     * @param idList 主键ID列表(不能为 null 以及 empty)
     */
    List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

    /**
     * 查询(根据 columnMap 条件)
     *
     * @param columnMap 表字段 map 对象
     */
    List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);

    /**
     * 根据 entity 条件,查询一条记录
     * <p>查询一条记录,例如 qw.last("limit 1") 限制取一条记录, 注意:多条数据会报异常</p>
     *
     * @param queryWrapper 实体对象封装操作类(可以为 null)
     */
    default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {
        List<T> ts = this.selectList(queryWrapper);
        if (CollectionUtils.isNotEmpty(ts)) {
            if (ts.size() != 1) {
                throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records");
            }
            return ts.get(0);
        }
        return null;
    }

    /**
     * 根据 Wrapper 条件,判断是否存在记录
     *
     * @param queryWrapper 实体对象封装操作类
     * @return
     */
    default boolean exists(Wrapper<T> queryWrapper) {
        Long count = this.selectCount(queryWrapper);
        return null != count && count > 0;
    }

    /**
     * 根据 Wrapper 条件,查询总记录数
     *
     * @param queryWrapper 实体对象封装操作类(可以为 null)
     */
    Long selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

    /**
     * 根据 entity 条件,查询全部记录
     *
     * @param queryWrapper 实体对象封装操作类(可以为 null)
     */
    List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

    /**
     * 根据 Wrapper 条件,查询全部记录
     *
     * @param queryWrapper 实体对象封装操作类(可以为 null)
     */
    List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

    /**
     * 根据 Wrapper 条件,查询全部记录
     * <p>注意: 只返回第一个字段的值</p>
     *
     * @param queryWrapper 实体对象封装操作类(可以为 null)
     */
    List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

    /**
     * 根据 entity 条件,查询全部记录(并翻页)
     *
     * @param page         分页查询条件(可以为 RowBounds.DEFAULT)
     * @param queryWrapper 实体对象封装操作类(可以为 null)
     */
    <P extends IPage<T>> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

    /**
     * 根据 Wrapper 条件,查询全部记录(并翻页)
     *
     * @param page         分页查询条件
     * @param queryWrapper 实体对象封装操作类
     */
    <P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
}

二、常用实例

1、插入
@Test
public void testInsert(){
User user = new User(null, "张三", 23, "zhangsan@qcby.com");
//INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
int result = userMapper.insert(user);
System.out.println("受影响行数:"+result);
System.out.println("id自动获取:"+user.getId());
}

最终执行的结果,所获取的id可能并不是递增的。

这是因为MyBatis-Plus在实现插入数据时,会默认基于雪花算法的策略生成id

mybatis-plus:
  global-config:
    db-config:
      id-type: auto

可以通过修改配置来实现添加的id递增

2、删除

id删除

@Test
public void testDeleteById(){
//通过id删除用户信息
//DELETE FROM user WHERE id=?
int result = userMapper.deleteById(1475754982694199298L);
System.out.println("受影响行数:"+result);
}

id批量删除

@Test
public void testDeleteBatchIds(){
//通过多个id批量删除
//DELETE FROM user WHERE id IN ( ? , ? , ? )
List<Long> idList = Arrays.asList(1L, 2L, 3L);
int result = userMapper.deleteBatchIds(idList);
System.out.println("受影响行数:"+result);
}

map删除

@Test
public void testDeleteByMap(){
//根据map集合中所设置的条件删除记录
//DELETE FROM user WHERE name = ? AND age = ?
Map<String, Object> map = new HashMap<>();
map.put("age", 23);
map.put("name", "张三");
int result = userMapper.deleteByMap(map);
System.out.println("受影响行数:"+result);
}
3、修改
@Test
public void testUpdateById(){
User user = new User(4L, "admin", 22, null);
//UPDATE user SET name=?, age=? WHERE id=?
int result = userMapper.updateById(user);
System.out.println("受影响行数:"+result);
}
4、查询

 根据id查询用户信息 

@Test
public void testSelectBatchIds(){
//根据多个id查询多个用户信息
//SELECT id,name,age,email FROM user WHERE id IN ( ? , ? )
List<Long> idList = Arrays.asList(4L, 5L);
List<User> list = userMapper.selectBatchIds(idList);
list.forEach(System.out::println);
}

ids查询多个 

@Test
public void testSelectById(){
//根据id查询用户信息
//SELECT id,name,age,email FROM user WHERE id=?
User user = userMapper.selectById(4L);
System.out.println(user);
}

map查询

@Test
public void testSelectByMap(){
//通过map条件查询用户信息
//SELECT id,name,age,email FROM user WHERE name = ? AND age = ?
Map<String, Object> map = new HashMap<>();
map.put("age", 22);
map.put("name", "admin");
List<User> list = userMapper.selectByMap(map);
list.forEach(System.out::println);
}

查所有

@Test
public void testSelectList(){
//查询所有用户信息
//SELECT id,name,age,email FROM user
List<User> list = userMapper.selectList(null);
list.forEach(System.out::println);
}

三、IService

MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑

四、 IService中的一些方法测试

查总数

//count
    @Test
    public void test1(){
        Long count = userService.count();
        System.out.println(count);
    }

插入一条记录(选择字段,策略插入) 

    //插入一条记录(选择字段,策略插入)
    @Test
    public void test2(){
        User user = new User();
        user.setName("zhangsan");
        user.setAge(22);
        user.setEmail("qq.com");
        boolean result = userService.save(user);
        System.out.println(result);
    }

插入(批量)

    @Test
    public void test3(){
        User user = new User();
        user.setName("zhangsan3");
        user.setAge(33);
        user.setEmail("11qq.com");
        User user2 = new User();
        user2.setName("zhangsan4");
        user2.setAge(44);
        user2.setEmail("22qq.com");
        List<User> a = new ArrayList<>();
        a.add(user);
        a.add(user2);

        boolean res = userService.saveBatch(a,1);
        System.out.println(res);
    }

这个需要认真理解

    //批量修改插入
    //根据id找,找到的修改,其他添加
    @Test
    public void test4(){
        //修改zhangsan
        User user = new User();
        user.setName("zhangsanUP");
        user.setAge(33);
        user.setEmail("Update@qq.com");
        user.setId(7);
        //添加zhangsan5
        User user2 = new User();
        user2.setName("zhangsan5");
        user2.setAge(55);
        user2.setEmail("55.com");
        //user2.setId(15);
        List<User> a = new ArrayList<>();
        a.add(user);
        a.add(user2);

        boolean res = userService.saveOrUpdateBatch(a);
        System.out.println(res);
    }
    //根据 ID 删除
    @Test
    public void test5(){
        boolean res = userService.removeById(11);
        System.out.println(res);
    }

    //根据 columnMap 条件,删除记录
    @Test
    public void test6(){
        Map<String,Object> map =  new HashMap<>();
        map.put("age",33);
        boolean res = userService.removeByMap(map);
        System.out.println(res);
    }

    //根据 entity 条件,删除记录
    @Test
    public void test7(){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.le("age",12);
        boolean res = userService.remove(queryWrapper);
        System.out.println(res);
    }

    //删除(根据ID 批量删除)
    @Test
    public void test8(){
        List<Integer> idList = new ArrayList<>();
        idList.add(1);
        idList.add(2);
        boolean res = userService.removeByIds(idList);
        System.out.println(res);
    }
    //JDBC批量提交是指将多条SQL语句组合成一个批处理,然后一次性提交给数据库执行。
    // 这可以显著提高性能,特别是在处理大量插入、更新或删除操作时。


    //根据 ID 选择修改
    @Test
    public void test9(){
        User user2 = new User();
        user2.setName("zhangsanUP");
        user2.setAge(555);
        user2.setEmail("55up.com");
        user2.setId(12);
        boolean res = userService.updateById(user2);
        System.out.println(res);
    }

    //根据 UpdateWrapper 条件,更新记录 需要设置sqlset
    @Test
    public void test10(){
        UpdateWrapper<User> updateWrapper = new UpdateWrapper();
        updateWrapper
                .set("name","updatewrapper")
                .set("age",12)
                .like("name","zhang");
        boolean res = userService.update(updateWrapper);
        System.out.println(res);
    }

    //根据ID 批量更新
    @Test
    public void test11(){
        User user1 = new User();
        user1.setName("zhangsan1");
        user1.setAge(555);
        user1.setEmail("55up.com");
        user1.setId(9);
        User user2 = new User();
        user2.setName("zhangsanUP2");
        user2.setAge(555);
        user2.setEmail("55up.com");
        user2.setId(12);

        List<User> a = new ArrayList<>();
        a.add(user1);
        a.add(user2);
        boolean res = userService.updateBatchById(a);
        System.out.println(res);
    }

    //根据 ID 查询
    @Test
    public void test13(){
        User res = userService.getById(12);
        System.out.println(res);
    }

    //查询(根据ID 批量查询)
    @Test
    public void test14(){
        List<Integer> idList = new ArrayList<>();
        idList.add(9);
        idList.add(12);
        List<User> res = userService.listByIds(idList);
        System.out.println(res);
    }

    //查询(根据 columnMap 条件
    @Test
    public void test15(){
        Map<String,Object> map =  new HashMap<>();
        map.put("name","Jack");
        List<User> res = userService.listByMap(map);
        System.out.println(res);
    }

    //根据 Wrapper,查询一条记录
    //throwEx有多个 result 是否抛出异常
    //One record is expected, but the query result is multiple records
    //如果有多个返回第一个
    @Test
    public void test16(){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.le("age",555);
        User res = userService.getOne(queryWrapper,false);
        System.out.println(res);
    }

    //根据 Wrapper 条件,查询总记录数
    @Test
    public void test17(){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.le("age",100);
        Long res = userService.count(queryWrapper);
        System.out.println(res);
    }

    //查询列表
    @Test
    public void test18(){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.le("age",100);
        List<User> res = userService.list(queryWrapper);
        System.out.println(res);
    }

    //查询所有
    @Test
    public void test19(){
        List<User> res = userService.list();
        System.out.println(res);
    }


    //查询所有id
    @Test
    public void test21(){
        List<Object> res = userService.listObjs();
        System.out.println(res);
    }

    //根据 Wrapper 条件,查询全部记录
    @Test
    public void test22(){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.le("age",100);
        List<Object> res = userService.listObjs(queryWrapper);
        System.out.println(res);
    }


http://www.kler.cn/a/552698.html

相关文章:

  • 针对Feign客户端请求体参数处理问题
  • 第 17 天:HUD 世界 UI 显示!
  • MySQL——数据库约束
  • 深度学习04 数据增强、调整学习率
  • Redis哈希槽机制的实现
  • 网络安全推荐的视频教程 网络安全系列
  • Flutter 学习大纲
  • HarmonyOS进程通信及原理
  • 初识Linux(9):程序地址空间
  • 特力康输电线路杆塔倾斜智能监测装置:创新技术如何提升电网安全
  • 使用DeepSeek自动获取视频双语字幕srt文件【工具说明】
  • 就像BGP中的AS_PATH一样,无论路途多远,我愿意陪你一起走——基于华为ENSP的BGP的Community[社团属性]深入浅出
  • 【鸿蒙Next】优秀鸿蒙博客集锦
  • linux中yum是干啥的?
  • Unity3D UGUI性能消耗和管理详解
  • HTML之JavaScript Form表单事件
  • Ubuntu 下 nginx-1.24.0 源码分析 - NGX_MAX_ALLOC_FROM_POOL
  • 基于智能体和RWA的分布式商业生态商业模型架构设计
  • 数字化到“数智化”:AI重构商业世界的底层逻辑
  • 【Prometheus】prometheus结合pushgateway实现脚本运行状态监控