一.hibernate是什么
- hibernate是一种用于数据持久化的框架,
- 它是对jdbc的第二次封装,可以简化程序员对数据的操作,提高开发效率
- 它是一种ORM(object relation mapping)映射工具,能够建立面向对象的域模型和关系数据模型之间的映射。
二.hibernate的基本使用
- 创建hibernate配置文件
- 创建持久化类,也就是其实例需要保存到数据库中的类
- 创建对象关系映射文件
- 创建通过hibernate API访问数据库中的代码
三.实例
- 创建hibernate配置文件:hibernate.cfg.xml(配置文件详解)
1 <!DOCTYPE hibernate-configuration PUBLIC 2 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 4 5 <hibernate-configuration> 6 <session-factory> 7 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 8 <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property> //指明需要连接的数据库 9 <property name="hibernate.connection.username">root</property> 10 <property name="hibernate.connection.password">root</property> 11 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 12 <property name="hibernate.show_sql">true</property> 13 14 <mapping resource="com/entity/User.hbm.xml"/> //确定hibernate需要操作的实体类 15 </session-factory> 16 </hibernate-configuration>
主要功能是:实现具体数据库与应用程序的接通。
注意:实体类还需要配置到hibernate.cfg.xml中,以便Hibernate初始化实体类与数据库表的映射关系。如果只配置了映射关系,而没有配置到hibernate.cfg.xml中,Hibernate是无法解析实体类的,因为Hibernate无法自行判断哪些是实体类。
2.创建持久化类,也就是其实例需要保存到数据库中的类:User.java(配置文件详解)
1 package com.entity; 2 3 import java.util.Date; 4 5 public class User { 6 7 private String id; 8 private String name; 9 private String password; 10 private Date createTime; 11 private Date expireTime; 12 13 public String getId() { 14 return id; 15 } 16 public void setId(String id) { 17 this.id = id; 18 } 19 public String getName() { 20 return name; 21 } 22 public void setName(String name) { 23 this.name = name; 24 } 25 public String getPassword() { 26 return password; 27 } 28 public void setPassword(String password) { 29 this.password = password; 30 } 31 public Date getCreateTime() { 32 return createTime; 33 } 34 public void setCreateTime(Date createTime) { 35 this.createTime = createTime; 36 } 37 38 public Date getExpireTime() { 39 return expireTime; 40 } 41 public void setExpireTime(Date expireTime) { 42 this.expireTime = expireTime; 43 } 44 }
3.创建对象关系映射文件:User.hbm.xml(配置文件相关参数详解)
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6 <class name="com.entity.User" table = "user"> //指明该类对应的具体数据表 7 <id name="id"> 8 <generator class="uuid"/> //generator属性详解 9 </id> 10 <property name="name"/> 11 <property name="password"/> 12 <property name="createTime"/> 13 <property name="expireTime"/> 14 </class> 15 </hibernate-mapping>
主要功能:实现数据库中表格与相应的实体类的绑定(映射)
4.创建通过hibernate API访问数据库中的代码
简单的crud操作,通过hibernateUtils类封装起来:
public class hibernateUtils{
private static SessionFactory factory;
public static Session getSession() {
return factory.openSession();
}
static { // 载入虚拟机时执行一次
// configure默认加载hibernate.cfg.xml
// 如果不是hibernate.cfg.xml,则指定其他名字,此文件从classpath中找
Configuration config = new Configuration().configure();
factory = config.buildSessionFactory();
}
//插入
public static void insert() {
// 取得session
Session session = null;
try {
session = hibernateUtils.getSession();
// 开启事务
session.beginTransaction();
User user = new User();
user.setId("3");
user.setName("jyhuang");
user.setPassword("root");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
// 保存User对象
session.save(user);
// 提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
// 回滚事务
session.getTransaction().rollback();
} finally {
if (session != null) {
if (session.isOpen()) {
// 关闭session
session.close();
}
}
}
}
//更新
public static void update(Object obj) {
Session session = null;
Transaction tx = null;
try {
session = hibernateUtils.getSession();
tx = session.beginTransaction();
session.update(obj);
tx.commit();
} catch (HibernateException e) {
if (tx != null) { // 如果存在事务,则回滚
tx.rollback();
}
throw e; // 抛出异常
} finally {
if (session != null) // 如果session存在,则关闭
session.close();
}
}
//获取
public static Object get(Class clazz, String id) {
Session session = null;
try {
session = hibernateUtils.getSession();
Object obj = session.get(clazz, id);
return obj;
} finally {
if (session != null) {
session.close();
}
}
}
//删除
private static void delete(Object obj) {
Session session = null;
Transaction tx = null;
try {
session = hibernateUtils.getSession();
tx = session.beginTransaction();
session.delete(obj);
tx.commit();
} catch (HibernateException e) {
if (tx != null) { // 如果存在事务,则回滚
tx.rollback();
}
throw e; // 抛出异常
} finally {
if (session != null) // 如果session存在,则关闭
session.close();
}
}
}
对应的test类
1 public class Test { 2 public static void main(String[] args) { 3 // 添加 4 hibernateUtils.insert(); 5 // 删除 6 // User u = new User(); 7 // u.setId("1"); 8 // hibernateUtils.delete(u); 9 // 获取 10 // User u = (User) hibernateUtils.get(User.class, "2"); 11 // System.out.println("更新前:" + u.getName()); 12 // // 更新 13 // u.setName("hsyang"); 14 // hibernateUtils.update(u); 15 // User u1 = (User) hibernateUtils.get(User.class, "2"); 16 // System.out.println("更新后:" + u1.getName()); 17 18 } 19 }