`
wangkechao.dream
  • 浏览: 45869 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
352630cf-f670-3416-b946-55dec5cd787c
设计模式
浏览量:29979
社区版块
存档分类
最新评论

freemaker代码生成器

阅读更多

介绍:

        根据表结构生成mybatis对应的实现体和Mpper.xml文件,我们使用的是mysql数据库

需要的jar包 freemarker.jar mysql.jar 如附件

 

1. 数据库连接类

 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 数据库连接设置
 * 
 * @author king
 * 2014-5-5
 */
public class DBConnectionUtils {
	private static Connection conn = null;
 
	public static Connection getJDBCConnection() {
		if (null == conn) {
			try {
				Class.forName("com.mysql.jdbc.Driver"); // 
				String url = "jdbc:mysql://127.0.0.1:3306/risk_monitor";//
				String user = "root";
				String password = "root";
				conn = DriverManager.getConnection(url, user, password);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return conn;
	}

	public static void close(){
		if(null!=conn){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
}

 2. column类

 

    

public class Column {

	private String columnName;
	private String columnType;
	private String attributeName;
	private String attributeType;
	public String getColumnName() {
		return columnName;
	}
	public void setColumnName(String columnName) {
		this.columnName = columnName;
	}
	public String getColumnType() {
		return columnType;
	}
	public void setColumnType(String columnType) {
		this.columnType = columnType;
	}
	public String getAttributeName() {
		return attributeName;
	}
	public void setAttributeName(String attributeName) {
		this.attributeName = attributeName;
	}
	public String getAttributeType() {
		return attributeType;
	}
	public void setAttributeType(String attributeType) {
		this.attributeType = attributeType;
	}

}

 

3. generator类

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;


public class Generator {
	private Configuration cfg;
	private Connection connection;
	private void initial() {
		try {
			if (null == cfg) {
				cfg = new Configuration();
			}
			cfg.setDirectoryForTemplateLoading(new File(
					"src/com/chinaebi/codegen/template"));
			connection = DBConnectionUtils.getJDBCConnection();
		} catch (IOException e) {
			e.printStackTrace();
		}
		cfg.setObjectWrapper(new DefaultObjectWrapper());
	}
	public void generator() throws Exception {
		initial();
		cfg.setDefaultEncoding("utf-8");
		Template entityTemplate = cfg.getTemplate("entity.ftl");
		Template sqlTemplate = cfg.getTemplate("sql.ftl");
		List<Map<String, Object>> templates = generatorTemplateData();

		for (Map<String, Object> o : templates) {
//			Writer out = new OutputStreamWriter(System.out);//
//			打印到控制台
//			Writer outFile = new OutputStreamWriter(new FileOutputStream(
//					"src/com/chinaebi/codegen/template/"+o.get("tableName")+".java"), "gb2312");
//			entityTemplate.process(o, out);
//			entityTemplate.process(o, outFile);
//			out.flush();
			//输出到文件
	        File beanFile = new File("src/com/chinaebi/codegen/template/entity/"+o.get("beanName")+".java");  
	        Writer beanWriter = new FileWriter(beanFile); 
	        entityTemplate.process(o, beanWriter);  
	        beanWriter.close(); 
	        File sqlFile = new File("src/com/chinaebi/codegen/template/sql/Tbl_"+o.get("beanName")+"Mapper.xml");  
	        Writer sqlWriter = new FileWriter(sqlFile);  
	        sqlTemplate.process(o, sqlWriter);  
	        sqlWriter.close(); 
	        System.out.println("生成:"+o.get("beanName"));
		}
	}


	private List<Map<String, Object>> generatorTemplateData() throws Exception {
		DatabaseMetaData dbmd = connection.getMetaData();
		List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
		String[] tables = { "Table" };
		ResultSet tableSet = dbmd.getTables(null, null, "%", tables);//
		while (tableSet.next()) {
			Map<String, Object> map = new HashMap<String, Object>();
			String tableName = tableSet.getString("TABLE_NAME");
			ResultSet columnSet = dbmd.getColumns(null, "%", tableName, "%");
			List<Column> columns = new ArrayList<Column>();// 
			while (columnSet.next()) {

				String columnName = columnSet.getString("COLUMN_NAME");
				String attributeName = handlerColumnName(columnSet.getString("COLUMN_NAME"));
				String columnType = columnSet.getString("TYPE_NAME");
				String attributeType = handlerColumnType(columnSet.getString("TYPE_NAME"));
				Column column = new Column();
				column.setColumnName(columnName);
				column.setColumnType(columnType);
				column.setAttributeName(attributeName);
				column.setAttributeType(attributeType);
				columns.add(column);
			}
			map.put("tableName", tableName);
			map.put("beanName", handlerTableName(tableName));
			map.put("columns", columns);
			lists.add(map);
		}
		connection.close();
		return lists;
	}

	public static String handlerColumnName(String oldName) {
		String[] arrays = oldName.split("_");
		String newName = "";
		if (arrays.length > 0) {
			newName = arrays[0];
		}
		for (int i = 1; i < arrays.length; i++) {
			newName += (arrays[i].substring(0, 1).toUpperCase() + arrays[i]
					.substring(1, arrays[i].length()));
		}
		return newName;
	}

	public static String handlerTableName(String oldName) {
		String[] arrays = oldName.split("_");
		String newName = "";
		for (int i = 0; i < arrays.length; i++) {
			newName += (arrays[i].substring(0, 1).toUpperCase() + arrays[i]
					.substring(1, arrays[i].length()));
		}
		return newName;
	}

	public static String handlerColumnType(String oldType) {
		if (oldType.toUpperCase().startsWith("VARCHAR")) {
			return "String";
		}
		if (oldType.toUpperCase().startsWith("INT")) {
			return "int";
		}
		if (oldType.toUpperCase().startsWith("DATETIME")) {
			return "Date";
		}if (oldType.toUpperCase().startsWith("CHAR")) {
			return "String";
		}
		if (oldType.toUpperCase().startsWith("TINYINT")) {
			return "int";
		}
		if (oldType.toUpperCase().startsWith("BIT")) {
			return "int";
		}
		if (oldType.toUpperCase().startsWith("BIGINT")) {
			return "BigInteger";
		}
		return oldType;
	}
}

 4.运行方法

/**
 * 运行方法
 * 
 * @author king
 * 2014-5-5
 */
public class Main {
	public static void main(String[] args) throws Exception {
		Generator gen = new Generator();
		gen.generator();
	}
}

 4. 模板

    entity.ftl

   

/**
 * 对应表 ${tableName}
 * @author king
 *
 */
public class ${beanName} implements java.io.Serializable{
 <#list columns as item>
  private ${item.attributeType} ${item.attributeName};/*对应表中${item.columnName}*/
 </#list>
 <#list columns as item>  
    public ${item.attributeType} get${item.attributeName?cap_first}(){  
      return ${item.attributeName};  
    }  
    public void set${item.attributeName?cap_first}(${item.attributeType} ${item.attributeName}){  
      this.${item.attributeName} = ${item.attributeName};  
    }  
  </#list>  
}

    sql.ftl

  

<?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">

 <!--表 ${tableName}操作方法-->
<mapper namespace="${beanName}Manager">
	<resultMap type="${beanName}" id="${beanName}Map">
		 <#list columns as item>
		 	<result property="${item.attributeName}" column="${item.columnName}" />
		 </#list>
	</resultMap>
    <!--分页查询 记录-->
	<select id="queryPage" parameterType="${beanName}" resultMap="${beanName}Map">
		select * from ${tableName} t
		where 1=1 
		<#list columns as item>
    		<if test="${item.attributeName} != null and ${item.attributeName} != ''">
    			 and t.${item.columnName} = ${'#'}{${item.attributeName}}
    		</if>
        </#list>
        limit ${'#'}{startRow},${'#'}{limit}
	</select>
	<!--分页查询  计数-->
	<select id="queryPageCount" parameterType="${beanName}" resultType="int">
		select count(*) from ${tableName} t
		where 1=1 
		<#list columns as item>
    		<if test="${item.attributeName} != null and ${item.attributeName} != ''">
    			 and t.${item.columnName} = ${'#'}{${item.attributeName}}
    		</if>
        </#list>
	</select>
	<!--查询方法-->
	<select id="select" parameterType="${beanName}" resultMap="${beanName}Map">
		select * from ${tableName} t
		where 1=1 
		<#list columns as item>
    		<if test="${item.attributeName} != null and ${item.attributeName} != ''">
    			 and t.${item.columnName} = ${'#'}{${item.attributeName}}
    		</if>
        </#list>
	</select>
	<!--添加方法-->
	<insert id="insert" parameterType="${beanName}">
		insert into ${tableName}(
			<#list columns as item>
				${item.columnName},
			</#list>
		) values(<#list columns as item>
				${'#'}{${item.attributeName}},
			</#list>)
	</insert>
	<!--更新方法-->
	<update id="update" parameterType="${beanName}">
		update ${tableName} set 
		<#list columns as item>
    		<if test="${item.attributeName} != null and ${item.attributeName} != ''">
    			 t.${item.columnName} = ${'#'}{${item.attributeName}},
    		</if>
        </#list>
		where
		1=1
		<#list columns as item>
    		<if test="${item.attributeName} != null and ${item.attributeName} != ''">
    			and  t.${item.columnName} = ${'#'}{${item.attributeName}}
    		</if>
        </#list>
	</update>
	<!--删除方法-->
	<delete id="delete" parameterType="${beanName}">
		delete from ${tableName} where 1=1
		<#list columns as item>
    		<if test="${item.attributeName} != null and ${item.attributeName} != ''">
    			and t.${item.columnName} = ${'#'}{${item.attributeName}}
    		</if>
        </#list>
	</delete>
</mapper>



	

 

    

      

0
0
分享到:
评论

相关推荐

    Freemarker代码生成器实体映射xml的ftl模板文件

    Freemarker代码生成器是一种强大的工具,用于自动生成符合特定需求的代码,它可以极大地提高开发效率,减少重复劳动。在Java开发中,特别是在企业级应用中,XML文件常常被用来作为配置文件,其中包含了对象与数据库...

    基于spring boot freemarker代码生成器

    代码生成器支持model、Mapper、Dao、Service、ServiceImpl、Controller 一次性的生成,支持同时生成多张表,此代码生成器依赖JAR包比较少,除了必用Freemarker 和JDBC之外基本上完全个人编写

    freemarker实现代码生成器

    在IT行业中,利用Freemarker实现代码生成器是一种高效的方法,可以自动化创建常见的代码结构,减少手动编写重复性代码的工作量。下面将详细介绍如何使用Freemarker来创建一个代码生成器。 一、Freemarker基础 1. ...

    freemarker代码生成器示例

    源码 用于Mybatis框架下生成Model.java和Mapper.xml文件, 内含采用mysql数据库建表文件, 分别在ModelHandler类和MapperXMLHandler类中的main方法中执行。 文件存放路径D://generatordata。

    基于Freemarker模板的代码生成器工具

    本篇将重点介绍一款名为“基于Freemarker模板的代码生成器工具”,这是一款纯Java实现的工具,利用了Freemarker模板引擎的强大功能。 **一、Freemarker模板引擎** Freemarker是一个开源的模板语言,用于生成动态...

    mybatis自动生成代码的模板--freemarker版本.zip

    附件包含了mybatis-plus自动生成代码,基于freemarker的模板。包括常规的curd。 【特点】针对每个接口都有对应的入参和出参,不公用entity。 如,add接口,则入参会自动生成为addEntityReq。具体可下载模板进行查看...

    基于freemarker的JAVA代码生成工具

    5. **运行代码生成器**:执行工具提供的主类或功能,选择要生成代码的数据库表,程序会根据表结构自动生成对应的Controller、Model、Service、Mapper以及MyBatis的XML文件。 6. **查看生成的代码**:生成的代码会...

    freemaker代码生成工具

    总的来说,Freemarker代码生成工具通过模板化的方式,为Java开发带来了极大的便利,降低了开发成本,提高了代码的规范性和一致性。对于大型项目或团队开发来说,这样的自动化工具是不可或缺的,它可以确保代码质量并...

    基于Freemarker代码生成程序

    2. 主要的Java源代码文件:如代码生成器、数据库操作类、模板解析类等。 3. 配置文件:用于设置数据库连接信息和其他必要的参数。 4. 可能还包含一个示例或测试用例,帮助用户了解如何使用该工具。 总的来说,"基于...

    Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码

    Java开发中,自动化的代码生成可以极大地提高开发效率,减少重复劳动。本主题涉及的核心技术是使用Freemarker模板引擎来生成DTO(Data Transfer Object)、DAO(Data Access Object)、RowMapper、BO(Business ...

    FreeMarker,Struts2,代码生成器

    在使用FreeMarker和Struts2时,代码生成器可以结合这两者的优势,自动生成符合这两框架规范的代码。例如,对于视图层,代码生成器可以基于FreeMarker模板生成HTML页面;而对于控制器层,可以生成基于Struts2 Action...

    基于SpringBoot的Freemarker模板代码生成器.rar

    项目下载后自行修改...启动项目后进入http://xxxx.xxxx.xxxx:xxx/swagger-ui.html查看相关接口,支持通过接口设置数据库链接切换后自动重启项目,代码生成器支持model、Mapper、Dao层生成后会打包成Zip文件提供下载。

    springmvc+mybatis 和一个简单的freemarker代码生成工具

    在实际项目中,一个简单的代码生成工具可能会利用SpringMVC和MyBatis的组合,通过用户输入的表结构信息,自动生成对应的实体类、Mapper接口、Mapper XML文件以及FreeMarker模板。这样的工具可以极大地提高开发效率,...

    基于Freemarker模板的代码生成器前台页面模板文件

    在给定的压缩包文件中,我们可以看到几个关键的FTL(FreeMarker Template Language)文件,它们是代码生成器的前台页面模板,包括Browse.ftl、EditPage.ftl、AddPage.ftl和Detail.ftl。 1. **Browse.ftl**:这个...

    代码生成工具

    代码生成工具是软件开发过程中非常实用的一个辅助工具,它的主要功能是自动生成代码,从而减少开发者手动编写重复性代码的时间,提高工作效率。本工具特别强调的是根据数据库表生成C#和JAVA的实体类,这意味着它能够...

    使用Spring boot + FreeMarker 实现代码生成功能的Demo

    使用Spring boot + FreeMarker 实现代码生成功能,完整案例可以查看 eladmin 项目,教程地址: https://www.ydyno.com/archives/1177.html

    代码生成器 代码生成器 Demo.zip

    使用代码生成器,只需要先按照下面的数据库设计规范设计好数据库,然后使用代码生成器就能一键生成项目代码,生成的代码有:实体类、DAO接口及实现类、Service接口及实现类、Controller代码框架。

    java代码生成器mybatis

    MyBatis代码生成器支持使用FreeMarker或Velocity作为模板引擎,用户可以根据需要修改或创建新的模板,以满足特定的代码风格和项目规范。例如,可以通过修改模板来添加Lombok注解,实现无getter/setter的简洁编码。 ...

    Java 代码生成器

    Java代码生成器是一种工具,它能够自动生成符合特定规范或需求的Java源代码,从而提高开发效率,减少重复性工作。这种工具通常基于模板引擎,允许开发者定义模板,然后根据输入的数据生成相应的代码。在Java领域,...

    毕业设计之代码生成器.zip

    2. **模板引擎**:代码生成器背后的实现关键在于模板引擎,如Jinja2、Freemarker等,它们允许开发者定义可定制的代码模板,通过替换占位符来生成目标代码。 3. **iOS开发环境**:iOS应用开发主要使用Xcode集成开发...

Global site tag (gtag.js) - Google Analytics