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也提供诸如selectById
、insert
等其他基础操作方法,使用方法与此类似。
二、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
等值查询、ge
、gt
等比较查询、in
、notIn
、like
等集合查询以及自定义SQL查询等等,十分方便实用。
四、mybatisplusiservice的自动填充机制
自动填充机制是mybatisplusiservice中的一项高级功能。使用这个机制,我们可以自动填充数据库中的某些字段,例如create_time
、update_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
注解标识了createTime
和updateTime
两个字段需要自动填充。填充方式分别是INSERT
和UPDATE
,表示创建时自动填充和更新时自动填充。
在编写Mapper时,我们只需要使用mybatisplusiservice提供的BaseMapper
接口,并在实体类中设置了@TableField
注解之后,就可以对以上标有@TableField
注解的字段进行自动填充。例如:
@Component
public interface UserMapper extends BaseMapper<User> { }
这样,我们就可以在数据库中自动填充createTime
和updateTime
两个字段了。
五、小结
mybatisplusiservice提供了多项方便实用的开发功能,包括基础的CRUD操作、分页查询、条件构造器和自动填充机制等。在实际开发中,使用mybatisplusiservice可以大幅提升开发效率,减少重复的代码编写,同时提供了很方便的扩展接口。