本文学习,mybatisplus的基本增删改查 ①BaseMapper ② IService/ServiecImpl ③ActiveRecord
BaseMapper
T为实体类。
public interface BaseMapper<T> extends Mapper<T> ;
select:
主要都是对QueryWrapper的构建。
例子:查询姓名like于,并且id大于1的。
@Autowired
UserMapper userMapper;
@Test
public void test01(){
QueryWrapper<UserEntity> wrapper = new QueryWrapper<>();
wrapper.like("name","于").and((queryWrapper)->{
queryWrapper.gt("id",1L);
});
List<UserEntity> userEntities = userMapper.selectList(wrapper);
userEntities.forEach(System.out::println);
}
IService & ServiceImpl
IService接口定义了对实体的crud操作,旨在对mapper进行封装,并且定义了一些以实现的default方法。T为实体。
public interface IService<T> ;
ServiceImpl实现了IService,我们写srevice继承它。这个类注入了BaseMapper也就是M,可在子类直接使用。
public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> ;
使用:
UserMapper.class
@Repository
public interface UserMapper extends BaseMapper<UserEntity> {}
UserService.class
public interface UserService extends IService<UserEntity> {}
UserServiceImpl.class
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements UserService {}
测试:
@Autowired
UserService userService;
@Test
public void test01() {
List<UserEntity> list1 = userService.list();
list1.forEach(System.out::println);
QueryWrapper<UserEntity> wrapper = new QueryWrapper<>();
wrapper.like("name", "于").and((queryWrapper) -> {
queryWrapper.gt("id", 1L);
});
List<UserEntity> list2 = userService.list(wrapper);
list2.forEach(System.out::println);
}
其实都一样,只不过是对BaseMapper进行封装。
ActiveRecord模式
- 实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 需要项目中已注入对应实体的BaseMapper
- 适用于单表操作,一张表对应一个实体,且字段一般严格映射
- 业务简单、直观、简洁
其实我们点开源码简单浏览,BaseMapper和Model都是借助于SqlHelper和SqlMethod来进行sql拼接最后交由statement处理。
使用:
实体类继承Model ,Model已经实现序列化接口。
@TableName("user")
@ApiModel(value = "UserEntity对象", description = "")
public class UserEntity extends Model<UserEntity>
Model里几乎封装了所有对单个实体的CRUD操作。 测试:
@Autowired
UserEntity userEntity;
@Test
public void test() {
QueryWrapper<UserEntity> wrapper = new QueryWrapper<>();
wrapper.like("name", "于");
List<UserEntity> userEntities = userEntity.selectList(wrapper);
userEntities.forEach(System.out::println);
}