首页 > 代码库 > Hibernate中的PO
Hibernate中的PO
Hibernate中的PO
PO就是持久化对象,它的作用就是完成持久化操作,即通过以面向对象的方式操作该对象对数据库中的数据执行增、删、改、查的操作。
Hibernate是低侵入式的设计,完全采用Java对象作为持久化对象,在Hibernate中,持久化类不用继承任何父类或者实现任何的接口,只要为其添加注解就可以使其成为一个PO类。
示例:
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="text_info") public class News_1 { //消息类的标识属性 @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; //消息标题 private String title; //消息内容 private String content; //setter、getter方法 public void setId(Integer id){ this.id = id; } public Integer getId(){ return this.id; } public void setTitle(String title){ this.title = title; } public String getTitle(){ return this.title; } public void setContent(String content){ this.content = content; } public String getContent(){ return this.content; } }
注解的简单解释:
@Entity:声明该类是一个Hibernate的持久化类。
@Table:指定该类所映射的表。
@Id:指定该类的标识属性,即可以唯一标识该对象的属性,通常映射到数据表中的主键字段。
@GenerateValue:指定主键的生成策略,其中Strategy属性指定了主键生成策略为IDENTITY即自增长策略。
使用该PO类,为数据库中增添表以及记录:
(1)配置XML文件
<?xml version=‘1.0‘ encoding=‘utf-8‘?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 指定连接数据库所用的驱动 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 指定连接数据库的url,其中hibernate是数据库名 --> <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate</property> <!-- 指定连接数据库的用户名 --> <property name="hibernate.connection.username">root</property> <!-- 指定连接数据库的密码 --> <property name="hibernate.connection.password">stx12345</property> <!-- 指定连接池中的最大连接数 --> <property name="hibernate.c3p0.max_size">20</property> <!-- 指定连接池中的最小连接数 --> <property name="hibernate.c3p0.min_size">1</property> <!-- 指定连接池里连接的超时时长 --> <property name="hibernate.c3p0.timeout">5000</property> <!-- 指定连接池里最大缓存多少个Statement对象 --> <property name="hibernate.c3p0.statements">100</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="hibernate.c3p0.validate">true</property> <!-- 指定数据库方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!-- 根据需要自动创建数据表 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 显示Hibernate持久化操作所生成的SQL --> <property name="show_sql">true</property> <!-- 将SQL脚本进行格式化后再输出 --> <property name="hibernate.format_sql">true</property> <!-- 罗列所有持久化类的类名 --> <mapping class="myPOTest.News"/> </session-factory> </hibernate-configuration>
(2)主程序
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import myPOTest.News; public class NewsManager { public static void main(String[] args)throws Exception{ //实例化Configuration Configuration conf = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(conf.getProperties()).build(); //用Configuration实例创建SessionFactory实例 SessionFactory sf = conf.buildSessionFactory(serviceRegistry); //创建Session Session sess = sf.openSession(); //开始事务 Transaction tx = sess.beginTransaction(); //创建消息对象 News n = new News(); //设置标题和消息内容 n.setTitle("A"); n.setContent("a"); //保存消息 sess.save(n); //提交事务 tx.commit(); //关闭Session sess.close(); sf.close(); } }
注意:hibernate.cfg.xml文件要放在src目录下,注意,除了导入Hibernate的包以外还需要导入c3p0的包和mysql的包
使用Hibernate进行持久化操作的步骤:
(1)开发持久化类
(2)获取Configuration
(3)获取SessionFactory
(4)获取Session,打开事务
(5)使用面向对象的方式操作数据库
(6)关闭事物,关闭Session
PO的三种状态:
(1)瞬态:PO从未与Session关联过,该PO处于瞬态;
(2)持久化:PO实例与Session关联,且该实例对应到数据库记录,则该实例处于持久化状态;
(3)托管:PO曾与Session关联过,由于Session的关闭或者其他原因,PO脱离了Session的管理,这种状态被称为托管状态。
对PO的操作必须在Session的管理下才能同步到数据库。Session由SessionFactory产生。SessionFactory对象由Configyration对象产生,Configuration对象负责加载Hibernate的配置文件。
Hibernate中的PO