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

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics