SpringBoot整合通用tk.mapper增删改查+PageHelper分页
【摘要】 1. Pom.xml 依赖
<!--通用mapper起步依赖-->
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
<dependency> <groupId>tk.mybatis</groupId&...
1. Pom.xml 依赖
<!--通用mapper起步依赖-->
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.2</version>
</dependency>
<!--jpa相关依赖包,每个Pojo,都需要用到该包对应的注解-->
<dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> <scope>compile</scope>
</dependency>
<!--swagger文档-->
<!-- http://localhost:9011/swagger-ui.html -->
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version>
</dependency>
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
通用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 方法略 */
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
3. 实现通用Mapper接口
/**
* @Auther: csp1999
* @Date: 2020/12/24/17:15
* @Description: 品牌Brand 相关 Mapper
*/
@Repository
public interface BrandMapper extends Mapper<Brand> {
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4. Service接口
**
* @Auther: csp1999
* @Date: 2020/12/24/17:18
* @Description: 品牌Brand 相关 Service 接口
*/
public interface BrandService { /** * 查询所有品牌信息 * * @return */ List<Brand> findAll(); /** * 根据品牌信息多条件搜索 * * @param brand * @return */ List<Brand> 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);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
5. Service接口实现类调用
/**
* @Auther: csp1999
* @Date: 2020/12/24/17:18
* @Description: 品牌Brand 相关 Service 实现类
*/
@Service
public class BrandServiceImpl implements BrandService { @Autowired private BrandMapper brandMapper; /** * 查询所有品牌信息 * * @return */ @Override public List<Brand> findAll() { return brandMapper.selectAll(); } /** * 根据品牌信息多条件搜索 * * @param brand * @return */ @Override public List<Brand> 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); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
6. Controller调用
在前后端分离中,一般都是以JSON格式进行数据交互,所以先封装一个数据返回给前端的Result对象:
Result
/**
* @Auther: csp1999
* @Date: 2020/12/24/9:26
* @Description: 封装返回结果的类,用于微服务返回结果给前端
*/
@ApiModel(description = "Result", value = "Result")
public class Result<T> { /** * 是否成功: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方法略 */
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
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<List<Brand>> findAll() { // 查询所有品牌信息 List<Brand> brandList = brandService.findAll(); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result<List<Brand>>(true, StatusCode.OK, "查询品牌集合成功!", brandList); } /** * 根据条件搜索品牌集合 * * @param brand * @return */ @PostMapping("/search") public Result<List<Brand>> search(@RequestBody Brand brand) { // 调用service 实现查询 List<Brand> brandList = brandService.search(brand); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result<List<Brand>>(true, StatusCode.OK, "根据条件搜索品牌集合成功!", brandList); } /** * 根据id查询品牌信息 * * @param id * @return */ @GetMapping("/{id}") public Result<Brand> findById(@PathVariable(value = "id") Integer id) { // 根据id查询brand Brand brand = brandService.findById(id); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result<Brand>(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 + "的品牌删除成功!"); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
7. 扩展: PageHelper 分页查询
分页查询
service 接口
/**
* 分页查询品牌集合
*
* @param currentPage
* @param pageSize
* @return
*/
PageInfo<Brand> findAllByPage(Integer currentPage, Integer pageSize);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
service 接口实现类
/**
* 分页查询品牌集合
*
* @param currentPage
* @param pageSize
* @return
*/
@Override
public PageInfo<Brand> findAllByPage(Integer currentPage, Integer pageSize) { /* * 分页实现相关参数:PageHelper.startPage(currentPage,pageSize); 之后紧跟Brand对象集合的查询 * 1.当前页 * 2.每页多少条记录 */ PageHelper.startPage(currentPage, pageSize); // 查询brandList集合 List<Brand> brandList = brandMapper.selectAll(); // 封装PageInfo 对象 PageInfo<Brand> pageInfo = new PageInfo<>(brandList); return pageInfo;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
controller
/**
* 分页查询品牌集合
*
* @param currentPage 当前页
* @param pageSize 每页总记录数
* @return
*/
@GetMapping("/brandList/{currentPage}/{pageSize}")
public Result<PageInfo<Brand>> findAllByPage(@PathVariable(value = "currentPage") Integer currentPage, @PathVariable(value = "pageSize") Integer pageSize) { // 调用service实现分页查询 PageInfo<Brand> pageInfo = brandService.findAllByPage(currentPage, pageSize); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result<PageInfo<Brand>>(true, StatusCode.OK, "分页查询品牌集合成功!", pageInfo);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
分页 + 多条件搜索
service 接口
/**
* 分页 + 多条件搜索
* @param brand
* @param currentPage
* @param pageSize
* @return
*/
PageInfo<Brand> searchByPage(Brand brand,Integer currentPage, Integer pageSize);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
service 接口实现类
/**
* 分页 + 多条件搜索
*
* @param brand
* @param currentPage
* @param pageSize
* @return
*/
@Override
public PageInfo<Brand> searchByPage(Brand brand, Integer currentPage, Integer pageSize) { // 1.分页: PageHelper.startPage(currentPage, pageSize); // 2.搜索数据: Example brandExample = this.getBrandExample(brand); List<Brand> brandList = brandMapper.selectByExample(brandExample); // 3.封装返回PageInfo: PageInfo<Brand> 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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
controller
/**
* 分页 + 多条件搜索品牌集合
*
* @param brand
* @param currentPage
* @param pageSize
* @return
*/
@PostMapping("/search/{currentPage}/{pageSize}")
public Result<PageInfo<Brand>> findAllByPage(@RequestBody Brand brand, @PathVariable(value = "currentPage") Integer currentPage, @PathVariable(value = "pageSize") Integer pageSize) { // 调用service实现分页查询 PageInfo<Brand> pageInfo = brandService.searchByPage(brand, currentPage, pageSize); // 响应结果封装:true操作成功|StatusCode.OK状态码20000|提示信息|响应给前端的数据 return new Result<PageInfo<Brand>>(true, StatusCode.OK, "分页+多条件搜索品牌集合成功!", pageInfo);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
如果文字对您有帮助!请点赞支持一下!
文章来源: csp1999.blog.csdn.net,作者:兴趣使然の草帽路飞,版权归原作者所有,如需转载,请联系作者。
原文链接:csp1999.blog.csdn.net/article/details/111674929
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)