JDK6笔记(6)----JDBC4.0高级应用(2)
3.4)Hibernate配置文件(Hibernate Configuration File)
在你的应用程序中典型的仅有一个hibernate.cfg.xml文件。
在配置文件中有几个可选项,在www.hibernate.org上面有一个完整的列表。
一般来说,configuration定义了映射的文件、数据库的连接信息、数据库使用的哪一种SQL等。
Dialect类封装了数据库所用各种SQL语句的差异。例如:
在Oracle中的SELECT语句:
SELECT * FROM BOOK Where rownum<10
但是在Microsoft SQLServer中为:
SELEC TOP 10 * from BOOK
Dialect类支持绝大多数商业和开源数据库系统。
highlight.show_sql属性:将打印标准输出,即打印所有执行的SQL语句。
hibernate.hbm2ddl.auto属性:将自动创建映射文件定义的数据库表。
见例子:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property>
<property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver
</property>
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password">password</property>
<mapping resource="mydb/Book.hbm.xml"/>
</session-factory>
</hibernate-configuration>
3.5)Hibernate API
Hibernate API包含了所有的资源,如:支持持久化的,执行映射的,数据库事务,还有两个丰富的查询模型。
这些资源存在于org.hibernate.* 。
(1)SessionFactory
包含了数据库元数据和执行持久化操作的Java类信息。
(2)Session
是所有持久化操作的入口点。
它提供了简单的方法来载入和保存对象,也作为工厂方法创建事务,查询和条件接口。
Session存活时间很短,每个请求都会创建和销毁它。
(3)Query
接口,使用类似SQL语言(称为HQL,即Hibernate Query Language)来检索对象。
(4)Criteria
接口,比查询接口有更多的面向对象。
Criteria API在运行时动态查询是非常有效的。
4、Hibernate Example
用Hibernate连接Apache Derby数据库。
1)环境变量的设置
在MS-DOS环境下:
set JAVA_HOME=C:/JDK
set DERBY_INSTALL=%JAVA_HOME%/db
set CLASSPATH=%CLASSPATH%;%DERBY_INSTALL%/lib/derby.jar;%DERBY_INSTALL%/lib/derbytools.jar;
%DERBY_INSTALL%/LIB/derbynet.jar;
cd %DERBY_INSTALL%/frameworks/NetworkServer/bin
startNetworkServer.bat
现在,可以用Hibernate连接Derby数据库了。
2)创建和存储SessionFactory。应用程序将共享静态的SessionFactory。
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil{
private static SessionFactory sf;
//当运行configure.buildSessionFactory()时,Hibernate会在项目的根目录下寻找hibernate.cfg.xml文件。
static {
sf=new Configuration().configure().buildSessionFactory();
}
public static Session currentSession(){
return sf.openSession();
}
public static void close(Session session){
session.close();
}
}
--------------------------------------------
2)Book Manager的例子
import java.util.Date;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import mydb.Book;
import mydb.util.HibernateUtil;
public class BookManager{
Session s=HibernateUtil.currentSession();
public void save(Book book){
try{
Transaction tx=s.beginTransaction();
s.saveOrUpdate(book);
tx.commit();
}catch(HibernateException e){
e.printStackTrace();
}
}
public static void main(String[] args){
Book book =new Book();
book.setTitle("Lucas: nine months and counting.");
book.setCreated(new Date());
BookManager manager=new BookManager();
manager.save(book);
}
}