JDK6笔记(6)----JDBC4.0高级应用
JDK6笔记(6)----JDBC4.0高级应用
JDBC4.0高级应用
1、Annotations
在JDK1.5中annotation就存在了,在JDBC4中得到了加强。annotation是程序的声明模块,放在注释那里,和代码元素相关联,用于在运行时注入代码。
annotation解决方案有两个元素:
1)是查询接口的声明,由java.sql.package包的BaseQuery接口扩展而来。
2)是QueryObject(查询对象),用于执行查询。
见下面的例子:
import java.sql.BaseQuery;
import java.sql.DataSet;
import java.sql.Select;
public interface QueryAnnotationExample extends BaseQuery{
@Select(sql="SELECT ID,MODEL,MODEL_YEAR FROM CAR WHERE MODEL_YEAR=?1")
Public DataSet<Car> getCarsModelYear(String year);
}
下一步是使用对象工厂创建和执行这个语句。
public void testQueryAnnotation(){
QueryAnnotationExample qae=null;
try{
String url="jdbc:derby://localhost:9527/mydb;create=true";
Connection con=DriverManager.getConnection(url,"sa","password");
qae=con.createQueryObject(QueryAnnotationExample.class);
}catch(SQLException e){
e.printStackTrace();
Collection<Car> cars=qae.getCarsModelYear("1999");
for(Car c:cars){
System.out.println("car id="+c.getId()+" model="+c.getModel()+" year="+c.getYear());
}
}
2、事务管理(Transaction Management)
当处理数据源时,事务管理时非常重要的。事务管理能确保数据的完整性和数据的一致性。
要解释事务(Transaction),用ATM机作为例子非常适合。取钱的步骤如下:
1)插入你的银行卡;
2)输入PIN密码;
3)选择提款选项;
4)输入提款金额;
5)同意支付手续费;
6)取出钱。
在这过程中,任意错误将导致你的帐户金额的不一致,因此事务只包含两种结果:提交(commit)和回滚(rollback)。
JDBC的事务处理非常简单,你只需关系两样:Connection.commit和Connection.rollback。
在JDBC3.0介绍了一个新概念,“保存点”(savepoint)。保存点允许你在事务处理失败时,回滚到保存点。
见下面的例子:
Statement stmt=cConn.createStatement();
int nRows=stmt.executeUpdate("INSERT INTO PLAYERS(NAME) VALUES('Roger Thomas')");
//建立保存点
Savepoint spOne=cConn.setSavepoint("SAVE_POINT_ONE");
nRows=stmt.executeUpdate("INSERT INTO PLAYERS(NAME) VALUES('Jenifer White')");
//回滚到初始保存点
cConn.rollback(spOne);
//提交事务
cConn.commit();
在这个例子中,第二个SQL语句没有得到执行,因为在事务提交前被回滚到保存点了。
3、Hibernate
Hibernate是一个开源框架,面向对象的域模型(Object Oriented Domain Model)。这是对象关系映射(Object Relational Mapping,ORM)的特殊实现。
使用Hibernate,你可以隔离你的数据访问代码,作为应用程序设计的一部分。
如:
Business Logic --> JAVA Domain Objects(pojo) --> Hibernate --> JDBC
3.1)Hibernate组件
采用Hibernate解决方案,有4个主要的组件。
(1)Persistent Java Object
These are the java classes that represent your domain abstractions. Each object will map to one or more rows of data in a relational database.
(2)Hibernate Configuration File
The hibernate.cfg.xml file is for configuring global parameters of the ORM framework. This includes the database information and information affecting all persistent classes.
(3)Hibernate Mapping File
Each class that Hibernate persists needs an associated mapping file to describe the property-to-column mapping, and relationships defined between the classes.
(4)Hibernate API
Your application uses the Hibernate API to perform all data access. Hibernate translates those API calls into the correct INSERT, DELETE, UPDATE, and SELECT statements based on your configuration settings.
看下面的例子:
3.2)一个名叫Book的持久类,三个重要的事:
(1)是声明属性id,title,并创建了访问的方法;
(2)是一个无参数的构造器的声明,Hibernate使用映射来例示这些类;
(3)是equals()和hashcode()方法。
例子:
import java.util.Date;
public class Book{
private long id;
private String title;
private Date created=new Date();
public Book(){
}
public long getId(){
return id;
}
public void setId(long id){
this.id=id;
}
public String getTitle(){
return title;
}
public void setTitle(String title){
this.title=title;
}
public void setTitle(String title){
this.title=title;
}
public boolean equals(object obj){
if(obj==this) this true;
if(!(obj instanceof Book)) return false;
Book b=(Book)obj;
if(this.title.equals(b.title)) return true;
return false;
}
public int hashCode(){
return this.title.hashCode();
}
}
下面,我们来看Book.hbm.xml。
3.3)Hibernate映射文件
Hibernate Mapping File是一个XML文件,用于告诉Hibernate API 怎样把一个Java类持久化到关系型数据库中。映射文件有四个核心的元素:
(1)类到表的映射;
(2)一个id元素标识为表的主键;
(3)属性到列的映射;
(4)和其它持久化对象的关系。
这个XML文件包含了文档类型定义(document type definition),指定了文件所必须的和可选的方法。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Book" table="BOOK">
<id name="id" column="BOOKID">
<generator class="native"></generator>
</id>
<property name="title" column="TITLE" type="string"></property>
<property name="created" column="CREATEDON" type="timestamp" update="false"/>
</class>
</hibernate-mapping>
3.4)Hibernate配置文件(Hibernate Configuration File)
在你的应用程序中典型的仅有一个hibernate.cfg.xml文件。