代码生成器完结篇,从此效率提升一千倍

总结:写好一个代码生成器,要花点心思的,我这里主要讲解一下原理,重复的工作 直接一套搞定,当然师傅领进门,路漫漫兮修远兮,吾将上下而求索。

          上次讲到了获取数据库元数据,这次是手动带大家实现一套流程吧。制作模板——》类型转换——》渲染——》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","[email protected]");
		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 [email protected]
* @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;
}

  

读者可以实现任意模板文件,然后快速生成,原理就这个东东,没什么鸡儿难度,祝大家生活愉快。

 

转载于:https://www.cnblogs.com/lyc88/articles/11068536.html

猜你喜欢

转载自blog.csdn.net/weixin_34245749/article/details/93457402