html模板demo制作:

导入jar包,修改pom.xml
新建resources文件夹和java文件夹

resources文件夹用于存放ftl模板文件
java文件夹用于存放java文件

再resources文件夹新建一个ftl模板
hello.ftl

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title>
</head>
<body>
<h1>${name}</h1><#--这是模板遍历-->
<#list textlist as item><p>${item}</p>
</#list></body>
</html>

新建测试类进行模板生成测试

import freemarker.template.Configuration;
import freemarker.template.Template;import java.io.*;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class htmlDemo {//与hibernate初识化相似public Configuration configuration=new Configuration(Configuration.getVersion());//要使用freemarker模板要先初始化public void init(){try {//加载配置文件路径,即读取resources文件夹下的ftl模板,注意若路径中包含有中文,请写成下面这种格式String path=URLDecoder.decode(this.getClass().getClassLoader().getResource("").getPath(),"utf-8");//开始正式初始化configuration.setDirectoryForTemplateLoading(new File(path));} catch (IOException e) {e.printStackTrace();}}public void process(String tempname,String pathname){try {//获得模板,传进来的ftl模板的名字Template template=configuration.getTemplate(tempname);Map map=new HashMap();//这里的name的对应模板内的${name}map.put("name","Tom");//放入集合对象进map ${textlist}List<String> ll=new ArrayList<>();ll.add("这是");ll.add("模板遍历");ll.add("集合还是要放进map里面");map.put("textlist",ll);//文件读取的io流,用于写入内容并创建此通过模板生成的文件FileOutputStream fileOutputStream=new FileOutputStream(pathname);OutputStreamWriter outputStream=new OutputStreamWriter(fileOutputStream);//通过方法把内容输入进模板内template.process(map,outputStream);} catch (Exception e) {e.printStackTrace();}}//写main方法测试public static void main(String[] args) {htmlDemo htmlDemo=new htmlDemo();htmlDemo.init();//注意,调用的是本类的方法,第一个参数即模板的完整名字,第二个是通过模板生成的文件路径htmlDemo.process("hello.ftl","D://aa.html");}}

下面开始自动生成实体类

首先要带入连接mysql的jar包,跟JDBC差不多

        <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.10</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version></dependency>

整体demo的结构是这样的

解释:
util包内放的是工具

Column是存放表的列属性类
CreatePOJO是创建实体类的方法类
DBHelper是连接数据库的工具类
FreeMarkerUtil是自动生成模板的工具类
Generator是写静态属性的,暂时用于写好JDBC的参数
GetTables是调用DBHelper来获取所有的表其列的工具类
Tables是存放数据库中表属性类
StringUtils 字符串工具类 用于修改字符串首字母大写,去除下划线等

先按步骤从简单到困难
1.创建Generator(静态属性参数类)

package com.bdqn.util;public class Generator {public static String DRIVER="com.mysql.jdbc.Driver";public static String URL="jdbc:mysql://127.0.0.1:3306/ebank?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC";public static String USERNAME="root";public static String PASSWORD="123456";
}

2.DBHelper(JDBC连接工具类)    调用Generator的静态参数

package com.bdqn.util;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;public class DBHelper {private static Connection connection;public static Connection getConnection(){try {Class.forName(Generator.DRIVER);connection=DriverManager.getConnection(Generator.URL,Generator.USERNAME,Generator.PASSWORD);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return connection;}public static void closeConnection(Connection connection, ResultSet rs){try {if (rs!=null){rs.close();}if (connection!=null){connection.close();}} catch (SQLException e) {e.printStackTrace();}}
}

3.创建Column类   存放表内每一列中属性,入列名 类型

package com.bdqn.util;public class Column {//列名private String columnName;//修改后的列名private String updateColumnName;//数据库中的类型名private String dbType;//处理后对应java的类型名private String javaType;public String getUpdateColumnName() {return updateColumnName;}public void setUpdateColumnName(String updateColumnName) {this.updateColumnName = updateColumnName;}public String getColumnName() {return columnName;}public void setColumnName(String columnName) {this.columnName = columnName;}public String getDbType() {return dbType;}public void setDbType(String dbType) {this.dbType = dbType;}public String getJavaType() {return javaType;}public void setJavaType(String javaType) {this.javaType = javaType;}
}

4.创建tables类  存放数据库中表内的属性 如表名 还有一个是存放java的类名(ClassName) 这种表包含的列信息

package com.bdqn.util;import java.util.ArrayList;
import java.util.List;public class Tables {private String tableName;private String tableClassName;private List<Column> columnlist=new ArrayList<>();public String getTableName() {return tableName;}public void setTableName(String tableName) {this.tableName = tableName;}public String getTableClassName() {return tableClassName;}public void setTableClassName(String tableClassName) {this.tableClassName = tableClassName;}public List<Column> getColumnlist() {return columnlist;}public void setColumnlist(List<Column> columnlist) {this.columnlist = columnlist;}
}

5.创建StringUtils字符串工具类 用于给数据库中获得的表名列名信息修改成java格式的工具类

package com.bdqn.util;/*** Created by zezhong.shang on 17-6-2.*/
public class StringUtils {/*** ijλ����ĸ��д** @param name* @param indx* @return*/public static String captureName(String name, int indx) {name = name.substring(0, indx) + name.substring(indx, indx + 1).toUpperCase() + name.substring(indx + 1);return name;}/*** ����ĸ��д** @param name* @return*/public static String captureName(String name) {name = name.substring(0, 1).toUpperCase() + name.substring(1);return name;}/**** ����ĸСд** @param name* @return*/public static String lowerName(String name) {name = name.substring(0, 1).toLowerCase() + name.substring(1);return name;}/**** ȥ���»��� �����շ�ԭ�����ת��** @return*/public static String putOffUnderline(String columnName) {StringBuffer fieldNameBuffer = null;String tempNameArray[] = columnName.split("_");for (int i = 0; i < tempNameArray.length; i++) {if (i == 0) {fieldNameBuffer = new StringBuffer(tempNameArray[i]);} else {fieldNameBuffer.append(captureName(tempNameArray[i]));}}return fieldNameBuffer.toString();}public static void main(String[] args) {String a = putOffUnderline("a_bccc_d");System.out.println(a);}
}

6.创建GetTables类  前面创建的类都是为后面这几个类使用的 从数据库中获取表和列信息并返回成集合

package com.bdqn.util;import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class GetTables {//获得数据库中所有表名的方法public List<Tables> gettables(){//JDBC获得连接Connection conn=DBHelper.getConnection();//返回的listList<Tables> ll=new ArrayList<>();try {//调用这个方法就能获取表和列以及对应信息DatabaseMetaData dbmd=conn.getMetaData();//固定写法,获得游标ResultSet rs=dbmd.getTables(null,null,null,new String[]{"TABLE"});while (rs.next()){//获取这个数据中所有的表名String tableName=rs.getString("TABLE_NAME");Tables tables=new Tables();//添加表名tables.setTableName(tableName);//添加类名(处理后的类名,类名大写,下划线去掉)tables.setTableClassName(StringUtils.putOffUnderline(StringUtils.captureName(tableName)));//实例化方便调用本类的方法GetTables getTables=new GetTables();//调用下面查看列的方法,并添加进tables内tables.setColumnlist(getTables.getColumnName(tableName));ll.add(tables);}//个人习惯,关连接DBHelper.closeConnection(conn,rs);} catch (SQLException e) {e.printStackTrace();}return ll;}//获得表中的列的信息public List<Column> getColumnName(String tablename){List<Column> ll=new ArrayList<>();try {Connection conn=DBHelper.getConnection();DatabaseMetaData dbmd=conn.getMetaData();//固定参数写法,传入表名获取当前表的所有列信息ResultSet rs=dbmd.getColumns(null,"%",tablename,"%");while (rs.next()){String columnName=rs.getString("COLUMN_NAME");String columnType=rs.getString("TYPE_NAME");Column column=new Column();//添加列名column.setColumnName(StringUtils.captureName(columnName));//添加处理后的列名column.setUpdateColumnName(StringUtils.putOffUnderline(StringUtils.lowerName(columnName)));//添加数据库类型column.setDbType(columnType);//添加java类型column.setJavaType(GetTables.switchType(columnType));//把获得列对象放进集合内ll.add(column);}} catch (SQLException e) {e.printStackTrace();}return ll;}//把数据库类型转换成java类型public static String switchType(String cloumnType){String fieldType=null;if(cloumnType.equals("VARCHAR")){fieldType="String";}else if(cloumnType.equals("BIGINT")){fieldType="Long";}else if(cloumnType.equals("INT")){fieldType="Integer";}else if(cloumnType.equals("DATETIME")){fieldType="Date";}else{fieldType="String";}return fieldType;}}

7.创建FreeMarkerUtil类  通过上面的GetTables类方法已经获得了数据库中每一张表的详细信息,现在要把它输入到模板中

package com.bdqn.util;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;public class FreeMarkerUtil {Configuration configuration=new Configuration(Configuration.getVersion());//初始化方法public void init(){try {//解析路径是中文乱码时找不到路径的错误String path= URLDecoder.decode(this.getClass().getClassLoader().getResource("").getPath(),"UTF-8");configuration.setDirectoryForTemplateLoading(new File(path));} catch (IOException e) {e.printStackTrace();}}//把获得的信息写入到模板中public void createFile(String template, String pathname, Tables ll){try {Template template1=configuration.getTemplate(template);Map map=new HashMap();//传入内容到模板map.put("tablelist",ll);FileOutputStream fs=new FileOutputStream(pathname);OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fs);template1.process(map,outputStreamWriter);} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();}}
}

对应的模板 在resources文件夹内
注意,需要修改的是package 包的路径,这就是对应实体类的模板

package com.bdqn.pojo;
import java.util.Date;
import java.io.Serializable;public class ${tablelist.tableClassName} implements Serializable{
<#list tablelist.columnlist as items>
private ${items.javaType} ${items.updateColumnName};
</#list><#list tablelist.columnlist as items>
public void set${items.columnName}(${items.javaType} ${items.updateColumnName}){this.${items.updateColumnName} = ${items.updateColumnName};
}
public ${items.javaType} get${items.columnName}(){return ${items.updateColumnName};
}
</#list>
}

最后创建CreatePOJO类 ,里面直接写main方法来创建实体类了

package com.bdqn.util;import java.util.List;public class CreatePOJO {public static void main(String[] args) {//实例化此前获取表和列信息的类,并获取信息GetTables getTables=new GetTables();List<Tables> ll=getTables.gettables();//实例化模板类,记得必须初始化FreeMarkerUtil freeMarkerUtil=new FreeMarkerUtil();freeMarkerUtil.init();//这是创建后的实体类存放地址String url="D://java传输文件安置处//FreeMarkerDemo//pokoDemo2//src//main//java//com//bdqn//pojo//";for (Tables tt:ll) {//把获得的信息写入到指定模板内,开始生成实体类freeMarkerUtil.createFile("pojo.ftl", url+tt.getTableClassName()+".java",tt);}}
}

上面就是自动创建实体类的全部过程。后续会更新创建mybatis的自动生成dao层模板
更新:处理特殊字符串时的写法
#<list>获取下标及最后一项
service层模板

package com.bdqn.service;import com.bdqn.dao.${obj.tableClassName}Mapper;
import com.bdqn.pojo.${obj.tableClassName};
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;@Service
public class ${obj.tableClassName}Service {@Autowired(required = false)private ${obj.tableClassName}Mapper ${obj.tableName}Mapper;public ${obj.tableClassName}Mapper get${obj.tableClassName}Mapper() {return ${obj.tableName}Mapper;}public void set${obj.tableClassName}Mapper(${obj.tableClassName}Mapper ${obj.tableClassName}Mapper) {this.${obj.tableName}Mapper = ${obj.tableName}Mapper;}public List<${obj.tableClassName}> findAll${obj.tableClassName}(){return ${obj.tableName}Mapper.findAll${obj.tableClassName}();}public List<${obj.tableClassName}> find${obj.tableClassName}ById(int id){return ${obj.tableName}Mapper.find${obj.tableClassName}ById(id);}public int add${obj.tableClassName}(${obj.tableClassName} ${obj.tableName}){return ${obj.tableName}Mapper.add${obj.tableClassName}(${obj.tableName});}public int del${obj.tableClassName}ById(int id){return ${obj.tableName}Mapper.del${obj.tableClassName}ById(id);}public int update${obj.tableClassName}(${obj.tableClassName} ${obj.tableName}){return ${obj.tableName}Mapper.update${obj.tableClassName}(${obj.tableName});}
}

controller层模板

package com.bdqn.controller;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.bdqn.pojo.${obj.tableClassName};
import com.bdqn.service.${obj.tableClassName}Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/${obj.tableClassName}Controller")
public class ${obj.tableClassName}Controller {@Autowired(required = false)private ${obj.tableClassName}Service ${obj.tableName}Service;public ${obj.tableClassName}Service get${obj.tableClassName}Service() {return ${obj.tableName}Service;}public void set${obj.tableClassName}Service(${obj.tableClassName}Service ${obj.tableName}Service) {this.${obj.tableName}Service = ${obj.tableName}Service;}@RequestMapping(value="/findAll${obj.tableClassName}",method = RequestMethod.GET)public String findAll${obj.tableClassName}(){return JSONArray.toJSONString(${obj.tableName}Service.findAll${obj.tableClassName}());}@RequestMapping(value="/find${obj.tableClassName}ById",method = RequestMethod.GET)public String find${obj.tableClassName}ById(@RequestParam("id") int id){return JSON.toJSONString(${obj.tableName}Service.del${obj.tableClassName}ById(id));}@RequestMapping(value="/add${obj.tableClassName}",method = RequestMethod.POST)public int add${obj.tableClassName}(@RequestBody ${obj.tableClassName} ${obj.tableName}){return ${obj.tableName}Service.add${obj.tableClassName}(${obj.tableName});}@RequestMapping(value="/del${obj.tableClassName}ById",method = RequestMethod.GET)public int del${obj.tableClassName}ById(@RequestParam("id") int id){return ${obj.tableName}Service.del${obj.tableClassName}ById(id);}@RequestMapping(value="/update${obj.tableClassName}",method = RequestMethod.POST)public int update${obj.tableClassName}(@RequestBody ${obj.tableClassName} ${obj.tableName}){return ${obj.tableName}Service.update${obj.tableClassName}(${obj.tableName});}}

FreeMarker制作模板并使用相关推荐

  1. springboot下生成复杂word文档方案 在Word软件里面制作模板

    系列文章目录 第二章:根据模板导出word,复合格式表格生成.可变列表格生成 第三章:doc和docx插入多图 第四章:web环境下word文档预览 springboot freemarker 生成复 ...

  2. freemarker根据模板生成word文档,换行

    freemarker根据模板生成word文档,其它地方已经说的非常清除了,在此简单再说以下. 1.制作word模板,另存为xml文件.在此我另存为的时windows xml,它和windows 200 ...

  3. freemarker 制作word文档docx案例

    主要用于生成特定word文档,需要替换docx中的文字,书签,图片,动态表格等 本文以生成docx为例,doc文件目前有一些问题 例如图片或模板不好处理等,暂不考虑. 思路: 1)熟悉docx文件的结 ...

  4. Freemarker基于模板文件静态化代码示例

    Freemarker基于模板文件静态化代码示例

  5. GDCM:制作模板的测试程序

    GDCM:制作模板的测试程序 GDCM:制作模板的测试程序 GDCM:制作模板的测试程序 #include "gdcmFileAnonymizer.h" #include &quo ...

  6. EDM邮件营销之如何制作模板

    在进行EDM邮件营销时,设计和制作模板也是一项很重要的工作,虽然可能不比EDM数据收集来的重要,但是也是不可忽视的.下面来讲解下在EDM邮件营销时如何制作模板. 1,模板编码语言选择 模板编码设定与使 ...

  7. freemarker ftl模板_Web开发人员必会的模板引擎技术之Freemarker

    曾几何时,Web开发是个多么高大上的名字,程序猿们都以能搞定Web技术为荣,此时还没有前后端之说.然而随着互联网的发展,社会分工进一步细化,职业岗位也更加细分,慢慢开始有了前端攻城狮和后端攻城狮,技术 ...

  8. ​ [RHEL7.1]重新封装系统(制作模板)

     [RHEL7.1]重新封装系统(制作模板) 标签:rhel7.1封装 rhel7.1模板制作 原文:http://leoshi.blog.51cto.com/152597/1658137 虚拟化环境 ...

  9. Freemarker - 根据模板动态生成word文档

    文章目录 Freemarker 根据模板动态生成word文档 Freemarker 介绍: Freemarker 使用: freemarker加载模板目录的方法 参考资料 Freemarker 根据模 ...

最新文章

  1. 2022-2028年中国B2C电子商务市场投资分析及前景预测报告
  2. Netty整合SpringMVC,实现高效的HTTP服务请求
  3. 上海Uber优步司机奖励政策(1月18日~1月24日)
  4. 【转载】微服务,我们需要哪些基础框架?
  5. 汇编中的length(返回利用dup定义的数组中的元素个数,即重复操作符dup前的count值)
  6. petalinux zynq spi_ZYNQ 系列 01 | PL 实现按键控制 LED(1)
  7. git怎样用idea拉代码_一款强大的 IDEA 代码生成器,学会用,真香!
  8. Python之一行代码
  9. JavaScript实现Linear search线性搜索算法(附完整源码)
  10. 将变量区分_【统计学】区分定类、定序、定距、定比变量!
  11. Nginx 配置 SSL 证书步骤小记
  12. 使用C++实现YUV格式图像与RGB格式图像之间相互转换
  13. 每一个问题都是一把锁
  14. Kinect开发学习笔记之(七)骨骼数据的提取
  15. java8 groupingby_Java8 教程第五章之Streams Collectors groupingBy
  16. Uploadify jsp使用示例
  17. 将Vim打造成Python快速开发环境(一)
  18. android中broadcastreceiver的用法-代码中注册
  19. ipq4019 kernel 报错spi-nand spi0.1: spi transfer failed: -110
  20. day10-函数基础总结

热门文章

  1. 又拍云图片处理集群架构
  2. 我作的一个单元测试框架程序,请大家多多指教.
  3. 游戏虚拟盘服务器地址,网维大师常见问题:虚拟盘游戏不同步
  4. Netflix一位数据科学家剪出了上百部爱情片,想教AI认识“亲吻” | 国际接吻日
  5. srilm的使用(二)
  6. knn分类 knn_实施的knn直观指南
  7. 用计算机语言说一局情话,适合下雨天说的甜蜜情话语录(精选50句)
  8. 维度诅咒_逃避维度的诅咒
  9. Redis IO多路复用理解
  10. 谨以此文,谨言慎行。