Spring mvc+Mybatis+DWZ代码生成器

来源:互联网 发布:战地2直升机数据修改 编辑:程序博客网 时间:2024/06/05 11:06

目前只支持MySQL数据库,支持多主键、批量删除、生成图片上传、生成编辑器其他数据库需要实现具体的ConnectionManager。


生成器源码结构:


生成器原理是查询数据表的字段信息,封装成数据表对象,通过controller、service、dao、jsp view等模板生成增删改查代码。

支持自定义数据类型转换


支持自定义字段的Html控件,以下代码指定img字段html元素为image(图片上传控件),descrption字段的Html控件为editor(编辑器),可选的值还有input、select、radio、checkbox、date、datetime,分别表示下拉选项、单选框、复选框、日期和日期时间,默认为input

tableConfs.put("msg_book", new TableConf("book", "出版物", true, new String[]{"id *", "name * * search", "img + image", "author *", "isbn * * search", "press *", "price *", "descrption + editor"}));

mapper_xml.ftl

<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html"><?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="${basePackage}.data.${toClassName}Mapper"><insert id="save" parameterType="${basePackage}.bean.${toClassName}" <#if hasFieldAutoIncrease>useGeneratedKeys="true" keyProperty="${fieldAutoIncrease}"</#if>>insert into ${name}(${fieldString}) values(${fieldWrapString})</insert><select id="selectAll" resultType="${basePackage}.bean.${toClassName}">select * from ${name} </select><select id="selectByCondition" parameterType="${basePackage}.bean.${toClassName}" resultType="${basePackage}.bean.${toClassName}">select * from ${name}   <where><#list fields as field><#if field.dwzType=="date"><if test="${field.name}!=null"> and DATE(${field.name})=DATE(${r"#{"}${field.name}})</if><#else><if test="${field.name}!=null<#if field.searchEnable> and ${field.name}!=<#if field.fuzzySearch>''<#else>-1</#if></#if>"> and ${field.name}<#if field.fuzzySearch> like CONCAT('%','${r"${"}${field.name}}','%')<#else>=${r"#{"}${field.name}}</#if></if></#if></#list></where><if test="pager!=null"> limit ${r"#{"}pager.offset},${r"#{"}pager.numPerPage}</if></select><select id="selectTotal" parameterType="${basePackage}.bean.${toClassName}" resultType="java.lang.Long">select count(*) from ${name} <where><#list fields as field><#if field.dwzType=="date"><if test="${field.name}!=null"> and DATE(${field.name})=DATE(${r"#{"}${field.name}})</if><#else><if test="${field.name}!=null<#if field.searchEnable> and ${field.name}!=<#if field.fuzzySearch>''<#else>-1</#if></#if>"> and ${field.name}<#if field.fuzzySearch> like CONCAT('%','${r"${"}${field.name}}','%')<#else>=${r"#{"}${field.name}}</#if></if></#if></#list></where></select><select id="selectSingle" parameterType="<#if hasCompositePk || primeType==toClassName>${basePackage}.bean.</#if>${primeType}" resultType="${basePackage}.bean.${toClassName}">select * from ${name} <where><#if primeType!=toClassName><#if hasCompositePk><#list primtives as prikey><if test="${prikey.name}!=null"> and ${prikey.name}=${r"#{"}${prikey.name}}</if></#list><#else><#list primtives as prikey> and ${prikey.name}=${r"#{"}${prikey.name}} </#list></#if><#else><#list fields as field><if test="${field.name}!=null"> and ${field.name}=${r"#{"}${field.name}}</if></#list></#if></where></select><update id="update" parameterType="${basePackage}.bean.${toClassName}">update ${name} <set><#list fields as field><#if field.name!=fieldPrime><if test="${field.name}!=null">${field.name}=${r"#{"}${field.name}},</if></#if></#list></set><where><#list primtives as prikey><if test="${prikey.name}!=null">and ${prikey.name}=${r"#{"}${prikey.name}} </if></#list></where></update><delete id="delete" parameterType="<#if  hasCompositePk || primeType==toClassName>${basePackage}.bean.</#if>${primeType}" >delete from ${name} <where><#if primeType!=toClassName><#if hasCompositePk><#list primtives as prikey><if test="${prikey.name}!=null"> and ${prikey.name}=${r"#{"}${prikey.name}}</if></#list><#else><#list primtives as prikey> and ${prikey.name}=${r"#{"}${prikey.name}} </#list></#if><#else><#list fields as field><if test="${field.name}!=null"> and ${field.name}=${r"#{"}${field.name}}</if></#list></#if></where></delete></mapper>

view_list.ftl
<pre name="code" class="html"><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %><%@ taglib uri="/WEB-INF/mytag.tld" prefix="my" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><#if searchFields?size!=0><div class="pageHeader"> <form id="pagerForm" method="post" action="${alias}/list${reqSuffix}" onsubmit="return navTabSearch(this);"> <input type="hidden" name="pageNum" value="${r"${"}pager.pageNum}"/><input type="hidden" name="numPerPage" value="${r"${"}pager.numPerPage}"/><div class="searchBar"><table class="searchContent"><tbody><tr><td><#list searchFields as field><#if field.htmlType=="select" || field.htmlType=="radio" || field.htmlType=="checkbox">${field.toLabelName }:<select name="${field.name }" class="formInputSmall"><option value="-1">请选择</option></select><#elseif  field.dwzType=="date" || field.htmlType=="date">${field.toLabelName }:<input name="${field.name }" class="textInput formInputSmall date" value='<fmt:formatDate value="${r"${"}${toEntityName}Model.${field.name}}" pattern="<#if field.htmlType=="datetime">yyyy-MM-dd HH:mm<#else>yyyy-MM-dd</#if>"/>'/><#else><input name="${field.name }" class="formInputSmall" value="${r"${"}${toEntityName}Model.${field.name}}" placeholder="搜索${field.toLabelName }"/></#if></#list></td><td><div class="buttonActive"><div class="buttonContent"><button type="submit">检索</button></div></div></td></tr></tbody></table></div></form></div></#if><div class="pageContent"><#if searchFields?size==0><form id="pagerForm" method="post" action="${alias}/list${reqSuffix}" onsubmit="return navTabSearch(this);"> <input type="hidden" name="pageNum" value="${r"${"}pager.pageNum}"/><input type="hidden" name="numPerPage" value="${r"${"}pager.numPerPage}"/></form></#if><div class="panelBar"><ul class="toolBar"><li><a href="${alias}/new${reqSuffix}" target="navTab" rel="${toEntityName }AddPage" class="add"><span>新增${nameCn }</span></a></li><li><a href="${alias}/remove${reqSuffix}?pageNum=${r"${"}pager.pageNum }&id={idstring}" target="ajaxTodo" class="delete" title="确定要删除所选记录?"><span>删除${nameCn }</span></a></li><#if batchDel><li><a href="${alias}/edit${reqSuffix}?pageNum=${r"${"}pager.pageNum }&id={idstring}" target="navTab" rel="${toEntityName }EditPage" class="edit"><span>修改${nameCn }</span></a></li><li><a href="${alias}/batchRemove${reqSuffix}?pageNum=${r"${"}pager.pageNum }" target="selectedTodo" rel="${toEntityName}Ids" postType="string" class="folder" title="确定删除所选记录?"><span>批量删除</span></a></li></#if></ul></div><table class="table" width="100%" layoutH="<#if searchFields?size==0>75<#else>113</#if>"><thead><tr><th><#if batchDel><input type="checkbox" group="${toEntityName}Ids" class="checkboxCtrl"/><#else> </#if></th><#list fields as field><#if field.listEnable><th>${field.toLabelName }</th></#if></#list></tr></thead><tbody><c:forEach items="${r"${"}${toEntityName }List }" var="lo"><tr target="idstring" rel="<#if primeType!=toClassName><#list primtives as prime>${r"${"}lo.${prime.name}}<#if prime_has_next>~</#if></#list><#else><#list fields as field>${r"${"}lo.${field.name}}<#if field_has_next>~</#if></#list></#if>"><td><#if batchDel><input name="${toEntityName}Ids" value="<#if primeType!=toClassName><#list primtives as prime>${r"${"}lo.${prime.name}}<#if prime_has_next>~</#if></#list><#else><#list fields as field>${r"${"}lo.${field.name}}<#if field_has_next>~</#if></#list></#if>" target="${toEntityName}Ids" rel="<#if primeType!=toClassName><#list primtives as prime>${r"${"}lo.${prime.name}}<#if prime_has_next>~</#if></#list><#else><#list fields as field>${r"${"}lo.${field.name}}<#if field_has_next>~</#if></#list></#if>" type="checkbox"><#else> </#if></td><#list fields as field><#if field.listEnable><td><#if field.dwzType=="date" || field.htmlType=="date"><fmt:formatDate value="${r"${"}lo.${field.name}}" pattern="yyyy-MM-dd"/><#else><#if field.htmlType=="image"><img src="${r"${"}imgDomain}/${r"${"}lo.${field.name} }" style="max-width:200px;"/><#else>${r"${"}lo.${field.name} }</#if></#if></td></#if></#list></tr></c:forEach></tbody></table><div class="panelBar"><div class="pages"><span><select class="combox" name="numPerPage" onchange="navTabPageBreak({numPerPage:this.value})"><option value="20" ${r"${"}pager.numPerPage == 20?"selected":""}>20</option> <option value="100" ${r"${"}pager.numPerPage == 100?"selected":""}>100</option> <option value="200" ${r"${"}pager.numPerPage == 200?"selected":""}>200</option> </select>共${r"${"}pager.total }条,共${r"${"}pager.pageTotal}页</span></div><div class="pagination" targetType="navTab" totalCount="${r"${"}pager.total}" numPerPage="${r"${"}pager.numPerPage}" pageNumShown="10" currentPage="${r"${"}pager.pageNum}"></div></div></div>


代码生成器API:

Gen gen = new Gen();

//设置数据库连接实现类
gen.setConnectionManager(new MySQLConnectionManager());

//设置顶层包名
gen.setBasePackage("com.genTest.gen");

//设置分页实现类名称
gen.setPagerType("QueryPager");

//设置请求尾缀
gen.setReqSuffix(".html");


Map<String,TableConf> tableConfs = new HashMap<String, TableConf>();

//表配置定义

TableConf(String table,  String tableChinese, boolean multipleDelete, String[] fieldsConf)

//表配置

tableConfs.put("msg_book", new TableConf("book", "出版物", true, new String[]{"id *", "name * * search", "img + image", "author *", "isbn * * search", "press *", "price *", "descrption + editor"}));

//字段配置定义 

field, position, html_type, search, cn_name

position: * 列表显示表单显示;. 列表显示表单不显示;+ 列表不显示 表单显示

html_type: input(输入框,默认);radio(单选框);checkbox(多选框);date(日期); datetime(yyyy-MM-dd HH:mm日期时间);editor(编辑器);image(图片上传);*默认

search: search字段搜索;*不用于搜索(默认)

cn_name: 字段中文名,默认为数据表的comment


gen.setTableConf(tableConfs);

//生成目录
gen.setOutput("E:\\work\\workspace2\\genTest");

//do it
gen.doMysql();

代码示例:

Map<String,TableConf> tableConfs = new HashMap<String, TableConf>();/** * Field Conf 参数 (field, position, html_type, search, cn_name) * field: 字段名 * position:  显示配置   * 列表显示表单显示;. 列表显示表单不显示;+ 列表不显示 表单显示 * html_type: 表单元素     input(输入框,默认);radio(单选框);checkbox(多选框);date(日期); datetime(yyyy-MM-dd HH:mm日期时间);editor(编辑器);image(图片上传) * search: 字段是否用于搜索  .(默认);search(字段用于列表搜索)  * cn_name: 字段中文名    默认为字段的comment * 各参数如果不作配置可用.代替,表示用默认配置。 * 例如:  * title * * search 标题         表示列表和表单都显示,表单元素为默认的input,字段用于搜索,字段中文名为默认的COMMENT * title * input *          表示字段不用于搜索 */tableConfs.put("msg_show", new TableConf("show", "在线展览", true, new String[]{"id +","begin_time *","end_time *","description + editor","title * * search","addr *","category_id * select","img * image"}));tableConfs.put("msg_content", new TableConf("content", "文章内容", true, new String[]{"id * * 编号","title * * search","content + editor","create_time . date search","category_id * select","img * image","sort_value *","recommend * radio","author *","source *"}));tableConfs.put("msg_banner", new TableConf("banner", "图片轮播", new String[]{"id +", "position * select search", "item_type * select", "item_url *", "item_href *", "img * image", "item_desc + editor"})); tableConfs.put("msg_book", new TableConf("book", "出版物", true, new String[]{"id *", "name * * search", "img + image", "author *", "isbn *", "press *", "price *", "descrption + editor"}));tableConfs.put("msg_video", new TableConf("video", "视频", true, new String[]{"id *", "title * * search", "img + image", "author *", "category_id * select search", "view_times .", "description + editor"}));Gen gen = new Gen();gen.setConnectionManager(new MySQLConnectionManager());gen.setBasePackage("com.genTest.gen");gen.setPagerType("QueryPager");gen.setReqSuffix(".html");gen.setTableConf(tableConfs);gen.setOutput("E:\\work\\workspace2\\genTest");gen.doMysql();


生成结果



配置效果(Example):

表结构


默认字段的中文名从comment中取,当然也可以在API中给每个字段定义中文名

配置1,默认不指定字段:

tableConfs.put("msg_book", new TableConf("book", "出版物", new String[]{}));
生成效果


配置2,指定字段是否列表显示,是否表单显示,指定字段html元素

tableConfs.put("msg_book", new TableConf("book", "出版物", true, new String[]{"id *", "name * ", "img + image", "author *", "isbn *", "press *", "price *", "descrption + editor"}));
生成效果

配置3,指定搜索字段,配置批量删除:

tableConfs.put("msg_book", new TableConf("book", "出版物", true, new String[]{"id *", "name * * search", "img + image", "author *", "isbn * search", "press *", "price *", "descrption + editor"}));
生成效果







0 0
原创粉丝点击