Panda_05_单表功能开发(三)_后端增删改查接口开发

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26981333/article/details/83108138

一、前言

在前面几节,我们已经创建好了数据库的表,已经定义好了页面以及接口地址,也进行了功能性的配置。

下面我们就可以进行功能性的开发了,主要涉及到:

序号 类型 名称
1 DTO FndBusinessRuleTest
2 Mapper FndBusinessRuleTestMapper
3 Mapper.xml FndBusinessRuleTestMapper.xml
4 Service IFndBusinessRuleTestService
5 ServiceImpl FndBusinessRuleTestServiceImpl
6 Controller FndBusinessRuleTestController

二、编写DTO

1.类

  • 每个DTO都对应数据库中的一张表,需要继承 BaseCloudDTO
    BaseCloudDTO 中封装了 who字段 以及 扩展字段
  • 名称与表名称相同,表名中 _ 替换为驼峰命名法,首字母大写,且忽略前缀。如:UserRole 对应表为 sys_user_role。

类注解:

	@MultiLanguage                        : 多语言注解
    @ExtensionAttribute(disable=true)     : 扩展字段注解
    @Table(name = "fnd_business_rule_b")  : 映射数据库表

2.静态属性字段

每一个字段都需要添加其对应的静态属性字段

3.字段

(1)主键
主键字段需要加注解:

@Id : 主键注解

@GeneratedValue : 主键自增长注解。 对于自增长、序列(SEQUENCE)类型的主键,需要添加注解@GeneratedValue

(2)多语言字段
多语言字段需要添加多语言字段注解

 @MultiLanguageField   : 多语言字段注解(3

(3)非数据库字段
非数据库字段需要添加@Transient

javax.persistence.Transient

(4)字段类型

  • 不使用基本类型,全部使用基本类型的包装类,如 Long 对应数据库中的INTEGER,而不是使用 long
  • 数字类型主键统一采用 Long
  • 金额、数量 等精度严格浮点类型采用 BigDecimal。注意 BigDecimal 在计算、比较方面的特殊性

4.完整示例

package com.hand.hec.panda.fnd.dto;

/**Auto Generated By Hap Code Generator**/
import com.hand.hap.core.annotation.MultiLanguage;
import com.hand.hap.core.annotation.MultiLanguageField;
import com.hand.hap.mybatis.annotation.ExtensionAttribute;
import com.hand.hap.system.dto.BaseCloudDTO;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * 一、类
 * 1. 每个DTO都对应数据库中的一张表,需要继承 BaseCloudDTO
 *  BaseCloudDTO 中封装了 who字段 以及 扩展字段
 *
 * 2.DTO类上需要加三个注解
 *      @MultiLanguage  : 多语言注解
 *      @ExtensionAttribute(disable=true)    : 扩展字段注解
 *      @Table(name = "fnd_business_rule_b") : 映射数据库表
 *
 * 二、静态属性字段
 *   每一个字段都需要添加其对应的静态属性字段
 *
 * 三、字段
 * 1.主键
 *    主键字段需要加注解:
 * 		@Id              : 主键注解
 *
 *      @GeneratedValue  : 主键自增长注解。
 *                          对于自增长、序列(SEQUENCE)类型的主键,需要添加注解@GeneratedValue
 * 2.多语言字段
 * 多语言字段需要添加多语言字段注解
 *        @MultiLanguageField   : 多语言字段注解
 *
 * 3.非数据库字段
 * 非数据库字段需要添加@Transient
 *      javax.persistence.Transient
 *      
 * 4.字段类型
 * >- 不使用基本类型,全部使用基本类型的`包装类`,如 Long 对应数据库中的INTEGER,而不是使用 long
 * >- 数字类型主键统一采用 Long
 * >- 金额、数量 等精度严格浮点类型采用 BigDecimal。注意 BigDecimal 在计算、比较方面的特殊性
 *
 *
 */
@MultiLanguage
@ExtensionAttribute(disable=true)
@Table(name = "fnd_business_rule_b")
public class FndBusinessRule extends BaseCloudDTO {

     public static final String FIELD_BUSINESS_RULE_ID = "businessRuleId";
     public static final String FIELD_BUSINESS_RULE_CODE = "businessRuleCode";
     public static final String FIELD_BUSINESS_NAME = "businessName";
     public static final String FIELD_DOC_CATEGORY = "docCategory";
     public static final String FIELD_ENABLED_FLAG = "enabledFlag";
     public static final String FIELD_DELETED_FLAG = "deletedFlag";
     public static final String FIELD_CLIENT_ID = "clientId";


     @Id
     @GeneratedValue
     private Long businessRuleId; //权限规则ID

     @NotEmpty
     @Length(max = 30)
     private String businessRuleCode; //权限规则代码

     @Length(max = 240)
     @MultiLanguageField
     private String businessName; //权限规则名称

     @NotEmpty
     @Length(max = 30)
     private String docCategory; //单据类别

     @Length(max = 1)
     private String enabledFlag; //启用标志

     @Length(max = 1)
     private String deletedFlag; //删除标志

     private Long clientId; //租户ID


     public void setBusinessRuleId(Long businessRuleId){
         this.businessRuleId = businessRuleId;
     }

     public Long getBusinessRuleId(){
         return businessRuleId;
     }

     public void setBusinessRuleCode(String businessRuleCode){
         this.businessRuleCode = businessRuleCode;
     }

     public String getBusinessRuleCode(){
         return businessRuleCode;
     }

     public void setBusinessName(String businessName){
         this.businessName = businessName;
     }

     public String getBusinessName(){
         return businessName;
     }

     public void setDocCategory(String docCategory){
         this.docCategory = docCategory;
     }

     public String getDocCategory(){
         return docCategory;
     }

     public void setEnabledFlag(String enabledFlag){
         this.enabledFlag = enabledFlag;
     }

     public String getEnabledFlag(){
         return enabledFlag;
     }


     }

三、编写Mapper

1.继承Mapper接口

继承了通用Mapper接口之后,就具备了一些单表的增删改查操作。

package com.hand.hec.panda.fnd.mapper;

import com.hand.hap.mybatis.common.Mapper;
import com.hand.hec.panda.fnd.dto.FndBusinessRule;

public interface FndBusinessRuleMapper extends Mapper<FndBusinessRule>{

}

2.Mapper.xml

对应的Mapper.xml实现如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hand.hec.panda.fnd.mapper.FndBusinessRuleMapper">
      <resultMap id="BaseResultMap" type="com.hand.hec.panda.fnd.dto.FndBusinessRule" extends="com.hand.hap.mapper.CloudStdMapper.CloudSTD">
        <result column="business_rule_id" property="businessRuleId" jdbcType="DECIMAL" />
        <result column="business_rule_code" property="businessRuleCode" jdbcType="VARCHAR" />
        <result column="business_name" property="businessName" jdbcType="VARCHAR" />
        <result column="doc_category" property="docCategory" jdbcType="VARCHAR" />
        <result column="enabled_flag" property="enabledFlag" jdbcType="VARCHAR" />
        <result column="deleted_flag" property="deletedFlag" jdbcType="VARCHAR" />
        <result column="client_id" property="clientId" jdbcType="DECIMAL" />
    </resultMap>


</mapper>

3.多表

若有涉及到多表操作,则先定义Mapper接口方法,然后通过 Mapper.xml 去写多表sql来实现一下即可。

四、Service

1.Service 接口

service 接口 需要继承IBaseServcie 和 ProxySelf 这两个接口。
IBaseServcie 提供了基本的增删改查接口。

package com.hand.hec.panda.fnd.service;

import com.hand.hap.core.ProxySelf;
import com.hand.hap.system.service.IBaseService;
import com.hand.hec.panda.fnd.dto.FndBusinessRule;

public interface IFndBusinessRuleService extends IBaseService<FndBusinessRule>, ProxySelf<IFndBusinessRuleService>{

}

2.ServiceImpl

(1)两个注解
类上需要加两个注解

@Service : 声明Bean
@Transactional(rollbackFor = Exception.class) : 开启Spring声明式事务,有异常时会回滚。

(2)继承与实现
需要继承 BaseServiceImpl 接口,这样就具有了单表的增删改查操作。
需要实现 IFndBusinessRuleService ,去实现处单表增删改查之外的其他操作。

package com.hand.hec.panda.fnd.service.impl;

import com.hand.hap.system.service.impl.BaseServiceImpl;
import org.springframework.stereotype.Service;
import com.hand.hec.panda.fnd.dto.FndBusinessRule;
import com.hand.hec.panda.fnd.service.IFndBusinessRuleService;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional(rollbackFor = Exception.class)
public class FndBusinessRuleServiceImpl extends BaseServiceImpl<FndBusinessRule> implements IFndBusinessRuleService {

}

五、Controller

1.类

加注解

类上需要加 @Controller

继承类:

需要继承 BaseController ,这样就有了一些通用方法,请求参数验证、异常处理

2.查询接口示例

	@RequestMapping(value = "/fnd/businessRule/query")
	@ResponseBody
	public ResponseData query(FndBusinessRule dto, @RequestParam(defaultValue = DEFAULT_PAGE) int page,
			@RequestParam(defaultValue = DEFAULT_PAGE_SIZE) int pageSize, HttpServletRequest request) {
		IRequest requestContext = createRequestContext(request);
		return new ResponseData(service.select(requestContext,dto,page,pageSize));
	}

3.提交接口示例

提交包括新增和修改

@RequestMapping(value = "/fnd/businessRule/submit")
	@ResponseBody
	public ResponseData update(@RequestBody List<FndBusinessRule> dto, BindingResult result, HttpServletRequest request){
	    //dto的验证。主要是对dto中的注解进行验证。
		getValidator().validate(dto, result);
		
		if (result.hasErrors()) {
			ResponseData responseData = new ResponseData(false);
			responseData.setMessage(getErrorMessage(result, request));
			return responseData;
		}
		IRequest requestCtx = createRequestContext(request);
		
		//批量更新或新增
		return new ResponseData(service.batchUpdate(requestCtx, dto));
	}

4.删除接口示例

	@RequestMapping(value = "/fnd/businessRule/remove")
	@ResponseBody
	public ResponseData delete(HttpServletRequest request,@RequestBody List<FndBusinessRule> dto){
	    //批量删除
		service.batchDelete(dto);
		return new ResponseData();
	}

5.完整示例

package com.hand.hec.panda.fnd.controllers;

import com.hand.hap.core.IRequest;
import com.hand.hap.system.controllers.BaseController;
import com.hand.hap.system.dto.ResponseData;
import com.hand.hec.panda.fnd.dto.FndBusinessRule;
import com.hand.hec.panda.fnd.service.IFndBusinessRuleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

@Controller
public class FndBusinessRuleController extends BaseController{

	@Autowired
	private IFndBusinessRuleService service;


	@RequestMapping(value = "/fnd/businessRule/query")
	@ResponseBody
	public ResponseData query(FndBusinessRule dto, @RequestParam(defaultValue = DEFAULT_PAGE) int page,
			@RequestParam(defaultValue = DEFAULT_PAGE_SIZE) int pageSize, HttpServletRequest request) {
		IRequest requestContext = createRequestContext(request);
		return new ResponseData(service.select(requestContext,dto,page,pageSize));
	}

	@RequestMapping(value = "/fnd/businessRule/submit")
	@ResponseBody
	public ResponseData update(@RequestBody List<FndBusinessRule> dto, BindingResult result, HttpServletRequest request){
		getValidator().validate(dto, result);
		if (result.hasErrors()) {
			ResponseData responseData = new ResponseData(false);
			responseData.setMessage(getErrorMessage(result, request));
			return responseData;
		}
		IRequest requestCtx = createRequestContext(request);
		return new ResponseData(service.batchUpdate(requestCtx, dto));
	}

	@RequestMapping(value = "/fnd/businessRule/remove")
	@ResponseBody
	public ResponseData delete(HttpServletRequest request,@RequestBody List<FndBusinessRule> dto){
		service.batchDelete(dto);
		return new ResponseData();
	}
}

六、接口测试

猜你喜欢

转载自blog.csdn.net/qq_26981333/article/details/83108138