SpringBoot整合通用tk.mapper增删改查+PageHelper分页
发布日期:2021-06-29 18:10:39 浏览次数:2 分类:技术文章

本文共 11930 字,大约阅读时间需要 39 分钟。

1. Pom.xml 依赖

tk.mybatis
mapper-spring-boot-starter
2.0.2
javax.persistence
persistence-api
1.0
compile
io.springfox
springfox-swagger2
2.6.1
io.springfox
springfox-swagger-ui
2.6.1

通用Mapper 不需要在application.yaml 配置文件中配置mybatis 相关配置信息!

2. Brand品牌实体类

我这里做一个Brand对象相关的增删改!

/** * @Auther: csp1999 * @Date: 2020/12/24/9:26 * @Description: Brand 品牌实体类 */@ApiModel(description = "Brand", value = "Brand")@Table(name = "tb_brand")public class Brand implements Serializable {
/** * 品牌id */ @ApiModelProperty(value = "品牌id", required = false) @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; /** * 品牌名称 */ @ApiModelProperty(value = "品牌名称", required = false) @Column(name = "name") private String name; /** * 品牌图片地址 */ @ApiModelProperty(value = "品牌图片地址", required = false) @Column(name = "image") private String image; /** * 品牌的首字母 */ @ApiModelProperty(value = "品牌的首字母", required = false) @Column(name = "letter") private String letter; /** * 排序 */ @ApiModelProperty(value = "排序", required = false) @Column(name = "seq") private Integer seq; /* setter/getter 方法略 */}

3. 实现通用Mapper接口

/** * @Auther: csp1999 * @Date: 2020/12/24/17:15 * @Description: 品牌Brand 相关 Mapper */@Repositorypublic interface BrandMapper extends Mapper
{
}

4. Service接口

** * @Auther: csp1999 * @Date: 2020/12/24/17:18 * @Description: 品牌Brand 相关 Service 接口 */public interface BrandService {
/** * 查询所有品牌信息 * * @return */ List
findAll(); /** * 根据品牌信息多条件搜索 * * @param brand * @return */ List
search(Brand brand); /** * 根据id查询品牌信息 * * @param id * @return */ Brand findById(Integer id); /** * 新增品牌 * * @param brand */ void addBrand(Brand brand); /** * 根据id修改品牌 * * @param brand */ void updateBrand(Brand brand); /** * 根据id 删除品牌 * * @param id */ void deleteBrand(Integer id);}

5. Service接口实现类调用

/** * @Auther: csp1999 * @Date: 2020/12/24/17:18 * @Description: 品牌Brand 相关 Service 实现类 */@Servicepublic class BrandServiceImpl implements BrandService {
@Autowired private BrandMapper brandMapper; /** * 查询所有品牌信息 * * @return */ @Override public List
findAll() {
return brandMapper.selectAll(); } /** * 根据品牌信息多条件搜索 * * @param brand * @return */ @Override public List
search(Brand brand) {
// 自定义条件搜索对象 Example Example example = new Example(Brand.class); // 根据条件搜索对象 example 创建条件构造器 Example.Criteria criteria = example.createCriteria(); // brand 不为空时 if (brand != null) {
// brand.name != null 根据品牌名称模糊搜索: // SELECT * FROM tb_brand WHERE name LIKE "%歪比巴卜%" if (!StringUtils.isEmpty(brand.getName())) {
/* * 1.Brand对象的成员属性名 * 2.占位符参数,搜索的条件 */ criteria.andLike("name", "%" + brand.getName() + "%"); } // brand.letter != null 根据品牌首字母搜索 // SELECT * FROM tb_brand WHERE name LIKE "%歪比巴卜%" AND letter = 'W' if (!StringUtils.isEmpty(brand.getLetter())){
criteria.andEqualTo("letter",brand.getLetter()); } } // 执行根据自定义搜索对象查询 return brandMapper.selectByExample(example); } /** * 根据注解id查询品牌信息 * * @param id * @return */ @Override public Brand findById(Integer id) {
return brandMapper.selectByPrimaryKey(id); } /** * 新增品牌 * * @param brand */ @Override public void addBrand(Brand brand) {
/* * insertSelective 和 insert方法的区别: * * 前者会根据参数对象的属性是否为空来拼接sql 语句, * 即,如果为空的属性字段不会被拼接到sql语句的values中 * * 同理:updateSelective 和 update 也是这个区别关系! */ brandMapper.insertSelective(brand); } /** * 根据id修改品牌 * * @param brand */ @Override public void updateBrand(Brand brand) {
// 根据主键更新属性不为null的值 brandMapper.updateByPrimaryKeySelective(brand); } /** * 根据id删除品牌 * * @param id */ @Override public void deleteBrand(Integer id) {
brandMapper.deleteByPrimaryKey(id); }}

6. Controller调用

在前后端分离中,一般都是以JSON格式进行数据交互,所以先封装一个数据返回给前端的Result对象:

Result

/** * @Auther: csp1999 * @Date: 2020/12/24/9:26 * @Description: 封装返回结果的类,用于微服务返回结果给前端 */@ApiModel(description = "Result", value = "Result")public class Result
{
/** * 是否成功:true操作成功/false操作失败 */ @ApiModelProperty(value = "执行是否成功,true:成功,false:失败", required = true) private boolean flag; /** * 返回状态码 */ @ApiModelProperty(value = "返回状态码,20000:成功,20001:失败,20002:用户名或密码错误,20003:权限不足,20004:远程调用失败,20005:重复操作,20006:没有对应的数据", required = true) private Integer code; /** * 返回消息内容 */ @ApiModelProperty(value = "提示信息", required = true) private String message; /** * 返回数据 */ @ApiModelProperty(value = "逻辑数据", required = true) private T data; public Result(boolean flag, Integer code, String message, Object data) {
this.flag = flag; this.code = code;// 状态码可以自己定义 this.message = message; this.data = (T) data; } public Result(boolean flag, Integer code, String message) {
this.flag = flag; this.code = code;// 状态码可以自己定义 this.message = message; } public Result() {
this.flag = true; this.code = StatusCode.OK;// 状态码可以自己定义 this.message = "操作成功!"; } /* setter/getter方法略 */}

BrandController

/** * @Auther: csp1999 * @Date: 2020/12/24/17:26 * @Description: 品牌Brand 相关 Controller */@RestController@RequestMapping(value = "/brand")@CrossOrigin // 跨域注解public class BrandController {
@Autowired private BrandService brandService; /** * 查询所有品牌信息 * * @return */ @GetMapping("/brandList") public Result
> findAll() {
// 查询所有品牌信息 List
brandList = brandService.findAll(); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result
>(true, StatusCode.OK, "查询品牌集合成功!", brandList); } /** * 根据条件搜索品牌集合 * * @param brand * @return */ @PostMapping("/search") public Result
> search(@RequestBody Brand brand) { // 调用service 实现查询 List
brandList = brandService.search(brand); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result
>(true, StatusCode.OK, "根据条件搜索品牌集合成功!", brandList); } /** * 根据id查询品牌信息 * * @param id * @return */ @GetMapping("/{id}") public Result
findById(@PathVariable(value = "id") Integer id) { // 根据id查询brand Brand brand = brandService.findById(id); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result
(true, StatusCode.OK, "根据id:" + id + "查询品牌成功!", brand); } /** * 增加品牌数据 * * @param brand */ @PostMapping("/addBrand") public Result addBrand(@RequestBody Brand brand) { // 新增品牌 brandService.addBrand(brand); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result(true, StatusCode.OK, "品牌新增成功!"); } /** * 根据品牌id修改品牌数据 * * @param id * @param brand * @return */ @PutMapping("/updateBrand/{id}") public Result updateBrand(@PathVariable(value = "id") Integer id, @RequestBody Brand brand) { // 将id赋值给brand brand.setId(id); // 调用service实现类 brandService.updateBrand(brand); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result(true, StatusCode.OK, "id为:" + id + "的品牌修改成功!"); } /** * 根据id删除品牌 * * @param id * @return */ @DeleteMapping("/deleteBrand/{id}") public Result deleteBrand(@PathVariable(value = "id") Integer id) { // 调用service实现删除 brandService.deleteBrand(id); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result(true, StatusCode.OK, "id为:" + id + "的品牌删除成功!"); }}

7. 扩展: PageHelper 分页查询

分页查询

service 接口

/** * 分页查询品牌集合 * * @param currentPage * @param pageSize * @return */PageInfo
findAllByPage(Integer currentPage, Integer pageSize);

service 接口实现类

/** * 分页查询品牌集合 * * @param currentPage * @param pageSize * @return */@Overridepublic PageInfo
findAllByPage(Integer currentPage, Integer pageSize) {
/* * 分页实现相关参数:PageHelper.startPage(currentPage,pageSize); 之后紧跟Brand对象集合的查询 * 1.当前页 * 2.每页多少条记录 */ PageHelper.startPage(currentPage, pageSize); // 查询brandList集合 List
brandList = brandMapper.selectAll(); // 封装PageInfo 对象 PageInfo
pageInfo = new PageInfo<>(brandList); return pageInfo;}

controller

/** * 分页查询品牌集合 * * @param currentPage 当前页 * @param pageSize    每页总记录数 * @return */@GetMapping("/brandList/{currentPage}/{pageSize}")public Result
> findAllByPage(@PathVariable(value = "currentPage") Integer currentPage, @PathVariable(value = "pageSize") Integer pageSize) {
// 调用service实现分页查询 PageInfo
pageInfo = brandService.findAllByPage(currentPage, pageSize); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result
>(true, StatusCode.OK, "分页查询品牌集合成功!", pageInfo);}

分页 + 多条件搜索

service 接口

/** * 分页 + 多条件搜索 * @param brand * @param currentPage * @param pageSize * @return */PageInfo
searchByPage(Brand brand,Integer currentPage, Integer pageSize);

service 接口实现类

/** * 分页 + 多条件搜索 * * @param brand * @param currentPage * @param pageSize * @return */@Overridepublic PageInfo
searchByPage(Brand brand, Integer currentPage, Integer pageSize) {
// 1.分页: PageHelper.startPage(currentPage, pageSize); // 2.搜索数据: Example brandExample = this.getBrandExample(brand); List
brandList = brandMapper.selectByExample(brandExample); // 3.封装返回PageInfo: PageInfo
pageInfo = new PageInfo<>(brandList); return pageInfo;}// 多条件品牌查询Example 构建的方法private Example getBrandExample(Brand brand) {
// 自定义条件搜索对象 Example Example example = new Example(Brand.class); // 根据条件搜索对象 example 创建条件构造器 Example.Criteria criteria = example.createCriteria(); // brand 不为空时 if (brand != null) {
// brand.name != null 根据品牌名称模糊搜索: // SELECT * FROM tb_brand WHERE name LIKE "%歪比巴卜%" if (!StringUtils.isEmpty(brand.getName())) {
/* * 1.Brand对象的成员属性名 * 2.占位符参数,搜索的条件 */ criteria.andLike("name", "%" + brand.getName() + "%"); } // brand.letter != null 根据品牌首字母搜索 // SELECT * FROM tb_brand WHERE name LIKE "%歪比巴卜%" AND letter = 'W' if (!StringUtils.isEmpty(brand.getLetter())) {
criteria.andEqualTo("letter", brand.getLetter()); } } return example;}

controller

/** * 分页 + 多条件搜索品牌集合 * * @param brand * @param currentPage * @param pageSize * @return */@PostMapping("/search/{currentPage}/{pageSize}")public Result
> findAllByPage(@RequestBody Brand brand, @PathVariable(value = "currentPage") Integer currentPage, @PathVariable(value = "pageSize") Integer pageSize) {
// 调用service实现分页查询 PageInfo
pageInfo = brandService.searchByPage(brand, currentPage, pageSize); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result
>(true, StatusCode.OK, "分页+多条件搜索品牌集合成功!", pageInfo);}

如果文字对您有帮助!请点赞支持一下!

转载地址:https://csp1999.blog.csdn.net/article/details/111674929 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JDK集合源码之LinkedHashMap解析
下一篇:大三上学期就要结束了,为下学期找实习,立个Flag!

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月12日 23时31分21秒