概述
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>
通用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
*/
@Repository
public interface BrandMapper extends Mapper<Brand> {
}
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);
}
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);
}
}
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方法略 */
}
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 + "的品牌删除成功!");
}
}
7. 扩展: PageHelper 分页查询
分页查询
service 接口
/**
* 分页查询品牌集合
*
* @param currentPage
* @param pageSize
* @return
*/
PageInfo<Brand> findAllByPage(Integer currentPage, Integer pageSize);
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;
}
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);
}
分页 + 多条件搜索
service 接口
/**
* 分页 + 多条件搜索
* @param brand
* @param currentPage
* @param pageSize
* @return
*/
PageInfo<Brand> searchByPage(Brand brand,Integer currentPage, Integer pageSize);
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;
}
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);
}
如果文字对您有帮助!请点赞支持一下!
最后
以上就是文艺蛋挞为你收集整理的SpringBoot整合通用tk.mapper增删改查+PageHelper分页的全部内容,希望文章能够帮你解决SpringBoot整合通用tk.mapper增删改查+PageHelper分页所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复