e_yuan 发表于 2019-3-6 16:59:18

实现一个自定义的功能的操作笔记

本帖最后由 e_yuan 于 2019-3-9 09:36 编辑

            
[*]1. vue+AntD

[*]1.1. 新增按钮
[*]1.2. 添加按钮事件处理
[*]2. controller中添加方法
[*]3. service中添加方法

[*]3.1. 简单的处理可直接在service层中完成
[*]3.2. 复杂的处理,可通过调用dao层完成
[*]4. dao中添加方法

[*]4.1. 接口定义
[*]4.2. mybatis xml

1. vue+AntD
1.1. 新增按钮在template中添加按钮。
前端页面使用的是AntDesign的组件,可参考antDesignVue的官方文档。
<a-button @click="handleCopy" type="primary" icon="copy">复制</a-button>
1.2. 添加按钮事件处理data对象可按照良好的编程规范定义为多个层级,例如url、flag、dict等,不要一股脑的都作为data的属性。

[*]data url中添加复制的controller路径
copy:"/codetemplate/codeTemplate/copy",

[*]在vue的methods中添加handleCopy。

前端JS代码,一些简单的语法,尽量使用ES6,例如let、=>等。
handleCopy: function(){    var that = this;    //获取当前选中行    let id = that.selectedRowKeys;    //请求服务端    let params = {id:id};    getAction(this.url.copy,params).then((res)=>{      if(res.success){//复制成功,刷新页面      that.$message.success(res.message);      that.loadData();      }else{//复制失败,提示用户      that.$message.warning(res.message);      }    })},
2. controller中添加方法controller中定义方法使用@GetMapping还是@PostMapping、@PutMapping等根据业务操作逻辑确定,例如删除操作使用Delete、更新使用Put、查询使用Get、提交数据使用Post,这些注解对应于HTTP到谓词。
controller接口方法的该注解与前端调用时使用的HTTP谓词保持一致,该例中复制可使用Get,传递待复制的记录ID值。
@GetMapping(value = "/copy")public Result<CodeTemplate> copy(@RequestParam(name="id", defaultValue="") String id, HttpServletRequest req) {    Result<CodeTemplate> result = new Result<CodeTemplate>();    try {      codeTemplateService.copy(id);      result.success("复制成功!");    } catch (Exception e) {      e.printStackTrace();      log.info(e.getMessage());      result.error500("复制失败!");    }    return result;}
3. service中添加方法
3.1. 简单的处理可直接在service层中完成Service层继承了Mybatis-Plus提供的Service基类,可实现常用的CRUDc操作,可操作MP官网Mybatis-Plus官网文档。
@Servicepublic class CodeTemplateServiceImpl extends ServiceImpl<CodeTemplateMapper, CodeTemplate> implements ICodeTemplateService {        @Autowired        CodeTemplateMapper mapper;                @Transactional        public void copy(String id){                //获取原记录                CodeTemplate entity = mapper.selectById(id);                //复制为新记录                CodeTemplate entityDest = new CodeTemplate();                try {                        MyBeanUtils.copyBeanNotNull2Bean(entity,entityDest);                } catch (Exception e) {                         e.printStackTrace();                }                //修改需要更改的内容,例如ID                entityDest.setId(UUID.randomUUID().toString().replaceAll("-", ""));                //保存新记录到数据库                mapper.insert(entityDest);        }}
3.2. 复杂的处理,可通过调用dao层完成使用@Slf4j注解,可以直接使用log对象记录日志,不再需要声明、实例化。
@Service@Slf4jpublic class CodeTemplateServiceImpl extends ServiceImpl<CodeTemplateMapper, CodeTemplate> implements ICodeTemplateService {        @Autowired        CodeTemplateMapper mapper;                @Transactional        public void copy(String id){                String idDest = UUID.randomUUID().toString().replaceAll("-", "");                int rowCount = mapper.copy(id, idDest);                log.info("rowCount:"+rowCount);        }}
4. dao中添加方法
4.1. 接口定义insert\update\delete返回受影响的行数,因此返回值是int。
select返回数据集,可指定resultType,将其映射为列表、实体、基本数据类型等数据类型。
public interface CodeTemplateMapper extends BaseMapper<CodeTemplate> {        public int copy(@Param("id") String id,@Param("idDest") String idDest);}
4.2. mybatis xml有关mybatis的XML配置,可参考mybatis官网文档学习。
<insert id="copy">INSERT INTOls_code_template(   id,    bpm_status,    create_name,    create_by,    update_name,    update_by,    sys_org_code,    sys_company_code,    create_time,    update_time)select   #{idDest},    bpm_status,    create_name,    create_by,    update_name,    update_by,    sys_org_code,    sys_company_code,    create_time,    update_timefrom ls_code_template where id = #{id}</insert>      
                                             

tyjohn 发表于 2019-7-23 17:44:59

十分感谢

liuxj808 发表于 2020-4-8 22:34:45

写得很仔细,感谢。
页: [1]
查看完整版本: 实现一个自定义的功能的操作笔记