mybatis-plus-sgg-12-18

BaseMapper #

  • 注:使用 mvn dependency:resolve -Dclassifier=sources 来获得mapper源码

  • 一些接口介绍

        /**
         * 插入一条记录
         *
         * @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);
    
  • BaseMapper测试

    • 新增

          @Test
          public void testInsert(){
              User user=new User();
              user.setName("小明");
              user.setAge(11);
              user.setEmail("xx@163.com");
              int insertNum = userMapper.insert(user);
              System.out.println("result:"+insertNum);
              System.out.println("result:"+user);
          }
      
      • sql日志输出

        ==>  Preparing: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
        ==> Parameters: 1532542803866394625(Long), 小明(String), 11(Integer), xx@163.com(String)
        <==    Updates: 1
        
    • 删除

      • id删除

            @Test
            public void testDelete(){
                int result = userMapper.deleteById(1532542803866394625L);
                System.out.println(result);
            }
        

        sql日志输出

        ==>  Preparing: DELETE FROM user WHERE id=?
        ==> Parameters: 1532542803866394625(Long)
        <==    Updates: 1
        
      • Map删除

            @Test
            public void testDeleteByMap(){
                Map<String,Object> hash=new HashMap<>();
                hash.put("name","Sandy");
                hash.put("age","1234");
                int result = userMapper.deleteByMap(hash);
                System.out.println(result);
            }
        

        sql日志输出

        ==>  Preparing: DELETE FROM user WHERE name = ? AND age = ?
        ==> Parameters: Sandy(String), 1234(String)
        <==    Updates: 0
        
      • 批量删除

            @Test
            public void testDeleteByIds(){
                List<Long> ids = Arrays.asList(1L, 2L, 5L);
                int result = userMapper.deleteBatchIds(ids);
                System.out.println(result);
            }
        

        sql日志输出

        ==>  Preparing: DELETE FROM user WHERE id IN ( ? , ? , ? )
        ==> Parameters: 1(Long), 2(Long), 5(Long)
        <==    Updates: 3
        
    • 修改

      • 根据id修改

            @Test
            public void testUpdateById (){
                User user=new User();
                user.setId(5L);
                user.setEmail("email被修改了" );
                int result = userMapper.updateById(user);
                System.out.println(result);
            }
        

        sql日志输出

        ==>  Preparing: UPDATE user SET email=? WHERE id=?
        ==> Parameters: email被修改了(String), 5(Long)
        <==    Updates: 1
        

        注意,这里不会修改另一个字段name的值

    • 查询

      • 通过id查询用户信息

            @Test
            public void testSelectById (){
                User user = userMapper.selectById(3);
                System.out.println(user);
            }
        

        sql日志输出

        ==>  Preparing: SELECT id,name,age,email FROM user WHERE id=?
        ==> Parameters: 3(Integer)
        <==    Columns: id, name, age, email
        <==        Row: 3, Tom, 28, test3@baomidou.com
        <==      Total: 1
        
      • 通过id集合查询

            @Test
            public void testSelectByIds() {
                List<User> users = userMapper.selectBatchIds(Arrays.asList(1L, 2L, 5L));
                users.forEach(System.out::println);
            }
        

        sql日志输出

        ==>  Preparing: SELECT id,name,age,email FROM user WHERE id IN ( ? , ? , ? )
        ==> Parameters: 1(Long), 2(Long), 5(Long)
        <==    Columns: id, name, age, email
        <==        Row: 1, Jone, 18, test1@baomidou.com
        <==        Row: 2, Jack, 20, test2@baomidou.com
        <==        Row: 5, Billie, 24, email被修改了
        <==      Total: 3
        
      • 通过map查询

            @Test
            public void testSelectMap() {
                Map<String, Object> hashMap = new HashMap<>();
                hashMap.put("name","Jon");
                hashMap.put("age",18);
                List<User> users = userMapper.selectByMap(hashMap);
                users.forEach(System.out::println);
            }
        

        sql日志输出

        ==>  Preparing: SELECT id,name,age,email FROM user WHERE name = ? AND age = ?
        ==> Parameters: Tom(String), 18(Integer)
        <==    Columns: id, name, age, email
        <==        Row: 3, Tom, 18, test3@baomidou.com
        <==      Total: 1
        
      • 查询所有数据

            @Test
            public void testSelectAll() { 
                List<User> users = userMapper.selectList(null);
                users.forEach(System.out::println);
            }
        

        sql日志输出

        ==>  Preparing: SELECT id,name,age,email FROM user
        ==> Parameters: 
        <==    Columns: id, name, age, email
        <==        Row: 1, Jone, 18, test1@baomidou.com
        <==        Row: 2, Jack, 20, test2@baomidou.com
        <==        Row: 3, Tom, 18, test3@baomidou.com
        <==        Row: 4, Sandy, 21, test4@baomidou.com
        <==        Row: 5, Billie, 24, email被修改了
        <==      Total: 5
        

自定义功能 #

  • mapper映射文件默认位置

    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      mapper-locations:
        - classpath:/mapper/**/*.xml #默认位置
    

    ly-20241212142150170

  • 映射文件配置 /mapper/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.ly.mybatisplus.mapper.UserMapper">
        <select id="selectMapById" resultType="map">
            select id,name,age,email from user
            where id = #{id} and 1=1 
        </select>
    </mapper>
    
  • 代码执行

        @Test
        public void testSelectCustom() {
            Map<String, Object> map = userMapper.selectMapById(2L);
            System.out.println(map);
        }
    

    sql日志执行

    ==>  Preparing: select id,name,age,email from user where id = ? and 1=1
    ==> Parameters: 2(Long)
    <==    Columns: id, name, age, email
    <==        Row: 2, Jack, 20, test2@baomidou.com
    <==      Total: 1
    

通用Service接口 #

  • 和通用Mapper的方法名有区分 Service CRUD中

    • 使用get查询【mapper-select】
    • remove删除 【mapper-delete】
    • list查询集合
    • page分页
  • IService源码

    /**
     * 顶级 Service
     *
     * @author hubin
     * @since 2018-06-23
     */
    public interface IService<T> {
    
        /**
         * 默认批次提交数量
         */
        int DEFAULT_BATCH_SIZE = 1000;
    
        /**
         * 插入一条记录(选择字段,策略插入)
         *
         * @param entity 实体对象
         */
        default boolean save(T entity) {
            return SqlHelper.retBool(getBaseMapper().insert(entity));
        }
    
        /**
         * 插入(批量)
         *
         * @param entityList 实体对象集合
         */
        @Transactional(rollbackFor = Exception.class)
        default boolean saveBatch(Collection<T> entityList) {
            return saveBatch(entityList, DEFAULT_BATCH_SIZE);
        }
    
        /**
         * 插入(批量)
         *
         * @param entityList 实体对象集合
         * @param batchSize  插入批次数量
         */
        boolean saveBatch(Collection<T> entityList, int batchSize);
    
        /**
         * 批量修改插入
         *
         * @param entityList 实体对象集合
         */
        @Transactional(rollbackFor = Exception.class)
        default boolean saveOrUpdateBatch(Collection<T> entityList) {
            return saveOrUpdateBatch(entityList, DEFAULT_BATCH_SIZE);
        }
    
        /**
         * 批量修改插入
         *
         * @param entityList 实体对象集合
         * @param batchSize  每次的数量
         */
        boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
    
        /**
         * 根据 ID 删除
         *
         * @param id 主键ID
         */
        default boolean removeById(Serializable id) {
            return SqlHelper.retBool(getBaseMapper().deleteById(id));
        }
    
        /**
         * 根据 ID 删除
         *
         * @param id      主键(类型必须与实体类型字段保持一致)
         * @param useFill 是否启用填充(为true的情况,会将入参转换实体进行delete删除)
         * @return 删除结果
         * @since 3.5.0
         */
        default boolean removeById(Serializable id, boolean useFill) {
            throw new UnsupportedOperationException("不支持的方法!");
        }
    
        /**
         * 根据实体(ID)删除
         *
         * @param entity 实体
         * @since 3.4.4
         */
        default boolean removeById(T entity) {
            return SqlHelper.retBool(getBaseMapper().deleteById(entity));
        }
    
        /**
         * 根据 columnMap 条件,删除记录
         *
         * @param columnMap 表字段 map 对象
         */
        default boolean removeByMap(Map<String, Object> columnMap) {
            Assert.notEmpty(columnMap, "error: columnMap must not be empty");
            return SqlHelper.retBool(getBaseMapper().deleteByMap(columnMap));
        }
    
        /**
         * 根据 entity 条件,删除记录
         *
         * @param queryWrapper 实体包装类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         */
        default boolean remove(Wrapper<T> queryWrapper) {
            return SqlHelper.retBool(getBaseMapper().delete(queryWrapper));
        }
    
        /**
         * 删除(根据ID 批量删除)
         *
         * @param list 主键ID或实体列表
         */
        default boolean removeByIds(Collection<?> list) {
            if (CollectionUtils.isEmpty(list)) {
                return false;
            }
            return SqlHelper.retBool(getBaseMapper().deleteBatchIds(list));
        }
    
        /**
         * 批量删除
         *
         * @param list    主键ID或实体列表
         * @param useFill 是否填充(为true的情况,会将入参转换实体进行delete删除)
         * @return 删除结果
         * @since 3.5.0
         */
        @Transactional(rollbackFor = Exception.class)
        default boolean removeByIds(Collection<?> list, boolean useFill) {
            if (CollectionUtils.isEmpty(list)) {
                return false;
            }
            if (useFill) {
                return removeBatchByIds(list, true);
            }
            return SqlHelper.retBool(getBaseMapper().deleteBatchIds(list));
        }
    
        /**
         * 批量删除(jdbc批量提交)
         *
         * @param list 主键ID或实体列表(主键ID类型必须与实体类型字段保持一致)
         * @return 删除结果
         * @since 3.5.0
         */
        @Transactional(rollbackFor = Exception.class)
        default boolean removeBatchByIds(Collection<?> list) {
            return removeBatchByIds(list, DEFAULT_BATCH_SIZE);
        }
    
        /**
         * 批量删除(jdbc批量提交)
         *
         * @param list    主键ID或实体列表(主键ID类型必须与实体类型字段保持一致)
         * @param useFill 是否启用填充(为true的情况,会将入参转换实体进行delete删除)
         * @return 删除结果
         * @since 3.5.0
         */
        @Transactional(rollbackFor = Exception.class)
        default boolean removeBatchByIds(Collection<?> list, boolean useFill) {
            return removeBatchByIds(list, DEFAULT_BATCH_SIZE, useFill);
        }
    
        /**
         * 批量删除(jdbc批量提交)
         *
         * @param list      主键ID或实体列表
         * @param batchSize 批次大小
         * @return 删除结果
         * @since 3.5.0
         */
        default boolean removeBatchByIds(Collection<?> list, int batchSize) {
            throw new UnsupportedOperationException("不支持的方法!");
        }
    
        /**
         * 批量删除(jdbc批量提交)
         *
         * @param list      主键ID或实体列表
         * @param batchSize 批次大小
         * @param useFill   是否启用填充(为true的情况,会将入参转换实体进行delete删除)
         * @return 删除结果
         * @since 3.5.0
         */
        default boolean removeBatchByIds(Collection<?> list, int batchSize, boolean useFill) {
            throw new UnsupportedOperationException("不支持的方法!");
        }
    
        /**
         * 根据 ID 选择修改
         *
         * @param entity 实体对象
         */
        default boolean updateById(T entity) {
            return SqlHelper.retBool(getBaseMapper().updateById(entity));
        }
    
        /**
         * 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
         *
         * @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper}
         */
        default boolean update(Wrapper<T> updateWrapper) {
            return update(null, updateWrapper);
        }
    
        /**
         * 根据 whereEntity 条件,更新记录
         *
         * @param entity        实体对象
         * @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper}
         */
        default boolean update(T entity, Wrapper<T> updateWrapper) {
            return SqlHelper.retBool(getBaseMapper().update(entity, updateWrapper));
        }
    
        /**
         * 根据ID 批量更新
         *
         * @param entityList 实体对象集合
         */
        @Transactional(rollbackFor = Exception.class)
        default boolean updateBatchById(Collection<T> entityList) {
            return updateBatchById(entityList, DEFAULT_BATCH_SIZE);
        }
    
        /**
         * 根据ID 批量更新
         *
         * @param entityList 实体对象集合
         * @param batchSize  更新批次数量
         */
        boolean updateBatchById(Collection<T> entityList, int batchSize);
    
        /**
         * TableId 注解存在更新记录,否插入一条记录
         *
         * @param entity 实体对象
         */
        boolean saveOrUpdate(T entity);
    
        /**
         * 根据 ID 查询
         *
         * @param id 主键ID
         */
        default T getById(Serializable id) {
            return getBaseMapper().selectById(id);
        }
    
        /**
         * 查询(根据ID 批量查询)
         *
         * @param idList 主键ID列表
         */
        default List<T> listByIds(Collection<? extends Serializable> idList) {
            return getBaseMapper().selectBatchIds(idList);
        }
    
        /**
         * 查询(根据 columnMap 条件)
         *
         * @param columnMap 表字段 map 对象
         */
        default List<T> listByMap(Map<String, Object> columnMap) {
            return getBaseMapper().selectByMap(columnMap);
        }
    
        /**
         * 根据 Wrapper,查询一条记录 <br/>
         * <p>结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")</p>
         *
         * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         */
        default T getOne(Wrapper<T> queryWrapper) {
            return getOne(queryWrapper, true);
        }
    
        /**
         * 根据 Wrapper,查询一条记录
         *
         * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         * @param throwEx      有多个 result 是否抛出异常
         */
        T getOne(Wrapper<T> queryWrapper, boolean throwEx);
    
        /**
         * 根据 Wrapper,查询一条记录
         *
         * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         */
        Map<String, Object> getMap(Wrapper<T> queryWrapper);
    
        /**
         * 根据 Wrapper,查询一条记录
         *
         * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         * @param mapper       转换函数
         */
        <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
    
        /**
         * 查询总记录数
         *
         * @see Wrappers#emptyWrapper()
         */
        default long count() {
            return count(Wrappers.emptyWrapper());
        }
    
        /**
         * 根据 Wrapper 条件,查询总记录数
         *
         * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         */
        default long count(Wrapper<T> queryWrapper) {
            return SqlHelper.retCount(getBaseMapper().selectCount(queryWrapper));
        }
    
        /**
         * 查询列表
         *
         * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         */
        default List<T> list(Wrapper<T> queryWrapper) {
            return getBaseMapper().selectList(queryWrapper);
        }
    
        /**
         * 查询所有
         *
         * @see Wrappers#emptyWrapper()
         */
        default List<T> list() {
            return list(Wrappers.emptyWrapper());
        }
    
        /**
         * 翻页查询
         *
         * @param page         翻页对象
         * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         */
        default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper) {
            return getBaseMapper().selectPage(page, queryWrapper);
        }
    
        /**
         * 无条件翻页查询
         *
         * @param page 翻页对象
         * @see Wrappers#emptyWrapper()
         */
        default <E extends IPage<T>> E page(E page) {
            return page(page, Wrappers.emptyWrapper());
        }
    
        /**
         * 查询列表
         *
         * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         */
        default List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper) {
            return getBaseMapper().selectMaps(queryWrapper);
        }
    
        /**
         * 查询所有列表
         *
         * @see Wrappers#emptyWrapper()
         */
        default List<Map<String, Object>> listMaps() {
            return listMaps(Wrappers.emptyWrapper());
        }
    
        /**
         * 查询全部记录
         */
        default List<Object> listObjs() {
            return listObjs(Function.identity());
        }
    
        /**
         * 查询全部记录
         *
         * @param mapper 转换函数
         */
        default <V> List<V> listObjs(Function<? super Object, V> mapper) {
            return listObjs(Wrappers.emptyWrapper(), mapper);
        }
    
        /**
         * 根据 Wrapper 条件,查询全部记录
         *
         * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         */
        default List<Object> listObjs(Wrapper<T> queryWrapper) {
            return listObjs(queryWrapper, Function.identity());
        }
    
        /**
         * 根据 Wrapper 条件,查询全部记录
         *
         * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         * @param mapper       转换函数
         */
        default <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper) {
            return getBaseMapper().selectObjs(queryWrapper).stream().filter(Objects::nonNull).map(mapper).collect(Collectors.toList());
        }
    
        /**
         * 翻页查询
         *
         * @param page         翻页对象
         * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
         */
        default <E extends IPage<Map<String, Object>>> E pageMaps(E page, Wrapper<T> queryWrapper) {
            return getBaseMapper().selectMapsPage(page, queryWrapper);
        }
    
        /**
         * 无条件翻页查询
         *
         * @param page 翻页对象
         * @see Wrappers#emptyWrapper()
         */
        default <E extends IPage<Map<String, Object>>> E pageMaps(E page) {
            return pageMaps(page, Wrappers.emptyWrapper());
        }
    
        /**
         * 获取对应 entity 的 BaseMapper
         *
         * @return BaseMapper
         */
        BaseMapper<T> getBaseMapper();
    
        /**
         * 获取 entity 的 class
         *
         * @return {@link Class<T>}
         */
        Class<T> getEntityClass();
    
        /**
         * 以下的方法使用介绍:
         *
         * 一. 名称介绍
         * 1. 方法名带有 query 的为对数据的查询操作, 方法名带有 update 的为对数据的修改操作
         * 2. 方法名带有 lambda 的为内部方法入参 column 支持函数式的
         * 二. 支持介绍
         *
         * 1. 方法名带有 query 的支持以 {@link ChainQuery} 内部的方法名结尾进行数据查询操作
         * 2. 方法名带有 update 的支持以 {@link ChainUpdate} 内部的方法名为结尾进行数据修改操作
         *
         * 三. 使用示例,只用不带 lambda 的方法各展示一个例子,其他类推
         * 1. 根据条件获取一条数据: `query().eq("column", value).one()`
         * 2. 根据条件删除一条数据: `update().eq("column", value).remove()`
         *
         */
    
        /**
         * 链式查询 普通
         *
         * @return QueryWrapper 的包装类
         */
        default QueryChainWrapper<T> query() {
            return ChainWrappers.queryChain(getBaseMapper());
        }
    
        /**
         * 链式查询 lambda 式
         * <p>注意:不支持 Kotlin </p>
         *
         * @return LambdaQueryWrapper 的包装类
         */
        default LambdaQueryChainWrapper<T> lambdaQuery() {
            return ChainWrappers.lambdaQueryChain(getBaseMapper());
        }
    
        /**
         * 链式查询 lambda 式
         * kotlin 使用
         *
         * @return KtQueryWrapper 的包装类
         */
        default KtQueryChainWrapper<T> ktQuery() {
            return ChainWrappers.ktQueryChain(getBaseMapper(), getEntityClass());
        }
    
        /**
         * 链式查询 lambda 式
         * kotlin 使用
         *
         * @return KtQueryWrapper 的包装类
         */
        default KtUpdateChainWrapper<T> ktUpdate() {
            return ChainWrappers.ktUpdateChain(getBaseMapper(), getEntityClass());
        }
    
        /**
         * 链式更改 普通
         *
         * @return UpdateWrapper 的包装类
         */
        default UpdateChainWrapper<T> update() {
            return ChainWrappers.updateChain(getBaseMapper());
        }
    
        /**
         * 链式更改 lambda 式
         * <p>注意:不支持 Kotlin </p>
         *
         * @return LambdaUpdateWrapper 的包装类
         */
        default LambdaUpdateChainWrapper<T> lambdaUpdate() {
            return ChainWrappers.lambdaUpdateChain(getBaseMapper());
        }
    
        /**
         * <p>
         * 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
         * 此次修改主要是减少了此项业务代码的代码量(存在性验证之后的saveOrUpdate操作)
         * </p>
         *
         * @param entity 实体对象
         */
        default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper) {
            return update(entity, updateWrapper) || saveOrUpdate(entity);
        }
    }
    

    IService有一个实现类:ServiceImpl

  • 自定义一个业务Service接口,继承IService

    public interface UserService extends IService<User>{
    
    }
    
    • 编写一个实现类,实现UserService接口,并继承ServiceImpl

      public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
      
      }
      
    • 这样既可以使用自定义的功能,也可以使用MybatisPlus提供的功能

#