您的位置:首页 > 编程语言 > Java开发

编写高性能 Java 数据访问应用程序之 2 :内联方法编程风格简介

2008-08-27 13:56 627 查看
pureQuery 为 SQL 执行引入了两种编程风格:内联方法编程风格和带注释的方法编程风格。这些编程风格为存储和检索对象(例如 Java bean 和
map)提高了现成的支持,从而简化了 Java 数据访问开发。内联编程风格还支持使用定制的用户定义的结果处理。

带注释的方法风格提供一种基于注释的数据访问方法。在带注释的方法风格中,SQL/XQUERY 字符串是在一个 pureQuery
注释(Annotation)中定义的。这些注释被放在用户定义接口中的方法声明上。代码生成器对接口进行预处理,生成每个带注释的方法的实现代码。生成的实现代码使用
pureQuery 运行时执行注释中定义的 SQL 语句。要了解关于带注释的方法风格的更多信息,请参阅本系列的 第 1 部分pureQuery 文档

pureQuery 内联编程风格的目的是减少使用 JDBC 查询或更新数据库时常见的一些重复任务。内联方法风格引入了一组定义良好的、有效的 API,它们比
JDBC 更简单,更易于使用。在内联风格中,可以在代码中像 Java String 对象一样 “内联” 地创建 SQL/XQUERY
语句。这种动态生成的语句被作为 String 参数传递给 pureQuery Data 接口方法。内联风格使用 JDBC 最佳实践,并利用特定于数据库的 API
来提高性能。内联方法风格的一个例子是使用批量更新和改进的结果集处理。在带注释的方法风格中,SQL
必须在编译时定义,而内联方法则不同,它支持在运行时动态创建和执行 SQL 语句。在应用程序中,SQL 是 “内联”
和可见的,因此更容易发现错误并做出更正。内联风格还有一个可插入式定制结果处理,用于轻松地映射数据库列。

表 1 中的代码片段演示了内联方法风格的简单性和易用性。

表 1. JDBC 与 pureQuery
内联风格之间的代码比较


JDBC pureQuery 内联风格
try  {

//SQL for insert
String sqlins="'insert into CUSTOMER ("
+    "NAME, COUNTRY, STREET, CITY, PROVINCE, ZIP,"
+    "PHONE,INFO)"
+    "values( ?, ?, ?, ?, ?, ?, ?, ?)";

//prepare the INSERT statement
PreparedStatement pstmt =
con.prepareStatement(sqlins );

// setup parameters
pstmt.setString (1, "custName");
pstmt.setString (2, "custCountry");
pstmt.setString (3, "custStreet");
pstmt.setString (4, "custCity");
pstmt.setString (5, "custProvince");
pstmt.setString (6, "custZip");
pstmt.setString (7, "custPhone");
pstmt.setString (8, "custInfo");

//execute the INSERT statement
pstmt.execute();

//close the prepared statement
pstmt.close();

// SQL for SELECT
String sqlSel = "select Name, Country, Street, "
+ "Province,Zip from CUSTOMER where Customer = ?";

//prepare the SELECT statement
pstmt =  con.prepareStatement(sqlSel);

//set the Input parameter
pstmt.setString (1, "custCountry");

//execute SELECT statement
pstmt.execute();

//get the results and set values in Customer Bean
ResultSet result = pstmt.getResultSet ();
List<Customer> custList =
new ArrayList<Customer>();
while (result.next ()) {
Customer cust = new Customer();
cust.name = result.getString (1);
cust.country = result.getString (2);
cust.street = result.getString (3);
cust.province = result.getString (4);
cust.zip = result.getString (5);
custList.add (cust);
}
}
catch (SQLException e) {
e.pringStackTrace ();
}
//Get Instance of Data
Data data = DataFactory.getData(con);

// SQL for insert
String sqlins = "insert into CUSTOMER ("
+     "NAME,COUNTRY,STREET,CITY,PROVINCE,ZIP, "
+     "PHONE, INFO)"
+    "values( ?, ?, ?, ?, ?, ?, ?, ?)";

//execute the INSERT statement
data.update (sqlins, "custName",
"custCountry", "custStreet", "custCity",
"custProvince", "custZip", "custPhone", "custInfo");

// SQL for SELECT
String sqlSel = "select Name, Country, Street, "
+ "Province,Zip from CUSTOMER where Customer = ?";

//execute the Select and get the list of customer
List<Customer> customerList = data.queryList (sqlSel, Customer.
class , "custCountry");
本文内容包括:

详尽描述需要使用内联编程风格的代码的各个方面

通过一个案例研究揭示内联风格的特性

介绍内联风格提供的查询功能,包括 pureQuery 的默认映射支持和定制的查询映射支持

介绍单个更新和批量更新支持,以及用于检索自动生成的值的 API

介绍 pureQuery 的可插入式回调机制

本文转自IBM Developerworks中国

请点击此处查看全文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐