专三、mcg-helper一键生成jeecg框架单表功能模块

        今天给大家展示mcg-helper的魅力,既然是万能代码生成,那就小试牛刀一下,本次选择java开源快速开发框架jeecg(3.7.1版本)作为示例,一键生成jeecg单表业务模块,达到生成后无需二次编码即可运行的程度。首先,我们来看看mcg-helper流程图的实现:

        从流程图中“data控件”读取表结构信息自动转换映射为关系对象,“json控件”扩展数据(如:定义列表页面的有哪些查询条件字段,列表页面表格显示哪些字段,增加页面需要录入的字段,修改页面需要编辑的字段等等),再通过“js脚本控件”进行数据处理, 通常一个模块的业务数据紧密度较高,所以原则上使用一个js脚本控件就能够满足,当然你可以自己来设计,比如多个json控件或多个js脚本控件来将数据处理或划分得更细。“文本控件”获取到参数后,可自定义组装成你需要的代码。

        假设一个表结构,如下:

CREATE TABLE `mcg_helper_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `user_name` varchar(50) NOT NULL COMMENT '用户名',
  `user_pwd` varchar(255) DEFAULT NULL COMMENT '密码',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `reg_time` datetime DEFAULT NULL COMMENT '注册时间',
  `update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`,`user_name`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;


        指定生成的目录路径,一键生成后我们直接把jeecg运行起来,实际效果如下图!



        查询、新增、修改、详情、删除、分页功能均可以正常使用,在生成流程中定义哪些列表查询条件字段,表格显示哪些字段,新增显示哪些字段,修改显示哪些字段等等。当然只要你想做,实质上可以做得更细,更到位。单表业务生成相当简单,多表原理也一样。只要有标准、有规范、有规律可循,我们就能生成,越复杂麻烦的功能模块反而更值得去实现自动生成,假如一键生成后,这功能可以减少三天或以上的工作量,那就更值得拥有。

       

        我们来看看生成的代码(这里贴出几个生成后的完整代码文件):

                            


package com.jeecg.mcghelperuser.entity;

import java.io.Serializable;
import java.util.Date;

/**
 * 
 * @Description: 业务表基本信息
 * @author:      mcg-helper
 * @date:        2017-11-21 17:49:08
 *
 */
public class McgHelperUserEntity implements Serializable {
    
    private static final long serialVersionUID = 1L;
    /* 自增主键  */
    private Integer id;
    /* 用户名  */
    private String userName;
    /* 密码  */
    private String userPwd;
    /* 年龄  */
    private Integer age;
    /* 注册时间  */
    private Date regTime;
    /* 更新时间  */
    private Date updateTime;
    
    public Integer getId() {
        return this.id;
    }
    public String getUserName() {
        return this.userName;
    }
    public String getUserPwd() {
        return this.userPwd;
    }
    public Integer getAge() {
        return this.age;
    }
    public Date getRegTime() {
        return this.regTime;
    }
    public Date getUpdateTime() {
        return this.updateTime;
    }
   
    public void setId(Integer id) {
        this.id = id;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public void setRegTime(Date regTime) {
        this.regTime = regTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
  
}

 
package com.jeecg.mcghelperuser.dao;

import org.jeecgframework.minidao.annotation.Param;
import org.jeecgframework.minidao.annotation.ResultType;
import org.jeecgframework.minidao.annotation.Sql;
import org.jeecgframework.minidao.pojo.MiniDaoPage;
import org.springframework.stereotype.Repository;

import com.jeecg.mcghelperuser.entity.McgHelperUserEntity;

@Repository
public interface McgHelperUserDao{

    @Sql("SELECT * FROM mcg_helper_user WHERE id = :id and user_name = :userName")
    McgHelperUserEntity get(@Param("id") Integer id, @Param("userName") String userName);
    
    int update(@Param("mcgHelperUserEntity") McgHelperUserEntity mcgHelperUserEntity);
    
    void insert(@Param("mcgHelperUserEntity") McgHelperUserEntity mcgHelperUserEntity);
    
    @ResultType(McgHelperUserEntity.class)
    public MiniDaoPage<McgHelperUserEntity> getAll(@Param("mcgHelperUserEntity") McgHelperUserEntity mcgHelperUserEntity, @Param("page") int page, @Param("rows") int rows);
    
    @Sql("DELETE from mcg_helper_user WHERE id = :mcgHelperUserEntity.id and user_name = :mcgHelperUserEntity.userName")
    public void delete(@Param("mcgHelperUserEntity") McgHelperUserEntity mcgHelperUserEntity);
    
}

package com.jeecg.mcghelperuser.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.VelocityContext;
import org.jeecgframework.minidao.pojo.MiniDaoPage;
import org.jeecgframework.p3.core.common.utils.AjaxJson;
import org.jeecgframework.p3.core.page.SystemTools;
import org.jeecgframework.p3.core.util.plugin.ViewVelocity;
import org.jeecgframework.p3.core.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.jeecg.mcghelperuser.entity.McgHelperUserEntity;
import com.jeecg.mcghelperuser.service.McgHelperUserService;

@Controller
@RequestMapping("/demo/mcgHelperUserController")
public class McgHelperUserController extends BaseController {
    @Autowired
    private McgHelperUserService mcgHelperUserService;

    @RequestMapping(params = "list", method = { RequestMethod.GET, RequestMethod.POST })
    public void list(@ModelAttribute McgHelperUserEntity mcgHelperUserEntity, HttpServletRequest request, HttpServletResponse response,
            @RequestParam(required = false, value = "pageNo", defaultValue = "1") int pageNo, @RequestParam(required = false, value = "pageSize", defaultValue = "10") int pageSize)
            throws Exception {
        try {
            // 分页数据
            MiniDaoPage<McgHelperUserEntity> list = mcgHelperUserService.getAll(mcgHelperUserEntity, pageNo, pageSize);
            VelocityContext velocityContext = new VelocityContext();
            velocityContext.put("mcgHelperUserEntity", mcgHelperUserEntity);
            velocityContext.put("pageInfos", SystemTools.convertPaginatedList(list));
            String viewName = "demo/mcghelperuser/mcghelperuser-list.vm";
            ViewVelocity.view(request, response, viewName, velocityContext);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @RequestMapping(params = "toDetail", method = RequestMethod.GET)
    public void mcgHelperUserEntityDetail(@RequestParam(required = true, value = "id") Integer id, @RequestParam(required = true, value = "userName") String userName, HttpServletResponse response, HttpServletRequest request) throws Exception {
        VelocityContext velocityContext = new VelocityContext();
        String viewName = "demo/mcghelperuser/mcghelperuser-detail.vm";
        McgHelperUserEntity mcgHelperUserEntity = mcgHelperUserService.get(id, userName);
        velocityContext.put("mcgHelperUserEntity", mcgHelperUserEntity);
        ViewVelocity.view(request, response, viewName, velocityContext);
    }

    @RequestMapping(params = "toAdd", method = { RequestMethod.GET, RequestMethod.POST })
    public void toAddDialog(HttpServletRequest request, HttpServletResponse response) throws Exception {
        VelocityContext velocityContext = new VelocityContext();
        String viewName = "demo/mcghelperuser/mcghelperuser-add.vm";
        ViewVelocity.view(request, response, viewName, velocityContext);
    }

    @RequestMapping(params = "doAdd", method = { RequestMethod.GET, RequestMethod.POST })
    @ResponseBody
    public AjaxJson doAdd(@ModelAttribute McgHelperUserEntity mcgHelperUserEntity) {
        AjaxJson j = new AjaxJson();
        try {
            mcgHelperUserService.insert(mcgHelperUserEntity);
            j.setMsg("保存成功");
        } catch (Exception e) {
            log.info(e.getMessage());
            j.setSuccess(false);
            j.setMsg("保存失败");
        }
        return j;
    }

    @RequestMapping(params = "toEdit", method = RequestMethod.GET)
    
    public void toEdit(@RequestParam(required = true, value = "id") Integer id, @RequestParam(required = true, value = "userName") String userName, HttpServletResponse response, HttpServletRequest request) throws Exception {
        VelocityContext velocityContext = new VelocityContext();
        McgHelperUserEntity mcgHelperUserEntity = mcgHelperUserService.get(id, userName);
        velocityContext.put("mcgHelperUserEntity", mcgHelperUserEntity);
        String viewName = "demo/mcghelperuser/mcghelperuser-edit.vm";
        ViewVelocity.view(request, response, viewName, velocityContext);
    }

    @RequestMapping(params = "doEdit", method = { RequestMethod.GET, RequestMethod.POST })
    @ResponseBody
    public AjaxJson doEdit(@ModelAttribute McgHelperUserEntity mcgHelperUserEntity) {
        AjaxJson j = new AjaxJson();
        try {
            mcgHelperUserService.update(mcgHelperUserEntity);
            j.setMsg("编辑成功");
        } catch (Exception e) {
            log.info(e.getMessage());
            j.setSuccess(false);
            j.setMsg("编辑失败");
        }
        return j;
    }

    @RequestMapping(params = "doDelete", method = RequestMethod.GET)
    @ResponseBody
    public AjaxJson doDelete(@RequestParam(required = true, value = "id") Integer id, @RequestParam(required = true, value = "userName") String userName) {
        AjaxJson j = new AjaxJson();
        try {
            McgHelperUserEntity mcgHelperUserEntity = new McgHelperUserEntity();
            mcgHelperUserEntity.setId(id);
            mcgHelperUserEntity.setUserName(userName);
             
            mcgHelperUserService.delete(mcgHelperUserEntity);
            j.setMsg("删除成功");
        } catch (Exception e) {
            log.info(e.getMessage());
            j.setSuccess(false);
            j.setMsg("删除失败");
        }
        return j;
    }

}

#parse("content/base/back/common/macro.vm")
<!DOCTYPE html>
<html lang="en">
#parse("content/base/back/common/head.vm")
<link rel="stylesheet" href="$!{basePath}/plug-in-ui/hplus/css/font-awesome.css"/>
<body style='overflow:scroll;overflow-x:hidden'>
	<div class="container bs-docs-container" style="width:100%;">
		<div class="row">
			<form role="form" class="form-inline" action="$!{basePath}/demo/mcgHelperUserController.do?list" method="post" id="formSubmit">
				<div  class="col-md-10" style="width:100%">
					<div class="panel panel-default">
						<div class="panel-heading">列表</div>
						<div class="panel-body">
							<div class="search">
							
								 <div class="form-group col-sm-3">
									<label for="name" class="control-label col-sm-3 line34">用户名</label>
									<div class="col-sm-8">
										<input type="text" name="userName" id="userName" value="$!{mcgHelperUserEntity.userName}" class="form-control">
									</div>
								 </div>
										 
								<button type="submit" class="btn btn-primary"><i class="fa fa-search"></i> 搜  索</button>
								<div class="clearfix"></div>
							</div>
							<div id="legend">
								<legend  class="le"><button type="button" class="btn btn-primary" οnclick="doUrl('$!{basePath}/demo/mcgHelperUserController.do?toAdd')" ><i class="fa fa-plus"></i> 新增</button></legend> 
							</div>
							<table class="table table-striped">
								<thead>
					        		<th>
					        		 <input type="checkbox" name="ckAll" id="ckAll" />
					        		</th>
									    <th>用户名</th>
									    <th>密码</th>
									    <th>注册时间</th>
									<th>操作</th>
								</thead>
								<tbody>
								#if($!{pageInfos})
									#foreach($!{info} in $!{pageInfos})
										<tr>			
											<td><input type="checkbox" name="ck" value="$!{info.id}" /></td>
											<td>$!{info.userName}</td>			  
											<td>$!{info.userPwd}</td>			  
											<td>$!{info.regTime}</td>			  
											<td class="last">
											<a class="btn btn-success btn-xs" href="javascript:doUrl('$!{basePath}/demo/mcgHelperUserController.do?toEdit&id=$!{info.id}&userName=$!{info.userName}')" ><i class="fa fa-edit"></i> 编辑</a>
											<a class="btn btn-danger btn-xs" href="javascript:delData('$!{basePath}/demo/mcgHelperUserController.do?doDelete&id=$!{info.id}&userName=$!{info.userName}')"><i class="fa fa-trash-o"></i> 删除</a>
											<a class="btn btn-success btn-xs" href="javascript:doUrl('$!{basePath}/demo/mcgHelperUserController.do?toDetail&id=$!{info.id}&userName=$!{info.userName}')"><i class="fa fa-file-o"></i> 详情</a>
											</td>
										</tr>
									 #end
								 #end
								</tbody>
							</table>
							<div class="text-right">
								<!--公用翻页代码-->
								#set($attr='formSubmit')
								#showPageList($pageInfos $attr)
								<!--END公用翻页代码-->
							</div>
						</div>
					</div>
				</div>  
			</form>
		</div>
	</div>
</body>
</html>
<script>
$("#ckAll").click(function(){ 
	if($(this).prop("checked")){ 
	 $(":checkbox").prop("checked",true) 
	}else{ 
	$(":checkbox").prop("checked",false)  
	} 
}); 

//jquery获取复选框值    
function getCkValue(){  
  var chk_value =[];    
  $('input[name="ck"]:checked').each(function(){    
   chk_value.push($(this).val());    
  });    
  //alert(chk_value.length==0 ?'你还没有选择任何内容!':chk_value);    
}    

</script>
      

        从代码生成实现的角度上,我相信优化的空间还很大,我们能够不断的摸索提炼,让代码生成的实现设计更简单,而且能够支持更复杂的需求。以后要是换公司或换研发框架,针对业务编写几套自动生成,虽然谈不上高枕无忧,但也会轻松不少。为让大家更好的认识和使用mcg-helper,现推出更具营养的“使用指南”视频教程,https://pan.baidu.com/s/1sliEqhJ#list/path=%2F%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97 , 感谢大家的支持!最后贴上一份百度云盘的分享截图:




  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
mcg-helper是一款研发个化性流程自动化工具,提供一套可视化“流程自动化”的规范,丰富的拖拽控件,良好的交互性,基于流程图实现自动化,能够很好感知到可控性、实时性、可追溯性。更好的解决在研发工作中较典型的代码生成、应用部署、环境搭建、模拟环境、自动发现与检测、数据处理等需求场景,从而达到减少简化工作量。其核心亮点在于打造自己的流程控件,实现自定义需求。 mcg-helper流程自动化工具功能: 以研发工作中的实际需求场景为例: 一、代码生成:快速构建代码生成功能,通过可视化界面,采用拖拽式控件及连接线绘制流程图,自定义实现生成任何想要的代码。 二、环境搭建:以java应用来讲,比如安装jdk,tomcat,zookeeper,mq,hbase,mysql等等都可以实现自动化。 三、应用部署:GIT代码拉取,MAVEN打包,SFTP上传,Linux脚本执行,自动化一气呵成,且轻松实现切换用户等交互性需求,数据初始化,多应用的启动顺序或特定条件触发,均可实现自动化操作。 四、模拟操作:接口调试,数据模拟,功能自测等等,适用于测试场景。 五、自动检测:基于流程循环,实现主动触发、检测、控制的需求场景,如服务器性能检测,应用存活检测,循环扫描操作等。 六、数据处理:如开发环境定期同步数据到测试环境,或多个数据库数据加工过滤等需求。 七、WEB SSH:通过浏览器操作Linux,简单便捷。 整体上讲,基于流程图清晰易直观,且控件使用简单,易掌控,学习门槛低。系统“主页”里面有视频教程链接,能够很好的上手和玩转mcg-helpermcg-helper流程自动化工具特点: 轻量级、无浸入性、部署简单(无需安装数据库或特定配置,jdk8、tomcat8即可独立运行) 跨平台性、可移植性、可扩展性,基于B/S架构,通过浏览器即可访问 一套流程自动化规范,轻松快捷实现流程自动化 二次开发,打造自定义拖拽流程控件,让流程自动化更贴近需求 WEB SSH,通过浏览器即可与Linux交互,支持google身份认证

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mcg-helper

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值