1.通用Service

说明:

  • 通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,

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

因此我们在使用的时候仅需在自己定义的**Service接口中继承IService接口,在自己的实现类中实现自己的Service并继承ServiceImpl**即可

  • 创建UserService并继承IService

    1
    2
    3
    4
    /**
    * UserService继承IService模板提供的基础功能
    */
    public interface UserService extends IService<User> {}
  • 创建UserService的实现类并继承ServiceImpl

    1
    2
    3
    4
    5
    6
    /**
    * ServiceImpl实现了IService,提供了IService中基础功能的实现
    * 若ServiceImpl无法满足业务需求,则可以使用自定的UserService定义方法,并在实现类中实现
    */
    @Service
    public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService{}

IService中的CRUD方法

  • 增加:Save、SaveOrUpdate

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // 插入一条记录(选择字段,策略插入)
    boolean save(T entity);
    // 插入(批量)
    boolean saveBatch(Collection<T> entityList);
    // 插入(批量)
    boolean saveBatch(Collection<T> entityList, int batchSize);

    // TableId 注解存在更新记录,否插入一条记录
    boolean saveOrUpdate(T entity);
    // 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
    boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
    // 批量修改插入
    boolean saveOrUpdateBatch(Collection<T> entityList);
    // 批量修改插入
    boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
  • 删除:Remove

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 根据 entity 条件,删除记录
    boolean remove(Wrapper<T> queryWrapper);
    // 根据 ID 删除
    boolean removeById(Serializable id);
    // 根据 columnMap 条件,删除记录
    // map格式 属性:值
    boolean removeByMap(Map<String, Object> columnMap);
    // 删除(根据ID 批量删除)
    boolean removeByIds(Collection<? extends Serializable> idList);
  • 修改:Update

    1
    2
    3
    4
    5
    6
    7
    8
    // 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
    boolean update(Wrapper<T> updateWrapper);
    // 根据 whereWrapper 条件,更新记录
    boolean update(T updateEntity, Wrapper<T> whereWrapper);
    // 根据 ID 选择修改
    boolean updateById(T entity);
    // 根据ID 批量更新
    boolean updateBatchById(Collection<T> entityList);
  • 查询:Get、List、Count

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // 根据 ID 查询
    T getById(Serializable id);
    // 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
    T getOne(Wrapper<T> queryWrapper);
    // 根据 Wrapper,查询一条记录
    Map<String, Object> getMap(Wrapper<T> queryWrapper);



    // 查询所有
    List<T> list();
    // 查询列表
    List<T> list(Wrapper<T> queryWrapper);
    // 查询(根据ID 批量查询)
    Collection<T> listByIds(Collection<? extends Serializable> idList);
    // 查询(根据 columnMap 条件)
    Collection<T> listByMap(Map<String, Object> columnMap);
    // 查询所有列表
    List<Map<String, Object>> listMaps();
    // 查询列表
    List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
    // 查询全部记录
    List<Object> listObjs();
    List<Object> listObjs(Wrapper<T> queryWrapper);


    // 查询总记录数
    int count();
    // 根据 Wrapper 条件,查询总记录数
    int count(Wrapper<T> queryWrapper);

2.BaseMapper<T>

BaseMapper中提供的CRUD方法:

  • 增加:Insert

    1
    2
    // 插入一条记录
    int insert(T entity);
  • 删除:Delete

    1
    2
    3
    4
    5
    6
    7
    8
    // 根据 entity 条件,删除记录
    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);
  • 修改:Update

    1
    2
    3
    4
    // 根据 whereWrapper 条件,更新记录
    int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper<T> whereWrapper);
    // 根据 ID 修改
    int updateById(@Param(Constants.ENTITY) T entity);
  • 查询:Select

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // 根据 ID 查询
    T selectById(Serializable id);
    // 根据 entity 条件,查询一条记录
    T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);


    // 查询(根据ID 批量查询)
    List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
    // 根据 entity 条件,查询全部记录
    List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    // 查询(根据 columnMap 条件)
    List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
    // 根据 Wrapper 条件,查询全部记录
    List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    // 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值
    List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);


    // 根据 entity 条件,查询全部记录(并翻页)
    IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    // 根据 Wrapper 条件,查询全部记录(并翻页)
    IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    // 根据 Wrapper 条件,查询总记录数
    Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

3.调用Mapper层实现CRUD

3.1 插入


最终执行的结果,所获取的id为1527206783590903810

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 测试插入一条数据
* MyBatis-Plus在实现插入数据时,会默认基于雪花算法的策略生成id
*/
@Test
public void testInsert(){
User user = new User();
user.setName("Vz");
user.setAge(21);
user.setEmail("vz@oz6.cn");
int result = userMapper.insert(user);
System.out.println(result > 0 ? "添加成功!" : "添加失败!");
System.out.println("受影响的行数为:" + result);
//1527206783590903810(当前 id 为雪花算法自动生成的id)
System.out.println("id自动获取" + user.getId());
}

3.2 删除


b、根据ID批量删除数据

调用方法:int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

1
2
3
4
5
6
7
8
9
/**
* 测试通过id批量删除数据
*/
@Test
public void testDeleteBatchIds(){
//主要是要求掌握arrays的asList
List<Long> ids = Arrays.asList(6L,7L,8L);
int result = userMapper.deleteBatchIds(ids);
}

c、根据Map条件删除数据

调用方法:int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 测试根据Map集合中所设置的条件删除数据
*/
@Test
public void testDeleteByMap(){
//当前演示为根据name和age删除数据
//执行SQL为:DELETE FROM user WHERE name = ? AND age = ?
Map<String,Object> map = new HashMap<>();
map.put("name","Vz");
map.put("age",21);
int result = userMapper.deleteByMap(map);
System.out.println(result > 0 ? "删除成功!" : "删除失败!");
System.out.println("受影响的行数为:" + result);
}

3.3 修改

调用方法:int updateById(@Param(Constants.ENTITY) T entity);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 测试根据id修改用户信息
*/
@Test
public void testUpdateById(){
//执行SQL为: UPDATE user SET name=?, age=?, email=? WHERE id=?
User user = new User();
user.setId(6L);
user.setName("VzUpdate");
user.setAge(18);
user.setEmail("Vz@sina.com");
int result = userMapper.updateById(user);

}

3.4 查询


a、根据ID查询用户信息

调用方法:T selectById(Serializable id);

1
2
3
4
5
6
7
8
/**
* 测试根据id查询用户数据
*/
@Test
public void testSelectById(){
User user = userMapper.selectById(1L);
System.out.println(user);
}