Hibernate二
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate二相关的知识,希望对你有一定的参考价值。
1.1Hibernate的持久化类状态
1.1.1Hibernate的持久化类状态
- 持久化类:就是一个实体类和数据库表建立了映射关系。
- Hibernate为了方便的管理持久化类,将持久化类分成了三种状态。
- 瞬时态(临时态) transient
- 持久态 persistent
- 脱管态(游离态) detached
1.1.2 三种持久化对象的状态
- 瞬时态 Transient
- 不存在持久化标识OID,尚未与Hibernate的session关联,被认为处于瞬时态,失去引用将被JVM回收。换句话说,持久化对象没有唯一标识OID,没有纳入Session的管理。
- 持久态 Persistent
- 存在持久化标识OID,与当前session有关联,并且相关联的session没有关闭,并且事务没有提交。换句话说,持久化对象有唯一标识OID,已经纳入Session的管理,并且持久化持久态对象具有自动更新数据库的能力。
- 脱管态 Detached
- 存在持久化标识OID,但是没有与当前的session关联,脱管状态改变Hibernate不能检测到。换句话说,持久化对象有唯一的标识OID,没有纳入到session管理。
1.1.3区分三种持久化对象的状态
新建cn.hibernate3.demo1.Book.java类
package cn.hibernate3.demo1; /** * 实体类 * @author love */ public class Book { private Integer id; private String name; private Double price; private String author; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } }
配置Book.hbm.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!-- 引入约束 --> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="cn.hibernate3.demo1.Book" table="book"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name" column="name" type="java.lang.String"/> <property name="price" column="price" type="java.lang.Double"/> <property name="author" column="author" type="java.lang.String"/> </class> </hibernate-mapping>
配置核心映射文件(hibernate.cfg.xml文件)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 配置数据库的基本信息 --> <!-- 驱动的名称 --> <property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver </property> <!-- 访问数据库的url --> <property name="hibernate.connection.url"> jdbc:mysql:///hibernate_day02 </property> <!-- 用户名 --> <property name="hibernate.connection.username">root</property> <!-- 密码 --> <property name="hibernate.connection.password">root</property> <!-- 方言 --> <property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </property> <!-- C3P0连接池设定--> <!-- 使用c3po连接池 配置连接池提供的供应商--> <property name="connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider </property> <!--在连接池中可用的数据库连接的最少数目 --> <property name="c3p0.min_size">5</property> <!--在连接池中所有数据库连接的最大数目 --> <property name="c3p0.max_size">20</property> <!--设定数据库连接的过期时间,以秒为单位, 如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 --> <property name="c3p0.timeout">120</property> <!--每3000秒检查所有连接池中的空闲连接 以秒为单位--> <property name="c3p0.idle_test_period">3000</property> <!-- 可选配置 --> <!-- 显示SQL --> <property name="hibernate.show_sql">true</property> <!-- 格式化SQL --> <property name="hibernate.format_sql">true</property> <!-- hbm:映射 2:to ddl:create drop alter --> <property name="hibernate.hbm2ddl.auto">update</property> <mapping resource="cn/hibernate3/demo1/Book.hbm.xml" /> </session-factory> </hibernate-configuration>
新建HibernateUtils.java类
package cn.utils; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; /** * Hibernate抽取工具类 */ public class HibernateUtils { private static Configuration configuration; private static SessionFactory sessionFactory; static{ configuration = new Configuration().configure(); sessionFactory = configuration.buildSessionFactory(); } public static Session openSession(){ return sessionFactory.openSession(); } public static void main(String[] args) { openSession(); } }
运行HibernateUtils工具类,即可发现创建了book表
测试
package cn.hibernate3.demo1; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import cn.utils.HibernateUtils; public class HibernateTest1 { @Test //区分持久化对象的三种装填 public void demo1(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //向数据库中保存一本图书 Book book = new Book();//瞬时态:没有唯一标识OID,没有与session关联 book.setName("Hibernate开发"); book.setAuthor("哈哈"); book.setPrice(65.0); session.save(book);//持久态:有唯一标识OID,与session关联 tx.commit(); session.close(); book.setName("Struts2开发");//脱管态:有唯一标识,没有与session关联 } }
1.1.4
以上是关于Hibernate二的主要内容,如果未能解决你的问题,请参考以下文章
具有运行时 pojos 的带有 Hibernate 的 OSGi 片段包