MyBatisPlus:IService的用法

💥 该系列属于【SpringBoot基础】专栏,如您需查看其他SpringBoot相关文章,请您点击左边的连接

目录

一、IService简介

二、项目准备 

1. IService代码自动生成

(1)下载插件

(2)配置数据库

(3)代码生成

(4)项目结构

(5)初始文件

2. 数据库准备

三、基本操作

1. 增加用户save

2. 根据id删除用户removeById

3. 根据id查询用户getById

4. 根据ids批量查询用户listByIds

5. 根据id修改用户updateById

6. 条件查询list

7. 条件更新update

8. 条件分页查询page


一、IService简介

MyBatisPlus 中提供了一个非常重要的接口 IService 以及其实现类 ServiceImpl,它们为业务层 service 的开发带来了许多便利。以下是 MyBatis-Plus 中 IService 的优势:

  1. CRUD 接口封装:IService 提供了丰富的 CRUD 接口,开发者不需要再手动编写这些基础接口的实现,可以大大减少开发量。

  2. 批量操作:IService 支持批量插入、更新、删除等操作,简化了数据库的批量处理。

  3. 分页查询:内置了分页插件,通过简单的配置即可实现物理分页,避免了编写复杂分页逻辑。

二、项目准备 

1. IService代码自动生成

(1)下载插件

(2)配置数据库

点击Config Database

 dbUrl改成jdbc:mysql://localhost:3306/your_database_name?&serverTimezone=Asia/Shanghai,然后点击OK

(3)代码生成

点击Code Generator

继续点击Code Generator,生成的项目结构如下。

(4)项目结构

(5)初始文件

① pojo
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    private String username;

    private String password;

    private String phone;

    private String info;

    private Integer status;

    private Integer balance;

    private LocalDateTime createTime;

    private LocalDateTime updateTime;


}
② controller
@RestController
@RequiredArgsConstructor
public class UserController {
    private final IUserService userService; //将userService注入
}
③ service
public interface IUserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}
④ mapper
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

2. 数据库准备

三、基本操作

1. 增加用户save

(1)controller

    @RequestMapping("/saveUser")
    public void saveUser() {
        User user = new User();
        user.setId(6L);
        user.setUsername("Lucy");
        user.setPassword("123");
        user.setPhone("18688990011");
        user.setBalance(200);
        user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
        user.setCreateTime(LocalDateTime.now());
        user.setUpdateTime(LocalDateTime.now());
        userService.save(user);
    }

(2)测试

2. 根据id删除用户removeById

(1)controller

    @RequestMapping("/deleteById")
    public void deleteById() {
        userService.removeById(6L);
    }

(2)测试

3. 根据id查询用户getById

(1)controller

    @RequestMapping("/getById")
    public User getById() {
        return userService.getById(6L);
    }

(2)测试

4. 根据ids批量查询用户listByIds

(1)controller

    @RequestMapping("/listByIds")
    public List<User> listByIds() {
        List<Long> ids = List.of(6L, 7L, 8L);
        return userService.listByIds(ids);
    }

(2)测试

数据库:

测试结果: 

5. 根据id修改用户updateById

(1)controller

    @RequestMapping("/updateById")
    public void updateById() {
        User user = new User();
        user.setId(6L); // 假设我们要更新ID为6的用户
        user.setUsername("LucyUpdated");
        userService.updateById(user);
    }

(2)测试

6. 条件查询list

数据库:

模糊查询名字带有c的,且balance大于100的user,只查询id,balance和update_time

(1)controller

可以使用queryWrapper,也可以用lambdaQueryWrapper,这里演示lambdaQueryWrapper。

    @RequestMapping("/queryUsersWithCondition")
    public List<User> queryUsersWithCondition() {
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(User::getUsername, "c")
                .gt(User::getBalance, 100)
                .select(User::getId, User::getBalance, User::getUpdateTime);

        return userService.list(queryWrapper);
    }

(2)测试

7. 条件更新update

模糊查询名字带有c的,把他们的balance更新为2000

(1)controller

可以使用updateWrapper,也可以用lambdaUpdateWrapper,这里演示updateWrapper。

    @RequestMapping("/updateWrapper")
    public String updateWrapper() {
        User user = new User();
        user.setBalance(2000);
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<User>()
                .like("username", "c");
        userService.update(user, updateWrapper);
        return "OK";
    }

(2)测试

8. 条件分页查询page

查询balance>1500的用户,查询第1页,每页5个结果

(1)分页查询配置文件MyBatisPlusConfig

记住一定要配置mybatisplus的分页查询插件,否则无法查询成功

@Configuration
public class MyBatisPlusConfig {
    /**
     * 配置分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 1. 创建分页插件
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        paginationInnerInterceptor.setMaxLimit(1000L); // 查询上限是1000
        // 2. 添加分页插件
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }
}

(2)controller

    @RequestMapping("/page")
    public HashMap<String, Object> page() {
        Page<User> page = new Page<>(1, 5);
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.gt(User::getBalance, 1500);
        Page<User> p = userService.page(page, queryWrapper);
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("total", p.getTotal());       //总条数
        hashMap.put("pages", p.getPages());       //总页数
        hashMap.put("pageNumber", p.getCurrent());//当前页
        hashMap.put("users", p.getRecords());     //查询到的记录
        return hashMap;
    }

(3)测试

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MybatisPlus是一个开源的Java持久化框架,它是对Mybatis的增强和完善,提供了很多方便开发的功能。其中iservice方法是指为实现常见的CRUD操作提供基本的服务类。 iservice方法的实现原理是基于MybatisPlus的Mapper接口进行CRUD操作,该接口继承了基本的CURD操作,即增、删、改、查。在业务层开发中,我们可以使用继承iservice或其子接口的方式轻松的实现CURD操作。 iservice方法的使用非常灵活,它提供两种方式实现CURD操作:①继承iservice方法;②自定义方法。 继承iservice方式:我们可以定义一个继承iservice接口的服务类,该类会拥有iservice的全部增、删、改、查方法,可以通过编写实体类的属性名称、条件查询等参数获取相应的数据。 自定义方法方式:我们也可以在继承iservice接口的基础上,自定义操作方法,实现一些特殊的业务逻辑处理,例如根据自定义条件查询获取数据,或者执行多表关联查询等操作。 总之,iservice方法是MybatisPlus提供的方便开发的一种基本服务类,通过继承iservice,我们可以轻松实现CRUD操作,进而大大提升了业务开发的效率和质量。 ### 回答2: MybatisPlus是基于Mybatis的增强工具,旨在简化MyBatis的使用流程。其中,MybatisPlus提供了IServiceservice类来实现通用的CRUD操作。 IServiceservice中包含了大量基础方法,如新增、修改、删除、查询、批量新增等功能。接下来,我们逐一介绍这些方法的使用。 1. 新增 IServiceservice提供了save(T entity)方法,即通过传入实体类对象进行新增操作。完整的代码如下: ``` @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserMapper userDao; @Override public boolean addUser(User user) { return userDao.insert(user) > 0; } } ``` 2. 修改 IServiceservice提供了updateById(T entity)方法,即通过传入实体类对象进行修改操作。完整的代码如下: ``` @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserMapper userDao; @Override public boolean updateUser(User user) { return userDao.updateById(user) > 0; } } ``` 3. 删除 IServiceservice提供了removeById(Serializable id)方法和remove(Wrapper<T> queryWrapper)方法,分别用于根据id和条件进行删除操作。完整的代码如下: ``` @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserMapper userDao; @Override public boolean deleteUserById(Long id) { return userDao.deleteById(id) > 0; } @Override public boolean deleteUsers(Wrapper<User> wrapper) { return userDao.delete(wrapper) > 0; } } ``` 4. 查询 IServiceservice提供了几种查询方法,如getById(Serializable id)方法、list(Wrapper<T> queryWrapper)方法、listByIds(Collection<? extends Serializable> idList)方法和page(IPage<T> page)方法等。完整的代码如下: ``` @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserMapper userDao; @Override public User getUserById(Long id) { return userDao.selectById(id); } @Override public List<User> getUsers(Wrapper<User> wrapper) { return userDao.selectList(wrapper); } @Override public List<User> getUsersByIds(List<Long> ids) { return userDao.selectBatchIds(ids); } @Override public IPage<User> getUsersPage(IPage<User> page) { return userDao.selectPage(page, null); } } ``` 5. 批量新增 IServiceservice提供了saveBatch(Collection<T> entityList)方法和saveOrUpdateBatch(Collection<T> entityList)方法,分别用于批量新增和批量新增或者修改。完整的代码如下: ``` @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserMapper userDao; @Override public boolean addUsers(List<User> userList) { return userDao.insertBatchSomeColumn(userList) > 0; } @Override public boolean saveOrUpdateUsers(List<User> userList) { return userDao.insertOrUpdateBatch(userList) > 0; } } ``` 以上就是IServiceservice方法的介绍。IServiceservice可以帮助我们简化Mybatis的操作,使得我们可以更加快捷地完成一系列的CRUD操作。 ### 回答3: Mybatis plus是基于Mybatis框架的扩展实现,它提供了一系列常用的操作方法,其中包括了iserviceiserviceMybatis plus提供的一个封装了常用的增删改查操作的接口。iservice接口实现了常用的数据访问方法,并提供了方便的CRUD操作以及多种条件查询的接口。 iservice提供了以下方法: 1. save:用于数据的添加或更新操作,如果数据已存在就进行更新,如果数据不存在就进行添加。 2. getById:根据主键ID查询对应的记录,返回实体类对象。 3. removeById:根据主键ID删除对应的记录。 4. updateById:根据主键ID更新对应记录的属性值。 5. list:获取所有记录,返回实体类对象列表。 6. page:分页查询数据,返回分页结果对象,支持排序和条件查询。 7. count:统计符合条件的记录数。 iservice接口的实现类可以继承它,并通过继承它的方法进行数据库操作。iservice的接口方法提供了基本的增删改查接口,通过其他工具类和Mybatis plus提供的方法,可以轻松地进行复杂的数据库操作。 iservice方法是Mybatis plus中对于通用方法的封装,提供了便捷、易用、高效的数据访问方式。它的使用可以有效地提高开发效率,降低代码复杂度,极大地加快了开发效率和系统性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值