mybatisplus 增删改查

144 阅读1分钟

本文学习,mybatisplus的基本增删改查 ①BaseMapper ② IService/ServiecImpl ③ActiveRecord

xxx

BaseMapper

T为实体类。

public interface BaseMapper<T> extends Mapper<T> ;

select: image.png 主要都是对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);
}

image.png


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);
}