实现一个自定义的功能的操作笔记
本帖最后由 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>
十分感谢 写得很仔细,感谢。
页:
[1]