增删改查
概述
增、删、改、查四种类型的接口在Pangea2.0
的统一接口规范下,按照统一的返回格式将数据返回到前端页面。
适用范围
Pangea v2.0.1.6+
快速上手
1、在业务模块的pom
文件中添加依赖
html
<!--pangea核心组件包 -->
<dependency>
<groupId>com.hisense.pangea</groupId>
<artifactId>pangea-common-core</artifactId>
<version>${pangea.version}</version>
</dependency>
<!--pangea异常处理包 -->
<dependency>
<groupId>com.hisense.pangea</groupId>
<artifactId>pangea-common-exception</artifactId>
<version>${pangea.version}</version>
</dependency>
2、Controller
方法继承BaseController
父类
@RestController
@RequestMapping("/demo")
public class DemoController extends BaseController{ //Controller需要继承BaseController类
//此处可添加API接口代码
}
3、Entity
实体类继承BaseEntity
父类
jsx
@Data
@TableName(value = "Demo")
public class DemoEntity extends BaseEntity { //Entity实体类需要继承BaseEntity父类
//此处可添加属性值
}
4、Mapper
继承BaseMapper
父类
jsx
public interface DemoMapper extends BaseMapper<DemoEntity> {
//此处可添加mapper的自定义实现
}
5、Service
继承BaseService
父类
注意
BaseService有两个入参,第一个参数类型为mapper,第二个参数类型为entity
jsx
@Service
public class DemoService extends BaseService<DemoMapper, DemoEntity> {
//此处可添加自定义方法
}
6、新增接口
新增接口需要用post
方法请求。
返回值为boolean
类型,如果新增成功返回true
,前端弹出框显示“操作成功”。失败返回false
,前端弹出框显示“操作失败”。
java
/**
* 新增
*/
@PostMapping("save")
public Boolean save(@RequestBody DemoEntity demoEntity) {
return demoService.saveOrUpdate(demoEntity); //默认返回方式
}
7、修改接口
修改接口需要用put
方法请求。 返回值为boolean
类型,如果新增成功返回true
,前端弹出框显示“操作成功”。失败返回false
,前端弹出框显示“操作失败”。
java
/**
* 修改
*/
@PutMapping("update")
public Boolean update(@RequestBody DemoEntity demoEntity) {
return demoService.saveOrUpdate(demoEntity);
}
java
/**
* 批量修改
*/
@PutMapping("batchUpdate")
public boolean batchEditSave(@RequestBody List<Order> orderList) {
return orderService.saveOrUpdateBatch(orderList);
}
批量修改时默认每1000条向数据库flush一次,如需自定义刷新条数,可调用如下方法:
java
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
注意
前端页面配置的批量修改功能及后端默认生成的接口仅为单表操作,如需多表操作请按实际情况,调整批量修改接口的传参及后端接口逻辑
8、查询接口
查询接口需要用get
方法请求。
返回值有两种方式,对象和列表,返回值均会封装成json
格式返回到前端的data
字段中。
java
/**
* 查询对象
*/
@GetMapping("get/{id}")
public DemoEntity get(@PathVariable("id") Long id) {
return demoService.getById(id);
}
/**
* 查询列表
*/
@GetMapping("list")
public List list(@RequestBody DemoEntity demoEntity) {
return demoService.list();
}
/**
* 高级查询
*/
@PostMapping("criteriaList")
@Paginate
public List<DemoEntity> criteriaList(@RequestBody List<ConditionVO> conditionList) {
QueryWrapper<DemoEntity> queryWrapper = (QueryWrapper<DemoEntity>) SearchUtil.parseWhereSql(conditionList);
return demoService.list(queryWrapper);
}
关于高级查询更详细的使用方式参见自定义查询
注意
查询中如果传参封装在url上,且传参类型为字符串,传入参数后缀包含了".",需要将路径中的传参更改为{demo:
jsx
样例:请求参数demo字段的值为aaa.ex 接口的编写方式如下所示:
/**
* 查询
*/
@GetMapping("test/{demo:.+}")
public Demo selectDemo(@PathVariable("demo") String demo) {
return service.select(demo);
}
9、删除接口
删除接口需要用delete
方法请求。
默认返回值为Boolean
类型,如果删除成功返回true
,前端弹出框显示操作成功。失败返回false
,前端弹出框显示操作失败。
jsx
/**
* 删除
*/
@DeleteMapping("delete")
public Boolean delete(@RequestBody List<Long> ids) {
return demoService.removeByIds(ids);
}
10、异常信息返回方式
接口中的异常信息处理有两种方式。
第一种是将返回类型更改为String
类型,错误码为500
,异常信息将会按照String
返回的内容进行展示。
jsx
/**
* 删除
*/
@DeleteMapping("delete")
public String delete(@RequestBody List<Long> ids) {
return demoService.removeByIds(ids)?"":"操作失败";
}
第二种是用throwx()
方法进行调控,会直接进行统一的异常抛出,或者通过传入code
和message
进行异常抛出
jsx
/**
* 删除
*/
@DeleteMapping("delete")
public String delete(@RequestBody List<Long> ids) {
throwx(); //统一异常抛出
throwx("500","操作失败"); //传参异常抛出
return demoService.removeByIds(ids)?"":"操作失败";
}
异常信息异常具体指导请参照 异常处理 文档。
11、返回格式
get
方法返回格式:
jsx
{
code: 200, //状态码
msg: '提示信息',
data: {}/[] 数据,
alert:0 //alert 默认为0,不显示提示信息
}
post
/put
/delete
方法返回格式:
{
code: 500, //状态码
msg: '提示信息'
alert:1 //alert = 1 ,前端弹出框显示msg
}
返回格式具体指导请参考 返回数据格式 。
12、接口测试
接口可以采用postman
、SoapUI
等接口调试进行测试,具体的指导请参考 接口测试。
注意事项
1、如果想要采用统一返回结果进行处理,controller
、entity
、service
、mapper
继承的父类不能变更。
2、父类采用Mybatis-Plus
作为持久层框架,service
中自动继承plus
中的方法和实现,可直接使用。
Mybatis-plus
的具体指导请参考 使用MyBatis-Plus。
3、分页注解@Paginate只对返回类型List的才能生效。
4、新增接口和修改接口,无须手动设置创建人,创建时间,修改人和修改时间,实体类继承BaseEntity
后,会自动填充,取不到用户时会设置anonymous
,源码请参见AuditMetaObjectHandler
。