JFinal sql管理 外置sql文件 class/jar内置sql文件

# sql模板配置 本地"" 服务器配置外部路径(本地测试外部路径为D:\home\www-data\SmallTask\conf\sql)
baseSqlTemplatePath=
   /***核心代码***/
   public static void mysqlInit(){
   // 配置druid数据库连接池插件
   DruidPlugin mysqlDruidPlugin = createMysqlDruidPlugin();
   // 配置ActiveRecord插件
   ActiveRecordPlugin mysqlArp = new ActiveRecordPlugin("mysql",mysqlDruidPlugin);
   mysqlArp.setShowSql(PropKit.getBoolean("devMode",false));
   String mainSqlName = "_all_sqls.sql";
   if (StringUtils.isBlank(PropKit.get("baseSqlTemplatePath"))){
      mysqlArp.getEngine().setToClassPathSourceFactory();
      mysqlArp.getEngine().setBaseTemplatePath("/sql");
      mysqlArp.addSqlTemplate(mainSqlName);
   } else {
      mysqlArp.getEngine().setSourceFactory(new FileSourceFactory());
      mysqlArp.getEngine().setBaseTemplatePath(PropKit.get("baseSqlTemplatePath"));
      mysqlArp.addSqlTemplate(new FileSource(PropKit.get("baseSqlTemplatePath"),mainSqlName,"utf-8"));
   }

   mysqlDruidPlugin.start();

   mysqlArp.setDialect(new MysqlDialect());
   mysqlArp.start();
}
sql管理入口管理文件_all_sqls.sql
#namespace("mysql")
#include("xxx.sql")
#end

#namespace("sqlserver")
#include("xxx.sql")
#end

image.png

image.png


源码支持:

/**
 * FileSource 用于从普通文件中加载模板内容
 */
public class FileSource implements ISource {
   
   private String finalFileName;
   private String fileName;
   private String encoding;
   
   private long lastModified;
   
   public FileSource(String baseTemplatePath, String fileName, String encoding) {
      this.finalFileName = buildFinalFileName(baseTemplatePath, fileName);
      this.fileName = fileName;
      this.encoding= encoding;
   }
   
   public FileSource(String baseTemplatePath, String fileName) {
      this(baseTemplatePath, fileName, EngineConfig.DEFAULT_ENCODING);
   }
public ActiveRecordPlugin addSqlTemplate(com.jfinal.template.source.ISource sqlTemplate) {
   config.sqlKit.addSqlTemplate(sqlTemplate);
   return this;
}

public ActiveRecordPlugin setBaseSqlTemplatePath(String baseSqlTemplatePath) {
   config.sqlKit.setBaseSqlTemplatePath(baseSqlTemplatePath);
   return this;
}


评论区

JFinal

2019-06-08 10:12

如果是使用 jfinal-undertow 开发的话, sql 文件会被打到 jar 包中,如果要修改的话就不方便了

所以你的分享通过配置来决定 sql 模板的加载方式,对于打包后的 sql 修改很方便

感谢分享

爱的信徒

2019-06-08 15:26

@JFinal 受惠jfinal,工作中大部分是数据处理工作,Jfinal的activeRecordPlugin很好用,刚好遇到这个问题,分享下。感谢波总分享Jfinal.

JFinal

2019-06-08 16:07

@爱的信徒 大部分工作是数据处理工作,用上 Db + Record 就太方便了,直接 Db.xxx 开工,节省大量时间

爱的信徒

2019-06-09 20:28

@JFinal 嗯嗯,很爽

简单代码

2019-06-09 20:31

@JFinal 如果sql更改了,打包到jar里面,直接覆盖更新,然后重启。我觉得这个更新更简单啊,不用思考更新啥,直接覆盖掉对应的jar就搞定了,不是更好吗?

爱的信徒

2019-06-09 21:47

@简单代码 我的使用场景是操作多个步骤(因为第三方只能半自动),我通过配置来操作步骤;另外一个是报表生成,因为报表需求因为特殊情况增加需求,我只需要改改配置文件或者sql文件直接在服务器端完成工作。如果操作jar的话,每次都要修改代码,重新打包,上传,有时候在家处理,没有环境,这些都增加了操作步骤。直接服务器修改配置则不会有这些问题。

热门分享

扫码入社