增删改查
概述
增、删、改、查四种类型的接口在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。