MyBatisPlus-IService接口


一、概述

MyBatisPlus中的IService接口提供了一种更加简洁、灵活和可扩展的方式来定义数据库操作方法,如果不使用MyBatisPlus不使用IService接口,Mapper层只继承BaseMapper可能会导致代码量增加、可维护性降低、可扩展性和灵活性下降等问题。

二、基本使用

自定义Service接口,继承IService接口,并指定泛型:

import com.baomidou.mybatisplus.extension.service.IService;
import com.ming.entity.User;

public interface IUserService extends IService<User> {
}

自定义Service的实现类,实现自定义接口,并且继承ServiceImpl类,第一个参数是对应的Mapper接口,第二个参数是对应的泛型:

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ming.Service.IUserService;
import com.ming.entity.User;
import com.ming.mapper.UserMapper;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}

单元测试:

import com.ming.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@Slf4j
@SpringBootTest
class IUserServiceTest {

    @Autowired
    private IUserService userService;

    /**
     * 插入数据
     */
    @Test
    public void testSaveUser() {
        User user = User.builder().name("汤姆").age(1000).gender(1).phone("18000000000").build();

        userService.save(user);
    }

    /**
     * 枚举【in】查询
     */
    @Test
    public void testQuery() {
        List<User> users = userService.listByIds(List.of(1L, 2L, 3L));
        log.info("查询结果:{}", users);
    }
}

注意:这里使用的时候不是在调用Mapper层去查询数据,而是调用继承了IService接口的自定义接口查询

三、进阶使用

在ServiceImpl实现类中完成对数据库表的CRUD操作,可以用于编写动态SQL

3.1 lambdaQuery

测试类

@Test
void testLambdaQuery() {
    User user = new User();
    user.setUsername("十");
    user.setBalance(10000);
    List<User> userList = userService.queryVegueByUser(user);
    userList.forEach(u->{
        System.out.println(u);
    });
}

Service接口

public interface IUserService extends IService<User> {

    /**
     * 根据复杂条件查询用户信息
     * @param user
     * @return
     */
    List<User> queryVegueByUser(User user);
}

ServiceImpl实现类

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    /**
     * 根据复杂条件查询用户信息
     *
     * @param user
     * @return
     */
    @Override
    public List<User> queryVegueByUser(User user) {
        List<User> userList = lambdaQuery().like(user.getUsername() != null, User::getUsername, user.getUsername())
                .eq(user.getBalance() != null, User::getBalance, user.getBalance()).list();
        return userList;
    }
}

3.2 lambdaUpdate

测试类

@Test
void testLambdaUpdate() {
    User user = User.builder().id(1).username("张三").balance(100).build();
    userService.updateUserById(user);
}

Service接口

public interface IUserService extends IService<User> {
    /**
     * 根据复杂条件修改用户信息
     *
     * @param user
     */
    void updateUserById(User user);
}

ServiceImpl实现类

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    /**
     * 根据复杂条件修改用户信息
     *
     * @param user
     */
    @Override
    public void updateUserById(User user) {
        lambdaUpdate()
                .set(user.getUsername() != null, User::getUsername, user.getUsername())
                .set(user.getBalance() != null, User::getBalance, user.getBalance())
                .eq(User::getId, user.getId())
                .update();
    }
}

注意:执行修改语句的时候,最后一定要增加update()修改的方法才会执行。
上面的语句相当于:UPDATE user SET username=?,balance=? WHERE (id = ?)

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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框架的扩展实现,它提供了一系列常用的操作方法,其中包括了iservice。iservice是Mybatis 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
发出的红包

打赏作者

Monly21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值