一种利用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支持多行字符串的,也可以借签。

时间: 2024-10-17 14:09:24

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

流编辑器sed使用总结及利用sed从文本中提取字符串的方法

sed 是一个编辑器,但它与其它大多数编辑器不同.除了不面向屏幕之外,它还是非交互式的,我们常用的vim编辑器则是交互式的. 这意味着必须将要对数据执行的命令插入到命令行或要处 理的脚本中.sed 在一个文件(或文件集)中非交互式.并且不加询问地接收一系列的命令并执行它们.因而,它流经文本就如同水流经溪流一样,因而 sed 恰当地代表了流编辑器,可以对文件或者文件集批量的进行删除 替换 插入 追加等操作. 流编辑器非常适合于执行重复的编辑,这种重复编辑如果由人工完成将花费大量的时间. 其参数可能

JavaScript:多行字符串

原文:http://www.cnblogs.com/ziyunfei/archive/2012/10/04/2711551.html 多行字符串的作用是用来提高源代码的可读性.尤其是当你处理预定义好的较长字符串时,把这种字符串分成多行书写更有助于提高代码的可读性和可维护性.在一些语言中,多行字符串还可以用来做代码注释. 大部分动态脚本语言都支持多行字符串,比如Python, Ruby, PHP. 但Javascript呢? 译者注:python中可以使用两种多行字符串的写法,一种是使用三引号,也

JAVA注释的另一种神奇用法

每个JAVA程序员在写程序的时候一定都会用到注释,本篇博客不是讲怎么定义注释,而是说明注释神奇的一种写法. 1 /** 2 * 这是一个测试类 3 */ 4 public class Test { 5 /** 6 * 程序的入口 7 */ 8 public static void main(String[] args) { 9 new Test(); 10 } 11 } 以上是两个普通的多行注释,在IDEA的环境下,选中方法或者类名,按住Ctrl+Q(Eclipse开发环境下直接按住Ctrl然后

利用JAVA API函数实现数据的压缩与解压缩

综述 许多信息资料都或多或少的包含一些多余的数据.通常会导致在客户端与服务器之间,应用程序与计算机之间极大的数据传输量.最常见的解决数据存储和信息传送的方法是安装额外的存储设备和扩展现有的通讯能力.这样做是可以的,但无疑会增加组织的运作成本.一种有效的解决数据存储与信息传输的方法是通过更有效率的代码来存储数据.这篇文章简要的介绍了数据的压缩与解压缩,并展示了用java.util.zip包来实现数据的压缩与解压缩是多么的方便与高效. 当然用诸如WinZip,gzip,和Java压缩(或jar)之类

Java注释Annotation

 Java注释Annotation 从JDK 5开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注释).Annotation提供了一种为程序元素设置元数据的方法,程序元素包括修饰包.类.构造器.方法.成员变量.参数.局部变量,从某些方面来看,Annotation就想修饰符一样,可用于程序元素的声明,这些信息被存储在Annotation的"name = value"对中. 需要注意的是, Annotation是一个接口,程序可以通过反射来获取指定程

Java注释规范整理

在软件开发的过程中总是强调注释的规范,但是没有一个具体的标准进行说明,通常都是在代码编写规范中简单的描述几句,不能作为一个代码注释检查的标准和依据,做什么都要有一个依据吗:),现在我特整理了一个<Java的注释规范>,内容来自网络.书籍和自己的实际积累. JAVA注释规范 版本/状态 作者 版本日期 1.0 ghc 2008-07-02 一.背景 1.当我们第一次接触某段代码,但又被要求在极短的时间内有效地分析这段代码,我们需要什么样的注释信息? 2.怎么样避免我们的注释冗长而且凌乱不堪呢? 

Java 注释

Java 注释 标签 : Java基础 五月份得知入职阿里云OS, 才开始学Java, 断断续续学习/使用半年, 越来越喜欢这个语言/工具. 后来被拥抱变化之后, 拿到的大部分offer是Java服务端研发; 一路走来, 踩了很多坑, 也有了一点小小的心得, 而且博客已经停更几个月, 今天就以博客形式把他记录下来吧. 2015下半年第一篇博客, 从最基础的Java注释开始: 程序员圈有一个笑话 最讨厌在写代码的时候写注释, 最讨厌别人的代码里面不写注释. 为什么写注释? 我自己亲身经历: 这段时

Java 注释规范详解

原文同步至:http://www.waylau.com/java-comments-conventions/ 在 Java 的编写过程中我们需要对一些程序进行注释,除了自己方便阅读,更为别人更好理解自己的程序,所以我们需要进行一些注释,可以是编程思路或者是程序的作用,总而言之就是方便自己他人更好的阅读. 注释类型 Java 有两类注释: implementation comments(实现注释)和 documentation comments(文档注释). 实现注释常见于 C++,使用 /*..

java注释规范

前言: 现在java的出产地sun公司并没有定义一个java注释规范,注释规范目前是每个公司自己有自己的一套规范,主要是为了团队之间的协作. 1.基本规则 1.注释应该使代码更加清晰易懂 2.注释要简洁明了,只要提供能够明确理解程序必要的信息就可以了.如果注释太复杂会影响程序整洁度和阅读感. 3.注释不仅描述程序作了什么,还要描述为什么这样做以及约束. 4.对于一般的getter和setter方法不用注释. 5.类.接口.构造函数.方法.全局变量必须添加注释.字段属性可以选择添加简单注释. 6.