介绍:
根据表结构生成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>
相关推荐
Freemarker代码生成器是一种强大的工具,用于自动生成符合特定需求的代码,它可以极大地提高开发效率,减少重复劳动。在Java开发中,特别是在企业级应用中,XML文件常常被用来作为配置文件,其中包含了对象与数据库...
代码生成器支持model、Mapper、Dao、Service、ServiceImpl、Controller 一次性的生成,支持同时生成多张表,此代码生成器依赖JAR包比较少,除了必用Freemarker 和JDBC之外基本上完全个人编写
在IT行业中,利用Freemarker实现代码生成器是一种高效的方法,可以自动化创建常见的代码结构,减少手动编写重复性代码的工作量。下面将详细介绍如何使用Freemarker来创建一个代码生成器。 一、Freemarker基础 1. ...
源码 用于Mybatis框架下生成Model.java和Mapper.xml文件, 内含采用mysql数据库建表文件, 分别在ModelHandler类和MapperXMLHandler类中的main方法中执行。 文件存放路径D://generatordata。
本篇将重点介绍一款名为“基于Freemarker模板的代码生成器工具”,这是一款纯Java实现的工具,利用了Freemarker模板引擎的强大功能。 **一、Freemarker模板引擎** Freemarker是一个开源的模板语言,用于生成动态...
附件包含了mybatis-plus自动生成代码,基于freemarker的模板。包括常规的curd。 【特点】针对每个接口都有对应的入参和出参,不公用entity。 如,add接口,则入参会自动生成为addEntityReq。具体可下载模板进行查看...
5. **运行代码生成器**:执行工具提供的主类或功能,选择要生成代码的数据库表,程序会根据表结构自动生成对应的Controller、Model、Service、Mapper以及MyBatis的XML文件。 6. **查看生成的代码**:生成的代码会...
总的来说,Freemarker代码生成工具通过模板化的方式,为Java开发带来了极大的便利,降低了开发成本,提高了代码的规范性和一致性。对于大型项目或团队开发来说,这样的自动化工具是不可或缺的,它可以确保代码质量并...
2. 主要的Java源代码文件:如代码生成器、数据库操作类、模板解析类等。 3. 配置文件:用于设置数据库连接信息和其他必要的参数。 4. 可能还包含一个示例或测试用例,帮助用户了解如何使用该工具。 总的来说,"基于...
Java开发中,自动化的代码生成可以极大地提高开发效率,减少重复劳动。本主题涉及的核心技术是使用Freemarker模板引擎来生成DTO(Data Transfer Object)、DAO(Data Access Object)、RowMapper、BO(Business ...
在使用FreeMarker和Struts2时,代码生成器可以结合这两者的优势,自动生成符合这两框架规范的代码。例如,对于视图层,代码生成器可以基于FreeMarker模板生成HTML页面;而对于控制器层,可以生成基于Struts2 Action...
项目下载后自行修改...启动项目后进入http://xxxx.xxxx.xxxx:xxx/swagger-ui.html查看相关接口,支持通过接口设置数据库链接切换后自动重启项目,代码生成器支持model、Mapper、Dao层生成后会打包成Zip文件提供下载。
在实际项目中,一个简单的代码生成工具可能会利用SpringMVC和MyBatis的组合,通过用户输入的表结构信息,自动生成对应的实体类、Mapper接口、Mapper XML文件以及FreeMarker模板。这样的工具可以极大地提高开发效率,...
在给定的压缩包文件中,我们可以看到几个关键的FTL(FreeMarker Template Language)文件,它们是代码生成器的前台页面模板,包括Browse.ftl、EditPage.ftl、AddPage.ftl和Detail.ftl。 1. **Browse.ftl**:这个...
代码生成工具是软件开发过程中非常实用的一个辅助工具,它的主要功能是自动生成代码,从而减少开发者手动编写重复性代码的时间,提高工作效率。本工具特别强调的是根据数据库表生成C#和JAVA的实体类,这意味着它能够...
使用Spring boot + FreeMarker 实现代码生成功能,完整案例可以查看 eladmin 项目,教程地址: https://www.ydyno.com/archives/1177.html
使用代码生成器,只需要先按照下面的数据库设计规范设计好数据库,然后使用代码生成器就能一键生成项目代码,生成的代码有:实体类、DAO接口及实现类、Service接口及实现类、Controller代码框架。
MyBatis代码生成器支持使用FreeMarker或Velocity作为模板引擎,用户可以根据需要修改或创建新的模板,以满足特定的代码风格和项目规范。例如,可以通过修改模板来添加Lombok注解,实现无getter/setter的简洁编码。 ...
Java代码生成器是一种工具,它能够自动生成符合特定规范或需求的Java源代码,从而提高开发效率,减少重复性工作。这种工具通常基于模板引擎,允许开发者定义模板,然后根据输入的数据生成相应的代码。在Java领域,...
2. **模板引擎**:代码生成器背后的实现关键在于模板引擎,如Jinja2、Freemarker等,它们允许开发者定义可定制的代码模板,通过替换占位符来生成目标代码。 3. **iOS开发环境**:iOS应用开发主要使用Xcode集成开发...