代码生成

代码生成

生成pojo 和 md文件

beetsql支持调用SQLManager.gen… 方法生成表对应的pojo类,如:

  1. SQLManager sqlManager = new SQLManager(style,loader,cs,new DefaultNameConversion(), new Interceptor[]{new DebugInterceptor()});
  2. //sql.genPojoCodeToConsole("userRole"); 快速生成,显示到控制台
  3. // 或者直接生成java文件
  4. GenConfig config = new GenConfig();
  5. config.preferBigDecimal(true);
  6. config.setBaseClass("com.test.User");
  7. sqlManager.genPojoCode("UserRole","com.test",config);

生成的路径位于工程的scr目录下,beetlsql自动判断是传统java项目还是maven项目,以使得生成的代码和sql放到正确的位置上。你也可以通过调用GenKit.setSrcPathRelativeToSrc 来设置代码生成路径,调用setResourcePathRelativeToSrc来设置生成的sql文件路径

config 类用来配置生成喜好,目前支持生成pojo是否继承某个基类, 是否用BigDecimal代替Double,是否采用Date而不是Timestamp来表示日期,是否是直接输出到控制台而不是文件等 生成的代码如下:

  1. package com.test;
  2. import java.math.*;
  3. import java.sql.*;
  4. public class UserRole extends com.test.User{
  5. private Integer id;
  6. /* 数据库注释 */
  7. private String userName;
  8. }

也可以自己设定输出模版,通过GenConfig.initTemplate(String classPath),指定模版文件在classpath 的路径,或者直接设置一个字符串模版 GenConfig.initStringTemplate. 系统默认的模版如下:

  1. package ${package};
  2. ${imports}
  3. /*
  4. * ${comment}
  5. * gen by beetsql ${date(),"yyyy-MM-dd"}
  6. */
  7. public class ${className} ${!isEmpty(ext)?"extends "+ext} {
  8. @for(attr in attrs){
  9. @if(!isEmpty(attr.comment)){
  10. //${attr.comment}
  11. @}
  12. private ${attr.type} ${attr.name} ;
  13. @}
  14. }

如果你需要给beetl模板注册函数等扩展,可以在生成sqlManager.genPojoCode之前,先注册扩展函数

  1. SourceGen.gt.registerFunction("xxx",yourFunction)

这样就可以再代码模板里使用扩展函数了

注意,GenConfig构造函数期望的是一个classpath路径,并非文件路径

生成更多的代码

可以实现MapperCodeGen的genCode接口,然后添加到 GenConfig里,这样再生成代码后,也会调用自定义的MapperCodeGen来生成更多代码。如系统内置的生成Mapper的代码

  1. MapperCodeGen mapper = new MapperCodeGen("com.dao");
  2. config.codeGens.add(mapper);
  3. sql.genPojoCodeToConsole("user", config);

这样,除了生成pojo代码外,还生成mapper代码,内置的mapper代码实现如下,供参考

  1. public class MapperCodeGen implements CodeGen {
  2. String pkg = null;
  3. public MapperCodeGen(){
  4. }
  5. public MapperCodeGen(String pkg){
  6. this.pkg = pkg;
  7. }
  8. public static String mapperTemplate="";
  9. static {
  10. mapperTemplate = GenConfig.getTemplate("/org/beetl/sql/ext/gen/mapper.btl");
  11. }
  12. @Override
  13. public void genCode(String entityPkg, String entityClass, TableDesc tableDesc,GenConfig config,boolean isDisplay) {
  14. if(pkg==null){
  15. pkg = entityPkg;
  16. }
  17. Template template = SourceGen.gt.getTemplate(mapperTemplate);
  18. String mapperClass = entityClass+"Dao";
  19. template.binding("className", mapperClass);
  20. template.binding("package",pkg);
  21. template.binding("entityClass", entityClass);
  22. String mapperHead = "import "+entityPkg+".*;"+SourceGen.CR;
  23. template.binding("imports", mapperHead);
  24. String mapperCode = template.render();
  25. if(isDisplay){
  26. System.out.println();
  27. System.out.println(mapperCode);
  28. }else{
  29. try {
  30. SourceGen.saveSourceFile(GenKit.getJavaSRCPath(), pkg, mapperClass, mapperCode);
  31. } catch (IOException e) {
  32. throw new RuntimeException("mapper代码生成失败",e);
  33. }
  34. }
  35. }
  36. }