【jfinal】扩展JFIANL 支持加载jar包中SQL模板

扩展 ActiveRecordPlugin 支持加载jar包中SQL模板

jfinal3.1 中新增了IStringSource ,这个接口方便大家扩展SQL模块的加载方式, 下面我说的场景是把sql模板打在jar包中进行扫描的情况。多模块项目请参考 http://git.oschina.net/log4j/LMS

/**
 * Created by jie on 2017/4/21.
 * 扫描jar中的sql文件
 */
public class ScanJarStringSource implements IStringSource {
    private String fileName;
    private String encoding;

    public ScanJarStringSource(String fileName) {
        this.fileName = fileName;
        this.encoding = ConBizConstant.CHARSET_NAME_UTF_8;
    }

    public ScanJarStringSource(String fileName, String encoding) {
        this.fileName = fileName;
        this.encoding = encoding;
    }

    public boolean isModified() {
        return true;
    }

    public String getKey() {
        return this.fileName;
    }

    public StringBuilder getContent() {
        return loadFile(fileName, encoding);
    }

    public String getEncoding() {
        return this.encoding;
    }

    private String buildFinalFileName(String fileName) {
        char firstChar = fileName.charAt(0);
        String finalFileName;
        if (firstChar != 47 && firstChar != 92) {
            finalFileName = File.separator + fileName;
        } else {
            finalFileName = fileName;
        }

        return finalFileName;
    }

    private static StringBuilder loadFile(String fileName, String encoding) {
        StringBuilder out = new StringBuilder();
        InputStream inputStream = com.jfinal.template.FileStringSource.class.getClassLoader().getResourceAsStream(fileName);
        byte[] b = new byte[4096];
        try {
            for (int n; (n = inputStream.read(b)) != -1; ) {
                out.append(new String(b, 0, n, encoding));
            }
        } catch (IOException e) {
            throw new RuntimeException("Error loading sql file.", e);
        } finally {
            if (inputStream != null) try {
                inputStream.close();
            } catch (IOException e) {
                com.jfinal.kit.LogKit.error(e.getMessage(), e);
            }
        }
        return out;
    }
}

扩展我们使用扩展的ScanJarStringSource 进行配置

public class _MappingKit {
    /**
     * 不用z
     * @param arp
     */
    public static void mapping(ActiveRecordPlugin arp) {
        arp.addSqlTemplate(new ScanJarStringSource("XXX.sql"));
    }
}

OK!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云霄雨霁

词法分析程序

19200
来自专栏Android Note

介绍Kotlin第二部分(翻译篇)

15340
来自专栏对角另一面

lodash源码分析之获取数据类型

所有的悲伤,总会留下一丝欢乐的线索,所有的遗憾,总会留下一处完美的角落,我在冰峰的深海,寻找希望的缺口,却在惊醒时,瞥见绝美的阳光! ——几米 本文为读...

29030
来自专栏noteless

[二十六]JavaIO之再回首恍然(如梦? 大悟?)

我们上面列出来了ByteArray  File   Piped    Object  String  CharArray 这几种常用的数据源形式

12730
来自专栏JAVA后端开发

xml与java对象的快速互转

做流程图的项目时,新的流程定义为xml的,需要对xml与java对象进行互转 查了一下activiti的转换xml方式,发现转换太麻烦了,需要一步步的解析xm...

1.8K30
来自专栏分布式系统进阶

Librdkafka的基础数据结构 1 --- 队列

两个元素: tqh_first: 指向队列的第一个成员; tqh_last: 存的是队列里的最后一个元素的 next指针的变量地址, 这个二级指针太有用了,...

11120
来自专栏数据结构与算法

BZOJ4355: Play with sequence(吉司机线段树)

这题最坑的地方在于对于操作1,$C >= 0$, 操作2中需要对0取max,$a[i] >= 0$,这不就是统计最小值出现的次数么??

21020
来自专栏函数式编程语言及工具

Scalaz(57)- scalaz-stream: fs2-多线程编程,fs2 concurrency

    fs2的多线程编程模式不但提供了无阻碍I/O(java nio)能力,更为并行运算提供了良好的编程工具。在进入并行运算讨论前我们先示范一下fs2 pip...

21460
来自专栏owent

VC和GCC成员函数指针实现的研究(二)

调用的时候主要看(c.*vptr2)()的代码。因为(c.vptr1)()生成的和单继承一样。而由于它们最终都转向vcall,所以vptr2的时候调整了虚表指针...

10420
来自专栏CaiRui

Mysql-7-mysql函数

1.数学函数   用来处理数值数据方面的运算,主要的数学函数有:绝对值函数,三角函数,对数函数,随机函数。使用数学函数过程中,如果有错误产生,该函数会返回nul...

21570

扫码关注云+社区

领取腾讯云代金券