一种利用JAVA注释支持多行字符串的方法

从BeetlSql项目将SQL全放在Beetl模板里得到启发,又想到一个比较偏门的用法。以下代码实测通过,详见jSqlBox项目的test\examples\multipleLineSQL\SqlTemplateDemo.java源程序,此示例特殊点在于:运行时必须将此源程序拷贝一份在类根目录(或Maven管理的Resource目录下), 并将后缀".java"改为".sql"

public class SqlTemplateDemo extends TestBase { //@formatter:off public static class InsertUser extends SqlTemplate { public InsertUser(Object name, Object address, Object age){ /* insert into users (username, address, age) */ empty(name,address,age); /* values (?,?,?)*/ } } public static class FindUsers extends SqlTemplate { public FindUsers(Object name, Object age){ /* select count(*) from users where */ /* username=? */empty(name); /* and age>? */empty(age); /* order by username */ } } public static class GetUserCount extends SqlTemplate { /* select count(*) from users */ } public static class SqlTemplateEndTag{} @Test public void doTest() { Dao.executeInsert(new InsertUser("Tom","BeiJing",10).toString()); Dao.executeInsert(new InsertUser("Sam","ShangHai",20).toString()); Assert.assertEquals((Integer) 1, Dao.queryForInteger(new FindUsers("Sam",15).toString())); Assert.assertEquals((Integer) 2, Dao.queryForInteger(new GetUserCount().toString())); } }

以上代码是利用Java源程序作为模板文件来统一放置SQL,以便于DBA管理。其优点在于:

1)没有引入第三方模板,直接用Java作为模板文件
2)支持多行字符串, 且没有引入IDE插件或Maven编译插件等,通用性好。
3)支持Java方法和模板混用,模板负责存储SQL,Java负责赋值(利用ThreadLocal),互不干拢。
4)public static class的类名即为SQL ID,便于重命名重构和SQL的快速定位(Ctrl+鼠标左键即可),这是文本方式模板无法做到的,后者必须用文本搜索功能才能定位SQL。
缺点是:
1)每次模板更改后,还必须手工拷贝一份同样的文件放在类根目录作为资源文件
2)因为SQL写在注释中, 所以必须利用标记 //@formatter:off 来关闭IDE(我用Eclipse)的格式化功能,防止IDE误格式化。
3)从安全角度出发,模板文件中要注意不要放入除SQL以外的内容。

以上方法主要应用于SQL模板,但是其它场合如需要用到Java支持多行字符串的,也可以借签。

转载于:https://www.cnblogs.com/summerH/p/6813682.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值