2010-08-16
Hibernate 是一种ORM框架。ORM:Object-Relative Datebase-Mapping,将JAVA对象(POJO)和数据库之间建立映射关系,实现直接存储JAVA对象。实际上,Hibernate只是充当了DAO层的作用,根据POJO与实体类的配置映射自动生成相应的SQL语句。Hibernate通过Session取得数据库、Query对象、Transaction对象。这里的Session与JSP中的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> |
POJO:User.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框架。由于JPA是ORM框架的标准,得到各种平台支持,所以推荐使用JPA注解配置映射。