如何運用freemarker模板技術自動生成數據庫中的存在的表格對應的domain!

 freemarker模板技術的基本使用步驟:   java

    freemarker:是比較流行的一個模板技術【ftl】
      1.導包(freemarker是一個小框架)
      2.建立一個配置對象Configuration(加個版本)
      3.設置加載路徑
      4.設置字符集(默認)
      5.建立模板(準備一個ftl模板)
      6.準備數據(Map,對象)
      7.數據+模板=輸出文件(Writer)web

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------sql

下面是用freemarker模板技術生成數據庫存在表的domain的基礎案例:數據庫

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class CreateDomainTest {

@Autowired
private DataSource dataSource;

String tabalName="t_address";//這裏是舉例生成數據庫存在的表t_address。若是app

須要生成其它表,改表名就能夠。
String className="Address";//這裏是生成的domain類名。生成其它表的時候就能夠,改爲表名對應的類名。

@ Test
public void testCreate() throws Exception {
//拿到數據庫的連接對象
Connection connection = dataSource.getConnection();
//準備須要執行行sql語句
String sql="select * from "+tabalName;
//執行準備好的sql語句
PreparedStatement ps = connection.prepareStatement(sql);
//拿到結果集
ResultSet rs = ps.executeQuery();
//拿到參數的原數據
ResultSetMetaData metaData = rs.getMetaData();
//拿到當前表有多少個字段
int count = metaData.getColumnCount();
//在遍歷集合相應的字段,並卻準備一個list裝咱們拿到的字段
List<Map> list = new ArrayList<>();
for (int i = 1; i <= count; i++) {
//getColumnClassName拿到咱們表中的字段類型,replaceFirst並把類型的前綴去掉
String type = metaData.getColumnClassName(i).replaceFirst("java.lang.", "");
//拿到表中的字段名稱 java.lang.字段類型
String name = metaData.getColumnName(i);
//把name的第一個首字母變成大寫的字母 Name
//substring這個方法是截取字段,從那個下標開始到那個下標結束,toUpperCase把首字母變大寫
String upperName = name.substring(0, 1).toUpperCase()+name.substring(1);
HashMap<String,Object> map = new HashMap<>();
map.put("type", type);
map.put("name", name);
map.put("upperName", upperName);
list.add(map);
}

//準備好一個配置對象
Configuration cfg = new Configuration(Configuration.VERSION_2_3_28);
//在設置模板的加載path,
// Directory:目錄 Template:模板 Loading:加載
String path = "F:/Navicat Premium 11.1/software/eclipse/eclipse-workspace-Spring/cms/src/main/webapp/template";//這地址是放domain.java的模板文件路徑
cfg.setDirectoryForTemplateLoading(new File(path));
//設置模板字符集
cfg.setDefaultEncoding("UTF-8");
//獲取一個模板對象
Template template = cfg.getTemplate("domain.java");
//準備相應的數據(Map,對象)
Map dataMap = new HashMap<>();
dataMap.put("className", className);
dataMap.put("filedList", list);

//生成文件
//數據(dataMap)+模板(template) = 輸出文件(out)
File newFile = new File(path,className+".java");
FileWriter out = new FileWriter(newFile);
template.process(dataMap, out);
out.flush();
}
}框架

 

---------------------------------------------------------------------------------------------------------------------------------------dom

domain.java  模板內容:eclipse

public class ${className} {

<#list filedList as filed>
private ${filed.type} ${filed.name} ;
</#list>


<#list filedList as filed>
public ${filed.type} get${filed.upperName}() {
return ${filed.name};
}
public void set${filed.upperName}(${filed.type} ${filed.name}) {
this.${filed.name} = ${filed.name};
}
</#list>

}webapp

相關文章
相關標籤/搜索