freemarker基本语法
/**
* 获取表信息demo
*/
public class TableDemo {
public static final String DBDRIVER = PropertiesUtils.get("database.properties", "mysql.driver");
public static final String DBURL = PropertiesUtils.get("database.properties", "mysql.url");
public static final String DBUSER = PropertiesUtils.get("database.properties", "mysql.user");
public static final String DBPWD = PropertiesUtils.get("database.properties", "mysql.password");
private static Connection conn;
private static DatabaseMetaData metaData;
static {
try {
// 加载驱动
Class.forName(DBDRIVER);
// 获取数据库连接
conn = DriverManager.getConnection(DBURL, DBUSER, DBPWD);
// 得到DatabaseMetaData对象
metaData = conn.getMetaData();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 获取表名
public static void getTable() {
try {
// 拿到表的结果集
ResultSet resultSet = metaData.getTables(null, null, null, new String[]{"TABLE"});
// 遍历结果集
while (resultSet.next()) {
String tableName = resultSet.getString("TABLE_NAME");
System.out.println(tableName);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test() {
getTable();
}
}
// 获取表的列信息
public static void getColumns(String tableName) {
try {
// 拿到表的列信息结果集
ResultSet resultSet = metaData.getColumns(null, "%", tableName, "%");
// 遍历结果集
while (resultSet.next()) {
// 获取列名
String column_name = resultSet.getString("COLUMN_NAME");
// 获取列类型
String type_name = resultSet.getString("TYPE_NAME");
// 获取列注释
String remarks = resultSet.getString("REMARKS");
System.out.println(table_name + "-" + type_name + "-" + remarks);
}
} catch (Exception e) {
e.printStackTrace();
}
}
编写pojo的代码生成器
public class 根据表命转化的类名 implements Serializable {
private 表的列类型-java类型 表的列名称;
public void set表的列名首字母大写 (表的列类型-java类型 表的列名称){
this.表的列名称=表的列名称;
}
public Long get表的列名首字母大写(){
return this.表的列名称;
}
}
public class Table {
// 数据库表名
private String tableName;
// 表名转化的类名
private String className;
// 表中的列
private List<Column> list;
}
public class Column {
// 列名
private String columnName;
// 属性名(如果列名和属性名不一致需要转换)
private String fieldName;
// 属性名首字母大写
private String upperFieldName;
// 列类型
private String columnType;
// 列类型转换的java类型
private String javaType;
// 列注释
private String remarks;
}
/**
* 获取表信息工具类
*/
public class TableUtil {
public static final String DBDRIVER = PropertiesUtils.get("database.properties", "mysql.driver");
public static final String DBURL = PropertiesUtils.get("database.properties", "mysql.url");
public static final String DBUSER = PropertiesUtils.get("database.properties", "mysql.user");
public static final String DBPWD = PropertiesUtils.get("database.properties", "mysql.password");
private static Connection conn;
private static DatabaseMetaData metaData;
static {
try {
// 加载驱动
Class.forName(DBDRIVER);
// 获取数据库连接
conn = DriverManager.getConnection(DBURL, DBUSER, DBPWD);
// 得到DatabaseMetaData对象
metaData = conn.getMetaData();
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取表的列信息
public static List<Column> getColumns(String tableName) {
List<Column> columnList = new ArrayList<Column>();
try {
// 拿到表的列信息结果集
ResultSet resultSet = metaData.getColumns(null, "%", tableName, "%");
// 遍历结果集
while (resultSet.next()) {
Column column = new Column();
// 获取列名
String column_name = resultSet.getString("COLUMN_NAME");
// 获取列类型
String type_name = resultSet.getString("TYPE_NAME");
// 获取列注释
String remarks = resultSet.getString("REMARKS");
//封装columnList
column.setColumnName(column_name);
column.setColumnType(type_name);
column.setFieldName(column_name);
column.setJavaType(StringUtils.switchType(type_name));
column.setRemarks(remarks);
column.setUpperFieldName(StringUtils.captureName(column_name));
columnList.add(column);
}
} catch (Exception e) {
e.printStackTrace();
}
return columnList;
}
// 获取表名
public static List<Table> getTable() {
List<Table> tableList = new ArrayList<Table>();
try {
// 拿到表的结果集
ResultSet resultSet = metaData.getTables(null, null, null, new String[]{"TABLE"});
// 遍历结果集
while (resultSet.next()) {
Table table = new Table();
String tableName = resultSet.getString("TABLE_NAME");
table.setClassName(StringUtils.putOffUnderline(tableName));
table.setTableName(tableName);
List<Column> columnList = getColumns(tableName);
table.setList(columnList);
tableList.add(table);
}
} catch (Exception e) {
e.printStackTrace();
}
return tableList;
}
}
public class ${table.className} implements Serializable {
<#list table.list as column>
// ${column.remarks}
private ${column.javaType} ${column.fieldName};
</#list>
<#list table.list as column>
public void set${column.upperFieldName} (${column.javaType} ${column.fieldName}){
this.${column.fieldName}=${column.fieldName};
}
public ${column.javaType} get${column.upperFieldName}(){
return this.${column.fieldName};
}
</#list>
}
public class GeneratorUtil {
private static Configuration configuration = new Configuration();
public static void proceed(Map<String, Object> map, String tempName, String savePath) {
try {
// 通过configuration对象获根据模板名称取到template
Template template = configuration.getTemplate(tempName);
// 传参生成数据
template.process(map, new OutputStreamWriter(new FileOutputStream(new File(savePath))));
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}
}
public static void init(String path) {
try {
// 设置模板文件位置
configuration.setDirectoryForTemplateLoading(new File(path));
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class PojoHandler {
public void execute() {
GeneratorUtil.init(this.getClass().getClassLoader().getResource("templates").getPath());
List<Table> tables = TableUtil.getTable();
for (Table table : tables) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("table", table);
GeneratorUtil.proceed(map, "pojo.ftl", "d:/data/" + table.getClassName() + ".java");
}
}
@Test
public void test() {
PojoHandler handler = new PojoHandler();
handler.execute(); } }