【编者按】还在为管理 Java 代码中的 SQL 语句而烦恼吗?让 Zemian 帮你摆脱困境吧!本文系 OneAPM 工程师编译整理

注意:使用java.util.Properties#loadFromXML其实会更简单!

如果使用的是普通的、没有任何外部类库的 Java JDBC,那么就必须得自己去管理 SQL 语句。很不幸的是,Java String 并不支持多行结构,所以开发者必须使用许多引号+连接符来拼接语句,这会使得 SQL 语句非常难于阅读和管理。同时,这也使得维护和测试(尝试从 Java 代码中 Copy 一条 SQL 语句到 SQL 客户端运行)更加困难。如果能保证整条 SQL 语句完好无缺,又避免了 Java 的干扰,那该有多好啊!

这里有个快速解决方案,把 SQL 查询语句存储在 XML 的 CDATA 里面:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sqlMap>
<sqls>
<entry>
<key>getUser</key>
<value><![CDATA[
SELECT *
FROM USERS
WHERE ID = ?
]]></value>
</entry>
<entry>
<key>getSpecialCodeByUserId</key>
<value><![CDATA[
SELECT u.EMAIL, p.ID as PROFILEID, p.SPECIALCODE, a.MANAGERID
FROM USERS u
LEFT JOIN PROFILE p ON p.USERID = u.ID
LEFT JOIN ACCOUNT a ON a.PROFILEID = p.ID
WHERE u.ID = ? ]]></value>
</entry> </sqls>
</sqlMap>

如果现在再去读 SQL 语句,开发者可以利用内建的 JAXB。

import javax.xml.bind.annotation.XmlRootElement;
import java.util.HashMap;
import java.util.Map;
@XmlRootElement
public class SqlMap {
Map<String, String> sqls = new HashMap<>();
public Map<String, String> getSqls() {
return sqls;
}
public void setSqls(Map<String, String> sqls) {
this.sqls = sqls;
}
public String getSql(String name) {
return sqls.get(name);
}
public static SqlMap load(String name) throws Exception {
String xml = Utils.loadString(name);
SqlMap sqlMap = unmarshallXML(xml );
return sqlMap;
}
}

原文链接:How to Store and Manage SQL Statements More Effectively With Java

本文系 OneAPM 工程师编译整理。想阅读更多技术文章,请访问 OneAPM 官方博客

在 Java 中如何更高效地存储和管理 SQL 语句?的更多相关文章

  1. JAVA中处理事务的程序--多条更新SQL语句的执行(包括回滚)

    在与数据库操作时,如果执行多条更新的SQL语句(如:update或insert语句),在执行第一条后如果出现异常或电脑断电, 则后面的SQL语句执行不了,这时候设定我们自己提交SQL语句,不让JDBC ...

  2. java中的基本数据类型一定存储在栈中吗?

    首先说明,"java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的. 下面让我们一起来分析一下原因: 基本数据类型是放在栈中还是放在堆中,这取决于基本类型在何处声明,下面对数据类型 ...

  3. (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法

    总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中 ...

  4. 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法

    总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 日期:2005年6月1日 作者:seasky212 总结一下SQL语句中引号(').quoted ...

  5. (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法

    总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法以及SQL语句中日期格式的表示(#).('')在Delphi中进行字符变量连接相加时单引号用('' ...

  6. 从数据库中查询所有表及所有字段的SQL语句

    从数据库中查询所有表及所有字段的SQL语句 由于一个小项目的需要,近日完成一个从数据库中查询所有表及所有字段的方法,其实用两条SQL语句就可以完成. Sql Server版:列出当前DB中所有表:se ...

  7. 25个让Java程序员更高效的Eclipse插件

    Eclipse提供了一个可扩展插件的开发系统.这就使得Eclipse在运行系统之上可以实现各种功能.这些插件也不同于其他的应用(插件的功能是最难用代码实现的).拥有合适的Eclipse插件是非常重要的 ...

  8. 一些简单的例子让你在Java中能更好的学习并理解循环结构(1)!

    一.java中流程控制方式采用三种基本流程结构:顺序结构,选择(分支)结构,循环结构. 1.[if-else 结构] if(1>2){ system.out.println("if条件 ...

  9. Java中break、continue及标签等跳转语句的使用[上]

    java 中跳转语句使用break.continue和标签,各自或组合完成相应的功能. 今天做题时遇到关于标签命名规范,顺便将跳转语句语法都看了一遍,很有收获. 在<Java编程思想>一书 ...

随机推荐

  1. Python学习教程(learning Python)--3.3.2 Python的关系运算

    如果if的condition不用布尔表达式来做条件判断而采用关系表达式,实际上关系表达式运算的结果要么是True要么是False.下面我们先了解一些有关关系运算符的基础知识,如下表所示. 做个小程序测 ...

  2. Ubuntu下编译内核

    一.下载源代码和编译软件的准备 下载内核源代码:http://www.kernel.org/ 注意,点击2.6.25内核的F版,即完整版. 如果你懒得去网站点联接,运行下列命令:  代码: $cd ~ ...

  3. Android之通过向WebService服务器发送XML数据获取相关服务

    原理图如下:        即客户端向WebService服务器通过HTTP协议发送XML数据(内部包含调用的一些方法和相关参数数据),然后WebService服务器给客户端返回一定的XML格式的数据 ...

  4. JVM规范小结

    JVM规范组成: 1. 字节码(ByteCode): 以Class或Interface为基本单位, 具有固定结构. 2. 指令集(InstructionSet): 每个指令用一个字节表示, 最多256 ...

  5. ubuntu server获取并自动设置最快镜像的方法

    一,安装方法1 add-apt-repository ppa:ossug-hychen/getfastmirrorapt-get install getfastmirror 如果添加了临时源,这样移除 ...

  6. 数据密集型 和 cpu密集型 event loop

    Node.js在官网上是这样定义的:“一个搭建在Chrome JavaScript运行时上的平台,用于构建高速.可伸缩的网络程序.Node.js采用的事件驱动.非阻塞I/O模型使它既轻量又高效,是构建 ...

  7. Effective Objective-C 2.0之Note.01

    1.在类的头文件中尽量少引入其他头文件 除非确有必要,否则不要引入头文件.一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件.这样做可以尽量降低类之间的耦合(co ...

  8. VRP-Lua学习笔记

    至于vrp是什么东西以及为什么要学习vrp,vrp的简单操作这些问题请自行右转抵拢倒拐找百度或者去中视典官网去找教程,我这里不会在赘述. 今天默认我们已经会使用VRP的脚本编辑器,用其他语言来为VRP ...

  9. FB接口之 js调用支付窗口

    官方文档: https://developers.facebook.com/docs/reference/dialogs/pay/ <html xmlns="http://www.w3 ...

  10. android开发类似coverflow效果的3d旋转

    源码下载地址:http://download.csdn.net/detail/feijian_/8888219