Hibenate技术详解

2023-11-10

 
一:Hibernate的基本用法:
1,Hibernate的数据库操作:
        在所有的ORM框架中有一个非常重要的媒介:PO(Persistence Object,持久化对象),持久化对象的作用是完成持久化操作,简单的说,通过该对象可以对数据进行增删改查的操作。
        Hibernate的PO是非常简单的,Hibernate是低侵入式设计,完全采用普通的Java对象来作为持久化对象。 看下面的 一个普通的Java对象:
public class News
{
    //消息类的标识属性
    private int id;
    //消息标题
    private String title;
    //消息内容
    private String content;
    //构造器
    public News()
    {
    }
    //标识属性的setter和getter方法
    public void setId(int id) 
    {
        this.id = id; 
    }
    public int getId()
    {
        return (this.id); 
    }
    //消息标题的setter方法和getter方法
    public void setTitle(String title) 
    {
        this.title = title; 
    }
    public String getTitle() 
    {
        return (this.title); 
    }

    //消息内容的setter方法和getter方法
    public void setContent(String content)
    {
        this.content = content; 
    }
    public String getContent()
    {
        return (this.content); 
    }
}
News.hbm.xml:
<?xmlversion="1.0"?>
<!DOCTYPEhibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.huaxia.domain"
default-access="field">
<classname="News"table="table_news">
<idname="id">
<generatorclass="native"/>
</id>
<propertyname="name"column="uname"/>
<propertyname="sex"/>
<propertyname="age"/>
</class>
</hibernate-mapping>
这个普通的javaBean目前还不具备持久化操作的能力,为了使其具备持久化操作的能力,Hibernate采用XML映射文件, 如:
hibernate.cfg.xml:
<!DOCTYPEhibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factoryname="foo">
<propertyname="show_sql">true</property>
<propertyname="hibernate.connection.username">sa</property>
<propertyname="hibernate.connection.password">123</property>
<propertyname="ibernate.connection.pool_size">1000</property>
<propertyname="ibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<propertyname="hibernate.connection.url">jdbc:sqlserver://localhost:1433;DataBaseName=WebExma</property>
<propertyname="hibernate.c3p0.min_size">5</property>
<propertyname="hibernate.c3p0.max_size">20</property>
<propertyname="hibernate.c3p0.timeout">1800</property>
<propertyname="hibernate.c3p0.max_statements">50</property>
<propertyname="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<propertyname="hibernate.hbm2ddl.auto">update</property>
<mappingresource="cn/huaxia/domain/News.hbm.xml"/>
</session-factory>
</hibernate-configuration>
hibernate-mapping元素下的class子元素,每一个class映射一个PO,所以可以这样说:
                 PO=POJO+映射文件
Hibernate的配置文件可以是一个properties文件也可以是一个xml文件,在实际应用中,通常使用xml文件, 例如:
 
<?xml version="1.0" encoding="GBK"?>
<!-- 指定Hibernate配置文件的DTD信息 -->
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- hibernate- configuration是连接配置文件的根元素 -->
<hibernate-configuration>
    <session-factory>
        <!-- 指定连接数据库所用的驱动 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 指定连接数据库的url,hibernate连接的数据库名 -->
        <property name="connection.url">jdbc:mysql://localhost/hibernate</property>
        <!-- 指定连接数据库的用户名 -->
        <property name="connection.username">root</property>
        <!-- 指定连接数据库的密码 -->
        <property name="connection.password">32147</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.max_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="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
        <!-- 根据需要自动创建数据库 -->
        <property name="hbm2ddl.auto">create</property>
        <!-- 罗列所有的映射文件 -->
        <mapping resource="News.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
Hibernate不推荐使用DriverManager来连接数据库,推荐使用C3P0数据源。
随着PO与Session的关联关系,PO有如下3种状态:
瞬时状态:如果PO实例从未与Session关联过,该PO实例处于瞬时状态。
持久状态:如果PO实例域Session关联起来,且该实例对应数据库记录,则该实例处于持久化状态。
脱管状态:如果PO实例曾与Session关联过,但因为Session关闭等原因,PO实例脱离了Session的管理,这种状态称之为脱管状态。
        对PO的操作必须在Session管理下才能同步到数据库,Session由SessionFactory产生,SessionFactory是数据库编译后的内存镜像,通常一个应用对应一个SessionFactory对象。SessionFactory由Configuration对象产生,Configuration对象负责加载Hibernate配置文件。如:
publicclass NewsTest {
    publicstatic void add(Object obj) {
        Configuration conf =new Configuration().configure();
        SessionFactory sessionFactory = conf.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction tr = session.beginTransaction();
        session.save(obj);
        tr.commit();
    }
    publicstatic void main(String[] args) {
        News news =new News();
        news.setAge(20);
        news.setSex("男");
        news.setName("johnny");
        add(news);
    }
}
2,JNDI数据源的连接属性:
        如果无需使用hibernate自己管理数据源,而是直接访问容器管理数据源,hibernate可使用JNDI数据源的相关配置,下面是连接 JNDI数据源的主要配置属性:
hibernate.connection.datasource:指定数据源JNDI名字;
hibernate.jndi.url:指定JNDI提供者的URL,该属性是看可选的,如果JNDI与hibernate持久访问的代码处于同一个应用中,则无需指定该属性;
hibernate.jndi.class:指定JNDI InitialContextFactory的实现类,该属性也是可选的,如果JNDI与hibernate持久访问的代码处于同一个应用中,则无需指定该属性;
hibernate.connection.username:指定连接数据库的用户名;
hibernate.connection.password:指定连接数据库的密码。
注意:即使使用jndi数据源,一样需要指定连接数据库的方言,虽然设置数据库方言不是必须的,但是对于优化持久访问层很有必要。
3,改变持久化对象的状态的方法:
        根据前面的介绍的内容,我们知道通过new新建一个持久化实例时,该实例处于瞬时状态,为了让瞬时对象转换为持久化状态,Hibernate Session提供如下几个方法:
Serializable save(Object obj)将Object 对象转变成持久化状态,该对象的属性值被保存到数据库中。
void persist(Object obj):将对象转化成持久化状态,该对象的属性保存到数据库中。 <
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibenate技术详解 的相关文章

随机推荐