1. 程式人生 > >程式碼自動生成(三)

程式碼自動生成(三)

在上兩篇文章中講述瞭如何使用freemarker生成程式碼的方法,在第二篇的程式碼中存在幾個ftl格式的檔案,那麼在這篇文章中將貼出來對應的程式碼;
本來是打算在上一篇中完善好直接放上去的,中間因為牽涉到程式碼的變動,以及對應生成mybatis  mapper.xml整合的完善等等原因,一直推到今天;

1.實體類對應的模板

package ${packageName};
import java.io.Serializable;
public class ${className} implements Serializable {
    
     private static final long serialVersionUID = 1L;    
    
	<#list columns as column>
		private ${column.type.javaType} ${column.fieldName};
		
		public void set${column.methodName}(${column.type.javaType} ${column.fieldName}){
			this.${column.fieldName}=${column.fieldName};
		}
		
		public ${column.type.javaType} get${column.methodName}(){
			return ${column.fieldName};
		}
		
	</#list>




}
2.dao對應的模板
package ${packageName};
import ${basePath}.entity.${className};
import com.xx.wdcloud.mybatis.dao.BaseDao;
public interface ${className}Dao extends BaseDao<${className}, String> {
    

}
3.daoImpl對應的模板
package ${packageName};

import org.springframework.stereotype.Repository;

import ${basePath}.dao.${className}Dao;
import ${basePath}.entity.${className};
import com.xx.wdcloud.mybatis.dao.impl.BaseDaoImpl;

@Repository
public class ${className}DaoImpl extends BaseDaoImpl<${className}, String> implements ${className}Dao{


}

4.service對應的模板
package ${packageName};

import ${basePath}.entity.${className};
import com.xx.wdcloud.mybatis.service.BaseService;

public interface ${className}Service extends BaseService<${className}, String> {

}
5.serviceImpl對應的模板
package ${packageName};
import org.springframework.stereotype.Service;

import ${basePath}.entity.${className};
import com.xx.wdcloud.mybatis.service.impl.BaseServiceImpl;
import ${basePath}.service.${className}Service;

@Service
public class ${className}ServiceImpl extends BaseServiceImpl<${className}, String> implements ${className}Service{
	
	

}


6.mapper對應的模板
<?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="${packageName}.entity.${className}">
	<resultMap id="BaseResultMap" type="${packageName}.entity.${className}">
		<#list columns as column>
			<#if column.isPK="yes">			
			<id property="id" column="${column.name}" />
			<#else>	
			<result property="${column.fieldName}" column="${column.name}" />
			</#if>
		</#list>
	</resultMap>
	
	<sql id="Base_Column_List">
		<#list columns as column>
			<#if column.isPK="yes">
			${column.name}<#if column.hasNext>,</#if>
			<#else>
			${column.name}<#if column.hasNext>,</#if>
			</#if>
		</#list>
	</sql>
	
	<sql id="Where_Clause_Id">
		<#list columns as column>
		<#if column.isPK="yes">			        
		and ${column.name} = ${r"#{"}${column.fieldName}${r"}"}		
		</#if>
		</#list>
	</sql>
	
	<sql id="Where_Clause_Normal">
		<#list columns as column>
			<#if column.isPK="no">
			<if test="${column.fieldName} !=  null">
				and ${column.name}=${r"#{"}${column.fieldName}${r"}"} 
			</if>
			</#if>
		</#list>
	</sql>
	<!--根據主鍵查詢 -->
	<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">	   
	    select 
	    <include refid="Base_Column_List" />
	    from ${tableName}
	    <where>
			<include refid="Where_Clause_Id" />
		</where>
   </select>
   <!--根據主鍵刪除 -->
   <delete id="deleteByPrimaryKey" parameterType="java.lang.String">   
    delete from ${tableName}
    <where>
		<include refid="Where_Clause_Id" />
	</where>
  </delete>
  <!--新增儲存 -->
  <insert id="insert" parameterType="${packageName}.entity.${className}" keyProperty="id">
		INSERT INTO	${tableName}
		(
		<include refid="Base_Column_List" />
		)
		VALUES(
			<#list columns as column>				
			${r"#{"}${column.fieldName}${r"}"}<#if column.hasNext>,</#if>		
			</#list>
		)
   </insert>
   <!--選擇性儲存-->
  <insert id="insertSelective" parameterType="${packageName}.entity.${className}">
    INSERT INTO	${tableName}
    <trim prefix="(" suffix=")" suffixOverrides=",">
    	<#list columns as column>
    	<if test="${column.fieldName} !=null">
	      ${column.name}<#if column.hasNext>,</#if>
	    </if>
    	</#list>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
    	<#list columns as column>
    	<if test="${column.fieldName} !=null">
	      ${r"#{"}${column.fieldName}${r"}"}<#if column.hasNext>,</#if>
	    </if>
    	</#list>
    </trim>  
  </insert>
  <!--根據主鍵選擇性更新部分欄位 -->
  <update id="updateByPrimaryKeySelective" parameterType="${packageName}.entity.${className}">    
    update ${tableName}
    <set>
      <#list columns as column>
    	<if test="${column.fieldName} !=null">
	      ${column.name} = ${r"#{"}${column.fieldName}${r"}"}<#if column.hasNext>,</#if>
	    </if>
	   </#list>
    </set>
    <where>
		<include refid="Where_Clause_Id" />
	</where>
  </update>
  
  <select id="listAllByParam" parameterType="java.util.Map" resultMap="BaseResultMap">
   	select 
	<include refid="Base_Column_List" />
 	from ${tableName}
 	<where>
	 	<#list columns as column>
	    <if test="${column.fieldName} !=null">
		and ${column.name} = ${r"#{"}${column.fieldName}${r"}"}
		</if>
		</#list>
 	</where>
  </select>
  
  <update id="updateselectByIds" parameterType="java.util.Map" >
  update 
   <set>
  	<#list columns as column>
    <if test="${column.fieldName} !=null">
	 ${column.name}=${r"#{"}${column.fieldName}${r"}"}<#if column.hasNext>,</#if>
	</if>
    </#list>
   </set>
    where <![CDATA[ id in (${r"#{"}idsIn${r"}"}) ]]>
  </update>
  
  <select id="listDatas" parameterType="java.util.Map" resultMap="BaseResultMap">
    select 
	<include refid="Base_Column_List" />
 	from ${tableName}
 	<where>
		<include refid="Where_Clause_Normal" />
	</where>
  	<if test="orderCondition != null" >
      order by ${r"#{"}orderCondition${r"}"},${r"#{"}orderDirection${r"}"}
    </if>
    <if test="offSet!=null" >
      limit ${r"#{"}offSet${r"}"},${r"#{"}pageSize${r"}"}
    </if>
  </select>
  
   <select id="countDatas"  resultType="java.lang.Integer">
    select count(id)
    from ${tableName}
    <where>
		<include refid="Where_Clause_Normal" />
	</where>
   </select>
</mapper>


ok,上面的基本完成了從entity到service的模板生成,下面看一下test
package com.xx.common.code.autocode;

import java.io.IOException;
import java.sql.SQLException;

import freemarker.template.TemplateException;

public class AutoCodeGenerationDemo {

	public static void main(String[] args) throws ClassNotFoundException, IOException, TemplateException, SQLException {
		String url="jdbc:mysql://10.67.18.17:3306/xx";
		String username="xx";
		String password="xx";
		String driver="com.mysql.jdbc.Driver";
		String tableName="t_test_operate_log";
		String basePath="com.xx.test";
		String templateDir=System.getProperty("user.dir")+"/src/main/java/"+"com/xx/common/code/template";
		
		String generateFilePath=System.getProperty("user.dir")+"/src/main/java/"+basePath.replace(".", "/");
		AutoGenerationJavaCode autoGenerationJavaCode=
				new AutoGenerationJavaCode(url, username, password, driver, tableName, generateFilePath, "com.xx.test");
		autoGenerationJavaCode.autoGenerationJavaCode();
		
		
		/*AutoCodeGenerationDemo demo=new AutoCodeGenerationDemo();
		demo.getPath();*/
	}
	
	public void getPath(){
		System.out.println(this.getClass().getResource("/").getPath());;
		System.out.println(this.getClass().getResource("").getPath());
		
		System.out.println(this.getClass().getResource("/").getFile());
		System.out.println(this.getClass().getResource("").getFile());
		
		System.out.println(System.getProperty("user.dir"));
		
		 System.out.println(System.getProperty("java.class.path"));
	}
	
	
}



相關推薦

程式碼自動生成

在上兩篇文章中講述瞭如何使用freemarker生成程式碼的方法,在第二篇的程式碼中存在幾個ftl格式的檔案,那麼在這篇文章中將貼出來對應的程式碼; 本來是打算在上一篇中完善好直接放上去的,中間因為牽涉到程式碼的變動,以及對應生成mybatis  mapper.xml整合的

程式碼自動生成資料庫表字段生成mybaties 對映配置檔案**mapper.xml

上一篇寫的是根據資料庫欄位生成java bean,雖然有一些缺陷,但是大家可以根據字的需求進行優化,本篇部落格寫的是根據資料庫表字段生成mybaties 對映配置檔案**mapper.xml,之後還會陸續更新mybaties對應的介面。歡迎大家來點評,指出不足之處。 下面

實現一個程式碼自動生成:模板引擎Freemarker

目錄 前言 模板引擎FreeMarker 模板引擎是什麼? FreeMarker是什麼? FreeMarker如何使用? 加入依賴 建立Configuratio

Mybatis -程式碼自動生成generatorConfig.xml配置資訊詳解

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1

Mybatis最入門---程式碼自動生成generatorConfig.xml配置

第一種方式:通過Main方法執行配置檔案。 -------------------------------------------------------------------------------------------------------------------------------------

Mybatis -程式碼自動生成generatorConfig.xml

對於一個欄位太多的表,如果一個一個的去寫 mapper和pojo太累還容易出錯,可用mybatis的工具處理這些事情 1. 環境: Maven 3.39 Oracle 11g Mybatis 3.4.1 Maven project

程式碼自動生成-資料庫表字段轉換成java bean

最近做系統老做一些相同的工作,就想寫一自動生成程式碼的工具類來方便以後的開法,我從網上整理修改了一些方法感覺還不錯,接下來我還陸續跟新一些自動生成程式碼的工具類,希望對大家有用。覺得不好輕點噴。import java.io.BufferedWriter; import

【原創】Hibernate自動生成2

成了 OS class 項目重構 alt index AS url 改名 本實戰是博主初次學習Java,分析WCP源碼時,學習HibernateTools部分的實戰,由於初次接觸,難免錯誤,僅供參考,希望批評指正。 開發環境: Eclipse Version: Photo

關於姿態解算與融合的程式碼註釋篇

        加速度計和陀螺儀都能計算出姿態,但為何要對它們融合呢,是因為加速度計對振動之類的擾動很敏感,但長期資料計算出的姿態可信,而陀螺儀雖然對振動這些不敏感,但長期使用陀螺儀會出現漂移,因此我們要進行互補,短期相信陀螺,長期相信加計。不過,其實加計無法對航向角進行

Android 學習之《Android程式設計權威指南》第二版 程式碼+筆記整理

(程式碼)解決GeoQuiz應用旋轉恢復第一題的BUG 一、產生BUG的原因 1. 裝置旋轉時,系統會銷燬當前的QuizActivity例項,然後建立一個新的例項,這時陣列索引(mCurrentIndex)會初始化為0,因此使用者看到的還是第一道題目。 2.

第X屆智慧車攝像頭組程式碼全解析------初始化配置

作者:Sumjess   本次部落格內容:   該初始化函式下有以下語句: 一、key_init(KEY_MAX);  ---  按鍵初始化: 用在山外的lcd上,直接呼叫山外的庫函式,該函式內部並無修改,截圖如下

jQuery選擇器程式碼詳解——tokenize方法

原創文章,轉載請註明出處,多謝! /* * tokenize方法是選擇器解析的核心函式,它將選擇器轉換成兩級陣列groups * 舉例: * 若選擇器為“div.class,span”,則解析後的結果為: * group[0][0] = {type

Faster RCNN程式碼詳解:資料處理的整體結構

在上一篇部落格中介紹了Faster RCNN網路結構的構建:Faster RCNN程式碼詳解(二):網路結構構建。網路結構是Faster RCNN演算法中最重要兩部分之一,這篇部落格將介紹非常重要的另一部分:資料處理。 資料處理是通過AnchorLoader類

swift程式碼之路AF網路請求

建立資料請求類 import UIKit import AFNetworking //請求方法 /// - GET: get /// - POST: post enum RequsetMethod:String { case GET = "GET" ca

RPG遊戲《黑暗之光》流程介紹與程式碼分析之:角色控制系統的實現

第三章:角色控制本篇部落格主要對人物移動及其相關操作進行分析,主要包括主角以及鏡頭的移動。在遊戲介面中,我們使用Camera作為視角。為了方便之後判斷當前tag,我們新建一個Tag指令碼,存入一些tag資訊,之後呼叫就不容易出錯using UnityEngine; using

Spring boot入門:SpringBoot整合結合AdminLTE(Freemarker),利用generate自動生成程式碼,利用DataTable和PageHelper進行分頁顯示

  關於SpringBoot和PageHelper,前篇部落格已經介紹過Spring boot入門(二):Spring boot整合MySql,Mybatis和PageHelper外掛,前篇部落格大致講述了SpringBoot如何整合Mybatis和Pagehelper,但是沒有做出實際的範例,本篇部落格是連

【從零開始搭建自己的.NET Core Api框架】集成輕量級ORM——SqlSugar:3.3 自動生成實體類

i++ 點運算 自己的 yui content project style ref 數據庫表 系列目錄 一. 創建項目並集成swagger   1.1 創建   1.2 完善 二. 搭建項目整體架構 三. 集成輕量級ORM框架——SqlSugar   3.1 搭建環境  

spring boot 整合 mybatis程式碼自動生成

環境簡介:Idea ,JDK8,MAVEN 開工: 第一步建立專案 第二步選擇maven依賴 第三步,補充自己需要用到的maven依賴(通過工具沒法自動完成的) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="

Spring Boot MyBatis程式碼自動生成和輔助外掛

一、簡介 1.1 MyBatis Generator介紹 MyBatis Generator 是MyBatis 官方出品的一款,用來自動生成MyBatis的 mapper、dao、entity 的框架,讓我們省去規律性最強的一部分最基礎的程式碼編寫。 1.2 MyBatis Generator使用 MyBat

mybatis-generator程式碼快速自動生成已經寫好程式碼給你了

mybatis-generator程式碼快速自動生成: 沒有實習之前寫的MyBatis的Mapping.XML都是手寫的,實習老大教了如何快速利用mybatis-generator程式碼自動生成工具來快速書寫xml,現在分享給大家。 1.首先,我先建立一個stu