Hibernate 原理

2010-08-16

Hibernate 是一种ORM框架。ORMObject-Relative Datebase-Mapping,将JAVA对象(POJO)和数据库之间建立映射关系,实现直接存储JAVA对象。实际上,Hibernate只是充当了DAO层的作用,根据POJO与实体类的配置映射自动生成相应的SQL语句。Hibernate通过Session取得数据库、Query对象、Transaction对象。这里的SessionJSP中的Session是不同的。Session是一个接口,通过其它类来实例化,固定格式为:

Configuration config = new AnnotationConfiguration().configure() ;

SessionFactory factory = config.buildSessionFactory() ;

this.session = factory.openSession() ;

 

这其中有2中配置映射方法:

1.      XML配置映射

由数据库中对应的表生成*.hbm.xml映射配置文件à配置hibernate.cfg.xml文件àPOJOàPOJO的具体操作类à调用POJO的类

由数据库中对应的表生成*.hbm.xml映射配置文件:User.hbm.xml

<hibernate-mapping>

    <class name="com.hym.hibernate.User" table="user" catalog="mldn">

        <id name="id" type="java.lang.Integer">

            <column name="id" />

            <generator class="assigned" />

        </id>

        <property name="password" type="java.lang.String">

            <column name="password" length="20" not-null="true" />

        </property>

    </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://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

<!-- Generated by MyEclipse Hibernate Tools.                   -->

<hibernate-configuration>

 

    <session-factory>

       <property name="myeclipse.connection.profile">MysqlDB</property>

       <property name="connection.url">

           jdbc:mysql://localhost:3306/mldn

       </property>

       <property name="connection.username">root</property>

       <property name="connection.password">mysqladmin</property>

       <property name="connection.driver_class">

           com.mysql.jdbc.Driver

       </property>

       <property name="dialect">

           org.hibernate.dialect.MySQLDialect

       </property>      

       <property name="show_sql">true</property>    

       <mapping resource="com/hym/hibernate/User.hbm.xml" />

    </session-factory>

</hibernate-configuration>

 

POJOUser.java

package com.hym.hibernate;

 

public class User {

    private int id ;

    private String password ;

    public int getId() {

       return id;

    }

    public void setId(int id) {

       this.id = id;

    }

    public String getPassword() {

       return password;

    }

    public void setPassword(String password) {

       this.password = password;

    }

}

POJO的具体操作类:UserOper.java

package com.hym.hibernate;

 

import java.util.Iterator;

import java.util.List;

 

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

 

public class UserOper {

       Session session = null ;

       public UserOper(){

              Configuration config = new Configuration().configure() ;

              SessionFactory factory = config.buildSessionFactory() ;

              this.session = factory.openSession() ;

       }

       public void insert(User user){

              Transaction tran = this.session.beginTransaction() ;

              this.session.save(user) ;

              tran.commit();

       }

       public void update(User user){

              Transaction tran = this.session.beginTransaction() ;

              this.session.update(user) ;

              tran.commit();

       }

       public void delete(int id){

              String hql="DELETE FROM User WHERE id=?" ;

              Query q = this.session.createQuery(hql) ;

              q.setInteger(0,     id) ;

              q.executeUpdate() ;

              Transaction tran = this.session.beginTransaction() ;

              tran.commit();

       }

       public User findById(int id){

              User u = new User() ;

              String hql="FROM User as u WHERE u.id=?" ;

              Query q = this.session.createQuery(hql) ;

              q.setInteger(0,     id) ;

              List<User> userList = q.list() ;

              Iterator<User> iter = userList.iterator() ;

              if(iter.hasNext()){

                     u = (User)iter.next() ;

              }

              return u ;

       }

}

调用POJO的类:TestUser.java

package com.hym.hibernate;

 

public class TestUser {

    public static void main(String args[]){

       User user = new User() ;

       user.setId(1003) ;

       user.setPassword("hym") ;

       UserOper uo = new UserOper() ;

       uo.insert(user) ;

    }

}

 

2.      JPA(Java Persistence API)注解(Annotation)配置

实体类(POJO)及注解配置映射à配置hibernate.cfg.xmlà POJO的具体操作类à调用POJO的类

实体类(POJO)及注解配置映射:

package com.hym.hibernate.annotation;

 

import javax.persistence.Column;

import javax.persistence.Entity; //必须为javax.persistence.*下的注解

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Table;

 

@Entity

@Table(name = "person")

public class Person {

       @Id

       @GeneratedValue(strategy = GenerationType.AUTO)

       private Integer id;

 

       @Column(name = "uid")

       private String uid;

 

       @Column(name = "name")

       private String name;

 

       @Column(name = "password")

       private String password;

 

       public Integer getId() {

              return id;

       }

 

       public void setId(Integer id) {

              this.id = id;

       }

 

       public String getUid() {

              return uid;

       }

 

       public void setUid(String uid) {

              this.uid = uid;

       }

 

       public String getName() {

              return name;

       }

 

       public void setName(String name) {

              this.name = name;

       }

 

       public String getPassword() {

              return password;

       }

 

       public void setPassword(String password) {

              this.password = password;

       }

}

配置hibernate.cfg.xm

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

<!-- Generated by MyEclipse Hibernate Tools.                   -->

<hibernate-configuration>

    <session-factory>

       <property name="myeclipse.connection.profile">MysqlDB</property>

       <property name="connection.url">

           jdbc:mysql://localhost:3306/mldn

       </property>

       <property name="connection.username">root</property>

       <property name="connection.password">mysqladmin</property>

       <property name="connection.driver_class">

           com.mysql.jdbc.Driver

       </property>

       <property name="dialect">

           org.hibernate.dialect.MySQLDialect

       </property>      

       <property name="show_sql">true</property>

           <property name="current_session_ontext_class">thread</property>

       <mapping class="com.hym.hibernate.annotation.Person" /> 

    </session-factory>

</hibernate-configuration>

POJO的具体操作类:

package com.hym.hibernate.annotation;

 

import java.util.Iterator;

import java.util.List;

 

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.AnnotationConfiguration;

import org.hibernate.cfg.Configuration;

 

public class PersonOper {

    Session session = null ;

    public PersonOper(){

       Configuration config = new AnnotationConfiguration().configure() ;

       SessionFactory factory = config.buildSessionFactory() ;

       this.session = factory.openSession() ;

    }

    public void insert(Person person){

       Transaction tran = this.session.beginTransaction() ;

       this.session.save(person) ;

       tran.commit();

    }

    public void update(Person person){

       Transaction tran = this.session.beginTransaction() ;

       this.session.update(person) ;

       tran.commit();

    }

    public void delete(int id){

       String hql="DELETE FROM Person WHERE id=?" ;

       Query q = this.session.createQuery(hql) ;

       q.setInteger(0,   id) ;

       q.executeUpdate() ;

       Transaction tran = this.session.beginTransaction() ;

       tran.commit();

    }

    @SuppressWarnings("unchecked")

    public Person findById(int id){

       Person p = new Person() ;

       String hql="FROM Person as p WHERE p.id=?" ;

       Query q = this.session.createQuery(hql) ;

       q.setInteger(0,   id) ;

       List<Person> personList = q.list() ;

       Iterator<Person> iter = personList.iterator() ;

       if(iter.hasNext()){

           p = (Person)iter.next() ;

       }

       return p ;

    }

}

调用POJO的类:

package com.hym.hibernate.annotation;

 

import org.hibernate.Session;

import org.hibernate.Transaction;

 

public class PersonTest {

       public static void main(String args[]){

              Person person = new Person() ;

              person.setId(1) ;

              person.setUid("hym");

              person.setName("hym");

              person.setPassword("hym");

              PersonOper po = new PersonOper() ;

              po.update(person) ;

       }

}

由以上可以知道Hibernate不只是Web专有,普通程序也可以使用Hibernate框架。由于JPAORM框架的标准,得到各种平台支持,所以推荐使用JPA注解配置映射。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值