携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
1.MyBatis Plus 增删改查操作案例
创建一个品牌操作的功能,实现增删改查,分别创建model
、mapper
、service
、controller
。
MyBatis Plus提供了很多的通用方法
mapper(接口)->extends BaseMapper【增删改查】
service(接口)->extends IService【增删改查】
serviceImpl->extends ServiceImpl【增删改查】
这点儿就比之前的MyBatis好很多,简单的sql语句不需要我们再去重复写了。
1.1Mapper创建
在mall-goods-service
创建com.xz.mall.goods.mapper.BrandMapper
接口,代码如下:
public interface BrandMapper extends BaseMapper<Brand> {
}
从继承的这个BaseMapper接口可以看到,它里面已经存在了很多常见的数据库操作方法,可以大幅提高开发速率
1.2Service创建
在mall-goods-service
创建com.xz.mall.goods.service.BrandService
接口,代码如下:
public interface BrandService extends IService<Brand> {
}
在mall-goods-service
创建com.xz.mall.goods.service.impl.BrandServiceImpl
实现类,代码如下:
@Service
public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements BrandService {
}
从继承的IService 和 ServiceImpl来看,里面已经创建好了很多常用的增删改查方法,这些足够我们来使用了,几乎不需要再写了
1.3增删改功能
增删改功能在IService
和ServiceImpl
中已经全部存在, 不需要额外添加方法,只需要在Controller调用即可。
在mall-goods-service
创建com.xz.mall.goods.controller.BrandController
,代码如下:
@RestController
@RequestMapping(value = "/brand")
public class BrandController {
@Autowired
private BrandService brandService;
/**
* 增加品牌
* @param brand
* @return
*/
@PostMapping
public RespResult add(@RequestBody Brand brand) {
brandService.save(brand);
return RespResult.ok();
}
/**
* 修改品牌
* @param brand
* @return
*/
@PutMapping
public RespResult update(@RequestBody Brand brand) {
brandService.updateById(brand);
return RespResult.ok();
}
/**
* 删除品牌
* @param brand
* @return
*/
@DeleteMapping("/{id}")
public RespResult delete(@PathVariable(value = "id") Integer id) {
brandService.removeById(id);
return RespResult.ok();
}
}
写好了,启动这个mall-goods-service
,进行postman测试
新增Brand 更新Brand 根据id删除Brand
1.4条件查询/分页查询
条件查询需要封装条件信息,MyBatis Plus提供了条件封装对象Wrapper
(它的子类QueryWrapper
可以直接使用),我们可以用它的子类QueryWrapper
实现封装查询条件。
1.4.1条件查询
在BrandService
中创建如下方法:
List<Brand> queryList(Brand brand);
在BrandServiceImpl
中创建条件查询方法实现(不要忘了注入brandMapper
):
@Autowired
private BrandMapper brandMapper;
/**
* 条件查询
* @param brand
* @return
*/
@Override
public List<Brand> queryList(Brand brand) {
//条件包装对象
QueryWrapper<Brand> queryWrapper = new QueryWrapper<>();
//根据name查询brand like模糊查询
queryWrapper.like("name", brand.getName());
//根据initial查询 eq等值查询
queryWrapper.eq("initial", brand.getInitial());
return brandMapper.selectList(queryWrapper);
}
在BrandController
中创建条件查询方法:
/**
* 条件查询
* @return
*/
@PostMapping(value = "/search")
public RespResult<List<Brand>> queryList(@RequestBody Brand brand) {
List<Brand> brands = brandService.queryList(brand);
return RespResult.ok(brands);
}
postman测试一下
1.4.2分页查询
在BrandService
中创建如下方法:
Page<Brand> queryPageList(Brand brand, Long currentPage, Long size);
在BrandServiceImpl
中创建条件查询方法实现(不要忘了注入brandMapper
):
/**
* 分页查询
* @param brand
* @param currentPage
* @param size
* @return
*/
@Override
public Page<Brand> queryPageList(Brand brand, Long currentPage, Long size) {
//条件包装对象
QueryWrapper<Brand> queryWrapper = new QueryWrapper<>();
//根据name查询brand like模糊查询
queryWrapper.like("name", brand.getName());
return brandMapper.selectPage(new Page<Brand>(currentPage, size),queryWrapper);
}
在BrandController
中创建条件查询方法:
/**
* 分页查询
* @param page
* @param size
* @param brand
* @return
*/
@PostMapping(value = "/search/{page}/{size}")
public RespResult<List<Brand>> queryList(
@PathVariable(value = "page") Long page,
@PathVariable(value = "size") Long size,
@RequestBody Brand brand) {
Page<Brand> brandPage = brandService.queryPageList(brand, page, size);
return RespResult.ok(brandPage);
}
注意要增加分页拦截器 在MallGoodsApplication
中创建分页拦截器Bean,代码如下:
/**
* 分页拦截器
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor pageInterceptor = new PaginationInterceptor();
//设置数据库类型
pageInterceptor.setDbType(DbType.MYSQL);
return pageInterceptor;
}
postman测试一下
总结:本篇主要讲述了一下MyBatis Plus的增删改查操作案例。