1. 程式人生 > >Spring mvc+Mybatis+DWZ程式碼生成器

Spring mvc+Mybatis+DWZ程式碼生成器

目前只支援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"}));
生成效果


相關推薦

Spring mvc+Mybatis+DWZ程式碼生成器

目前只支援MySQL資料庫,支援多主鍵、批量刪除、生成圖片上傳、生成編輯器其他資料庫需要實現具體的ConnectionManager。 生成器原始碼結構: 生成器原理是查詢資料表的欄位資訊,封裝成資料表物件,通過controller、service、dao、jsp vi

mybatis註解實現 spring mvc + mybatis+velocity 框架 (附完整專案程式碼

最近學習了一下mybatis結合網上的一些列子搭建的一個網站的框架,前端顯示用的velocity引擎,資料訪問使用mybatis+oracle,檢視訪問控制spring mvc,框架主要包括一些基本的增刪改操作以及攔截器,廢話不多說了直接開始吧!! 程式碼下載

分布式服務--spring mvc +mybatis + Dubbo+Zookeeper+Proxy+Restful

spring mvc+my batis kafka dubbo+zookeerper restful redis分布式緩存 雲服務子系統:後臺管理系統、Restfu服務系統、Dubbo服務/管控/監控中心Zookeeper註冊中心、報表分析系統、日誌記錄系統、定時調度系統搜索引擎系統、分布式文

java企業架構 spring mvc +mybatis + KafKa+Flume+Zookeeper

spring mvc spring springmvc+mybatis redis分布式緩存 restful分布式服務 dubbo + springmvc 平臺簡介 Jeesz是一個分布式的框架,提供項目模塊化、服務化、熱插拔的思想,高度封裝安全性的Java EE快速開

eclipse搭建maven project的spring4 spring mvc mybatis

framework sta port cti https oca web工程 nis lang 一,先確定已經安裝好了Eclipse Java EE IDE for Web Developers我用的是如下版本 Version: Neon.3 Release (4.6.3)

好文分享--java企業架構 spring mvc +mybatis + KafKa+Flume+Zookeeper分布式架構

分布式框架 Maven Springmvc mybatis Dubbo ZooKeeper Redis FastDFS ActiveMQ 開發工具 1.Eclipse IDE:采用Maven項目管理,模塊化。 2.代碼生成:通過界面方式簡單配置,自動生

Spring+Spring MVC+Mybatis+Maven搭建多模塊項目(二)

自己 var user inf 接口 work 過程 cal ber 基於第一篇文章《Spring+Spring MVC+Mybatis+Maven搭建多模塊項目(一)》的基礎上,寫一個完整的示例,從頁面到Dao層的整個過程 1、先在bug.model模塊下創建com.bu

SMM框架的搭建和測試(Spring MVC+MyBatis

meta true model spa const -i ssp pan div Spring MVC:MVC框架,通過Model-View-Controller模式很好的將數據,業務與展現進行分離。 MyBatis:數據持久層框架 我這裏使用的是MyEclipse 2

java電子商務系統源碼 Spring MVC+mybatis+spring boot+spring security

電子商務平臺 word 解決方案 功能 截圖 mybatis 互聯 包括 數據監控 鴻鵠雲商大型企業分布式互聯網電子商務平臺,推出PC+微信+APP+雲服務的雲商平臺系統,其中包括B2B、B2C、C2C、O2O、新零售、直播電商等子平臺。 分布式、微服務、雲架構電子商

spring mvc+mybatis ios android整合cms內容發布平臺

減少 連接 jquer 登錄 jdk版本 sso href com 分享圖片 開發語言: java、ios、android 部署平臺: linux、window jdk版本:JDK1.7以上版本 開發工具: eclipse、idea等 服務器中間件:Tomcat

基於Vue+Spring MVC+MyBatis+Shiro+Dubbo開發的分布式後臺管理系統

java dubbo shiro vue 分布式 最近項目中使用了shiro做權限管理,在開發過程中也踩了一些坑,於是便有了開發個應用鞏固一下所學知識的想法,正好在開發的過程裏學習一下Vue開發。技術棧方面,現在前後端分離大行其道,於是也采用了前後端分離的模式,前端基於Vue+Elemen

spring mvc +mybatis + KafKa+Flume+Zookeeper分布式架構

可用 src fast ges mvc schedule cit size fas 開發工具 1.Eclipse IDE:采用Maven項目管理,模塊化。 2.代碼生成:通過界面方式簡單配置,自動生成相應代碼,目前包括三種生成方式(增刪改查):單表、一對多、樹結構。生成後的

java企業架構 spring mvc +mybatis + KafKa+Flume+Zookeep

activit res dea cms art restful work 管理 數據庫讀寫分離 開發工具 1.Eclipse IDE:采用Maven項目管理,模塊化。 2.代碼生成:通過界面方式簡單配置,自動生成相應代碼,目前包括三種生成方式(增刪改查):單表、一對多、樹結

Spring4 + Spring MVC + MyBatis 整合思路

ack ans bean shape 特性 smu locale serial shmat 1、Spring框架的搭建這個很簡單,只需要web容器中註冊org.springframework.web.context.ContextLoaderListener,並指定spri

spring入門(六) spring mvc+mybatis

odi 創建 mode utf from 針對 namespace tid oca 1.引入依賴 1 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> 2 <depe

MyBatis-Plus程式碼生成器,根據表名生成各個模組的程式碼

根據表名生成Entity、Mapper、Mapper XML、Service、Controller 等各個模組的程式碼,程式碼如下(根據官網demo修改的),可以正常執行 package com; import com.baomidou.mybatisplus.annotation.DbTyp

通過idea建立Maven專案整合Spring+spring mvc+mybatis

寫這篇文章是為了整理一下idea下整合maven專案的步驟,也為了以後讓室友們參考 建立專案 File→new→project        

IDEA多模組SSM框架搭建(IDEA+tomcat+maven+mysql+spring+spring mvc+mybatis)總結

Tomcat版本:8.5.27  jdk版本:1.8 Idea版本:2017.3.5 1.建立一個根模組 不勾選任何值,直接next      根模組建立成功如下: src目錄不需要可以刪除 2.建立javadao模組

SSM(Spring+Spring MVC+Mybatis)開發前臺後功能完整的java開源部落格管理系統

專案描述 本專案通過SSM(SpringMVC+Mybatis+Spring)框架編寫的一個人部落格管理系統,使用hexo主題,以及MAVEN進行對專案管理,並且前端具有粒子和點選愛心效果.後端的頁面框架為bootstrap.資料庫為mysql. 執行(執行)環境 jdk8+tomcat8+mysql+

Java架構-Spring MVC+Mybatis+cms實現UC瀏覽器文章相關功能

最近公司在模擬UC瀏覽器做一個簡單的cms系統,主要針對於企業內部的文章瀏覽需求,這邊考慮使用者大多用mobile瀏覽文章內容,故使用原生的ios和android進行開發,後面也會整合html5。 使用前後端分離解決方案(服務化的方式) 文章分為普通型別、視訊型別