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 */ ListfindAll(); /** * 根据品牌信息多条件搜索 * * @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 ListfindAll() { 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 */PageInfofindAllByPage(Integer currentPage, Integer pageSize);
service 接口实现类
/** * 分页查询品牌集合 * * @param currentPage * @param pageSize * @return */@Overridepublic PageInfofindAllByPage(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 */PageInfosearchByPage(Brand brand,Integer currentPage, Integer pageSize);
service 接口实现类
/** * 分页 + 多条件搜索 * * @param brand * @param currentPage * @param pageSize * @return */@Overridepublic PageInfosearchByPage(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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月12日 23时31分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
awk 的内置变量 NF、NR、FNR、FS、OFS、RS、ORS
2019-04-29
CentOS系统内核升级攻略
2019-04-29
linux系统时区修改(Debian的主机和docker)
2019-04-29
docker-compose 安装
2019-04-29
crontab 定时任务
2019-04-29
查看docker veth pair与宿主机上网卡的对应关系
2019-04-29
使用 GitLab CI 进行持续集成的一些踩坑
2019-04-29
企业云盘给贸易业带来新的效益
2019-04-29
Linux入门常用命令
2019-04-29
Spring整理
2019-04-29
SpringMvc加强
2019-04-29
初识Vue全家桶 Nuxt.js(一)
2019-04-29
基本路由及动态路由(二)
2019-04-29
视图:默认模板+默认布局(自定义布局)+nuxt.js页面(三)
2019-04-29
基于nuxt下asyncData,fetch发送axios请求(四)
2019-04-29
插件机制+自定义axios(五)
2019-04-29
Redis的学习之路
2019-04-29
Windows下Redies+GUI安装,使用Jedis与spring boot 整合
2019-04-29