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的更多相关文章
- Hibernate中的脏检查和缓存清理机制
脏检查 Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照.当Session清理缓存时, ...
- Hibernate 中createQuery与createSQLQuery
本文原址 : http://stta04.javaeye.com/blog/377633 hibernate 中createQuery与createSQLQuery 昨晚帮同事看代码到凌晨2点多,今早 ...
- Hibernate中对象的3种状态:瞬时态、持久态、脱管态
Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久 态的对象也称为PO(Persistence Objec ...
- 关于hibernate中对象的三种状态分析
一,首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load ...
- 关于hibernate中多对多关系
关于多对多关系 数据库:在使用多对多的关系时,我们能够使用复合主键.也能够不使用,直接引入外键相同能够实现. 在数据库中使用多对多关系时,须要一个中间表. 多对多关系中的数据库结构例如以下: 表:Or ...
- (转)收集:Hibernate中常见问题 No row with the given identifier exists问题的原因及解决
Hibernate中No row with the given identifier exists问题的原因及解决 产生此问题的原因: 有两张表,table1和table2.产生此问题的原因就是tab ...
- hibernate中对象的3种状态----瞬时态、持久态、脱管态
Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...
- java中的PO,VO,TO,BO,DAO,POJO的解释
java的(PO,VO,TO,BO,DAO,POJO)解释 O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定 ...
- 对象在hibernate中的状态
首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load() ...
随机推荐
- Another app is currently holding the yum lock; waiting for it to exit...另一个应用程序在占用yum lock,等待其退出。
这种情况下通常是由于yum的时候意外退出造成的,虽然也给出提示当前占用进行的id,但是执行kill -9 3599 强制杀死进程后,情况依然没能改变. 备注:(-9是强制杀死) 主要原因是因为,yum ...
- C语言初学者代码中的常见错误与瑕疵(19)
见:C语言初学者代码中的常见错误与瑕疵(19)
- 如何把一个java工程打成一个jar包(转载)
1.jar包有入口(即有main()函数) 选中要打包的工程--->右键选择Export---->java----->Runnable java file----->next- ...
- SSIS 关于并发的两个设置
1.MaxConcurrentExecutables(包级别的并发度控制) MaxConcurrentExecutables, a package level property in SSIS det ...
- Nginx+Keepalived实现 转载
一.Keepalived简介 keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务 ...
- jython语言学习笔记
1.变量可以随便定义,不限制类型,不限制数值.开头空4个空格,使用def定义函数,可以嵌套,可以传参. 2.每个语句结束的时候没有分号.定义类的时候没有括号.在print语句的后面有格式转换时要加上% ...
- Python编程核心之makeTextFile.py和readTextFile.py
引言: 最近大半年都在学习python编程,在双十一的时候购买了<Python编程核心>,看到makeTextFile.py和readTextFile.py两个例子有点错误,所以在这里给修 ...
- 【PHP设计模式 01_DuoTai.php】多态的说明
<?php /** * [多态] * 定义一个抽象类:Tiger,有两个子类:XTiger 和 MTiger */ header("Content-type: text/html; c ...
- SQLServer学习笔记<>日期和时间数据的处理(cast转化格式、日期截取、日期的加减)和 case表达式
日期和时间数据的处理. (1)字符串日期 ‘20080301’,这一串为字符串日期,但必须保证为四位的年份,两位的月份,两位的日期.例如,查询订单表日期大于‘20080301’.可以这样写: 1 se ...
- C++中关于cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
1.cin>> 用法1:最基本,也是最常用的用法,输入一个数字: 注意:>> 是会过滤掉不可见的字符(如 空格 回车,TAB 等) cin>>noskipws> ...