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的更多相关文章

  1. Hibernate中的脏检查和缓存清理机制

    脏检查 Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照.当Session清理缓存时, ...

  2. Hibernate 中createQuery与createSQLQuery

    本文原址 : http://stta04.javaeye.com/blog/377633 hibernate 中createQuery与createSQLQuery 昨晚帮同事看代码到凌晨2点多,今早 ...

  3. Hibernate中对象的3种状态:瞬时态、持久态、脱管态

    Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久 态的对象也称为PO(Persistence Objec ...

  4. 关于hibernate中对象的三种状态分析

    一,首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load ...

  5. 关于hibernate中多对多关系

    关于多对多关系 数据库:在使用多对多的关系时,我们能够使用复合主键.也能够不使用,直接引入外键相同能够实现. 在数据库中使用多对多关系时,须要一个中间表. 多对多关系中的数据库结构例如以下: 表:Or ...

  6. (转)收集:Hibernate中常见问题 No row with the given identifier exists问题的原因及解决

    Hibernate中No row with the given identifier exists问题的原因及解决 产生此问题的原因: 有两张表,table1和table2.产生此问题的原因就是tab ...

  7. hibernate中对象的3种状态----瞬时态、持久态、脱管态

    Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...

  8. java中的PO,VO,TO,BO,DAO,POJO的解释

    java的(PO,VO,TO,BO,DAO,POJO)解释  O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定 ...

  9. 对象在hibernate中的状态

    首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load() ...

随机推荐

  1. 同时启动多个Tomcat

    一,修改配置文件server.xml的端口 C:\apache-tomcat-5.5.23-1\conf\server.xml用记事本什么的打开修改3个地方   第一: <Server port ...

  2. paper 44 :颜色矩和颜色相关图(color correlogram)

  3. Uploadify在MVC中使用方法案例(上传单张图片)

    在View视图中: <link href="/Scripts/uploadify-v3.2.1/uploadify.css" rel="stylesheet&quo ...

  4. eclipse的debug模式启动缓慢

      这个问题可能是由于eclipse和服务器的交互而产生的,在以debug模式启动服务器时,发生了读取文件错误,eclipse自动设置了断点,导致服务器不能正常启动. 解决方法如下:以debug模式启 ...

  5. java 超经漂亮验证码

    package com.zly.xsp.image; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; im ...

  6. 夺命雷公狗---Thinkphp----6之管理员的增删改查之-未验证

    首先我们创建多一个控制器UserController.class.php,主要用于管理员的增删改查操作: 代码如下所示: <?php namespace Admin\Controller; us ...

  7. 夺命雷公狗---DEDECMS----1dedecms的安装过程

    我们这次要玩的dedecms(cms也就是内容管理系统),电商网.或者政府网..小说网.新闻网之类的都是基于可以用cms来实现的. 现在在市场上主流的cms系统有dedecms(织梦),帝国cms,p ...

  8. scrum站立会议------10.20

    小组名称:nice! 小组成员:李权 于淼 杨柳 刘芳芳 项目内容:约跑app(约吧--暂定) 1.任务进度 2.燃尽图

  9. linux与windows的文本文件之间的转换

    在CentOS中需要安装一个软件包:tofrodos 包里包含的命令可以用包管理工具列出包里的文件. 以 CentOS 的 rpm 为例: rpm -ql tofrodos 在ArchLinux中需要 ...

  10. 【海岛帝国系列赛】No.6 海岛帝国:战争前线

    50234237海岛帝国:战争前线 [试题描述] 总指挥官WHT出神入化的计谋虽然大有用武之地,但是聪明的恐怖分子们采取了城市核武器防御系统,可以有效地抵制WHT的炸弹.YSF对此头痛不已,因此 召开 ...