5:示例如下:
java代码:
查看复制到剪贴板打印
1. < xml version="1.0" encoding="UTF-8" >
2. 3. '-//Hibernate/Hibernate Mapping DTD 3.0//EN'
4. 'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'>
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
客户端文件:
java代码:
查看复制到剪贴板打印
1. package cn.javass.h4.hello;
2.
3. import org.hibernate.Session;
4. import org.hibernate.SessionFactory;
5. import org.hibernate.Transaction;
6. import org.hibernate.cfg.Configuration;
7.
8. public class Client {
9. public static void main(String[] args) {
10. SessionFactory sf = new Configuration().configure().buildSessionFactory();
11. Session s = null;
12. Transaction t = null;
13.
14. try{
15. //准备数据
16. UserModel um = new UserModel();
17. um.setUuid("1");
18. um.setUserId("id1");
19. um.setName("name1");
20. um.setAge(1);
21. s = sf.openSession();
22. t = s.beginTransaction();
24. t.commit();
25. }catch(Exception err){
26. t.rollback();
27. err.printStackTrace();
28. }finally{
29. s.close();
30. }
31. }
32. }
测试:直接在Elipse里面运行Client文件即可,运行结束,你将会看到在console输出:“Hibernate: insert into tbl_user (userId, name, age, uuid) values ( , , , )”,打开 数据库的数据表,你会看到一条值已经加入了。
说明:
1:SessionFactory sf = new Configuration().configure().buildSessionFactory();这句话的意思是读取hibernate.cfg.xml,创建Session工厂,是线程安全的。
默认是”hibernate.cfg.xml”,不用写出来,如果文件名不是”hibernate.cfg.xml”,那么需要显示指定,如下:
SessionFactory sf = new Configuration(). configure( “javass.cfg.xml” ).buildSessionFactory();
2:Session是应用程序主要使用的Hibernate接口,约相当于JDBC的Connection+Statement/PreparedStatement的功能,是线程不安全的
3:在Hibernate4里面,已经不推荐使用Configuration类了,而改为使用 ServiceRegistryBuilder和MetadataSources来代替,新的写法大致如下:
ServiceRegistryBuilder builder = new ServiceRegistryBuilder().configure();
builder.applySetting("connection.driver_class", "oracle.jdbc.driver. OracleDriver");
builder.applySetting("connection.url", "jdbc:oracle:thin:@localhost:1521:orcl");
builder.applySetting("connection.username", "ztb");
builder.applySetting("connection.password", "ztb");
builder.applySetting("connection.pool_size", "2");
builder.applySetting("hibernate.dialect", "org.hibernate.dialect.OracleDialect");
builder.applySetting("show_sql", "true");
MetadataSources sources = new MetadataSources( builder.buildServiceRegistry() );
sources.addResource("cn/javass/h4/hello/UserModel.hbm.xml");
MetadataImpl metadata = (MetadataImpl) sources.buildMetadata();
SessionFactory sf = metadata.getSessionFactoryBuilder().buildSessionFactory();
这种写法,现在还没有实现完全,不太好用,所以官方给出的示例里面还是采用以前的方式,大家先了解一下。
4:这里使用的事务Transaction是Hibernate的Transaction,需要有,不能去掉。
为什么必须有这个Hibernate的事务呢?以HelloWorld为例来看看:
SessionFactory (org.hibernate.SessionFactory)
针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。 它是生成Session的工厂,本身要用到ConnectionProvider。
Session (org.hibernate.Session)
表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了JDBC连接,也是Transacti
针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。 它是生成Session的工厂,本身要用到ConnectionProvider。
Session (org.hibernate.Session)
表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了JDBC连接,也是Transacti