深入解析mybatisplusiservice

发布时间:2023-05-22

mybatisplusiservice是一个为了简化开发的Mybatis-plus的扩展服务,它提供了很多常用的CRUD方法,使得开发者不必写重复的代码,而且还可以方便地进行分页操作。本文将从以下几个方面逐一深入探究mybatisplusiservice。

一、mybatisplusiservice的基本使用

使用mybatisplusiservice非常简单,只需要在Service层中继承IService接口即可。例如:

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

这里UserService继承ServiceImpl实现了IUserService接口,并指定了实体类User和Mapper类UserMapper。此时,UserService类即继承了mybatisplusiservice的所有方法。 我们来看一个简单的示例代码:

@Service 
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
    @Autowired 
    UserMapper userMapper;
    public List<User> selectAll() {
        return userMapper.selectList(null);
    }
}

可以发现,selectList是mybatisplusiservice中提供的方法之一,它可以非常方便地实现基础查询操作,而且不用写SQL,只需要传入null即可返回所有实体。当然,mybatisplusiservice也提供诸如selectByIdinsert等其他基础操作方法,使用方法与此类似。

二、mybatisplusiservice的分页操作

分页是一个常见的操作需求,mybatisplusiservice也为我们提供了很方便的分页API。以Service层的查询方法为例:

public IPage<User> selectPage(Page<User> page) {
    return userMapper.selectPage(page, null);
}

在这个方法中,我们使用了mybatisplusiservice提供的selectPage分页方法,并传入了分页查询的参数Page实例。Page实例中包含了分页参数和排序参数,直接传入mapper即可实现分页查询。 而在调用分页查询方法时,我们只需要根据需求设置Page实例中的参数即可。例如:

Page<User> page = new Page<>();
page.setCurrent(1); // 当前页
page.setSize(20); // 每页大小
page.setDesc("create_time"); // 按照创建时间降序排列
IPage<User> userIPage = userService.selectPage(page);
List<User> users = userIPage.getRecords();

这样,我们就可以得到第一页20条数据,并按照创建时间降序排列。

三、mybatisplusiservice的条件构造器

条件构造器是mybatisplusiservice中非常重要的一部分。它可以帮助我们根据实体类字段直接构造查询条件,避免手写SQL,从而提高开发效率。 以查询指定时间区间内创建的用户为例:

public List<User> selectByCreateTimeBetween(LocalDateTime start, LocalDateTime end) {
    LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
    wrapper.between(User::getCreateTime, start, end);
    return userMapper.selectList(wrapper);
}

在这个方法中,我们使用了LambdaQueryWrapper构造器来构造查询条件。between方法的第一个参数是User实体类中的属性,第二个和第三个参数分别是时间区间的开始和结束时间。而selectList方法则是mybatisplusiservice提供的查询方法,它接收一个前面构造的LambdaQueryWrapper构造器作为参数。 其中,LambdaQueryWrapper构造器提供了大量的操作方法,例如eq等值查询、gegt等比较查询、innotInlike等集合查询以及自定义SQL查询等等,十分方便实用。

四、mybatisplusiservice的自动填充机制

自动填充机制是mybatisplusiservice中的一项高级功能。使用这个机制,我们可以自动填充数据库中的某些字段,例如create_timeupdate_time,而不需要手动设置。 首先,在实体类中使用mybatisplusiservice的注解@TableField标注需要自动填充的字段,例如:

@Data 
@TableName("tbl_user") 
public class User {
    @TableId(type = IdType.AUTO) 
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @TableField(fill = FieldFill.INSERT) 
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.UPDATE) 
    private LocalDateTime updateTime;
}

在这个示例代码中,我们使用@TableField注解标识了createTimeupdateTime两个字段需要自动填充。填充方式分别是INSERTUPDATE,表示创建时自动填充和更新时自动填充。 在编写Mapper时,我们只需要使用mybatisplusiservice提供的BaseMapper接口,并在实体类中设置了@TableField注解之后,就可以对以上标有@TableField注解的字段进行自动填充。例如:

@Component 
public interface UserMapper extends BaseMapper<User> { }

这样,我们就可以在数据库中自动填充createTimeupdateTime两个字段了。

五、小结

mybatisplusiservice提供了多项方便实用的开发功能,包括基础的CRUD操作、分页查询、条件构造器和自动填充机制等。在实际开发中,使用mybatisplusiservice可以大幅提升开发效率,减少重复的代码编写,同时提供了很方便的扩展接口。