总结:写好一个代码生成器,要花点心思的,我这里主要讲解一下原理,重复的工作 直接一套搞定,当然师傅领进门,路漫漫兮修远兮,吾将上下而求索。
上次讲到了获取数据库元数据,这次是手动带大家实现一套流程吧。制作模板——》类型转换——》渲染——》io 生成文件 。话不多说代码如下:
1.制作模板 ftl
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* ${comments}
*
* @author ${author}
* @email ${email}
* @date ${datetime}
*/
@Data
@TableName("${tableName}")
public class ${className}Entity implements Serializable {
private static final long serialVersionUID = 1L;
<#list columns as column>
/**
* ${column.columnComment}
*/
<#if column.columnKey=="PRI">
@TableId
</#if>
private ${map[column.dataType]} ${column.columnName};
</#list>
2.类型转换主要是数据库类型到 java 类型
// 数据库类型 -》java 类型
private static HashMap map = new HashMap();
static {
map.put("varchar","String");
map.put("int","Integer");
}
3. 渲染,4 生成 io 全部搞定,
@Resource(name = "mySQLGeneratorDao")
private GeneratorDao generatorDao;
@Autowired
Configuration configuration;
// 数据库类型 -》java 类型
private static HashMap map = new HashMap();
static {
map.put("varchar","String");
map.put("int","Integer");
}
@Test
public void contextLoads() throws IOException, TemplateException {
Template template = configuration.getTemplate("Entity.java.ftl");
Model model = new BindingAwareConcurrentModel();
model.addAttribute("table","user");
model.addAttribute("comments","user");
model.addAttribute("author","lyc");
model.addAttribute("email","984006207@qq.com");
model.addAttribute("datetime","2019-06-22");
model.addAttribute("tableName","user");
model.addAttribute("className","User");
model.addAttribute("map",map);
model.addAttribute("columns",generatorDao.queryColumns("user"));
String result = FreeMarkerTemplateUtils.processTemplateIntoString(template,model);
FileOutputStream outputStream = new FileOutputStream("./"+"UserEntity.java");
IOUtils.write(result,outputStream,"utf-8");
System.out.println("result{}"+result);
}
5. 看效果
/**
* user
*
* @author lyc
* @email 984006207@qq.com
* @date 2019-06-22
*/
@Data
@TableName("user")
public class UserEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Integer id;
/**
* 名字
*/
private String name;
/**
* 年龄
*/
private Integer age;
}
读者可以实现任意模板文件,然后快速生成,原理就这个东东,没什么鸡儿难度,祝大家生活愉快。