一、Hibernate的简介
Hibernate是开源的一个ORM(对象关系映射)框架。ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。
Hibernate的核心:
【接口说明】
1.Configuration接口:负责配置并启动Hibernate。
2.SessionFactory接口:负责初始化Hibernate。
3.Session接口:负责持久化对象的CRUD操作。
4.Transaction接口:负责事务。
5.Query接口和Criteria接口:负责执行各种数据的查询。
注意:Configuration实例是一个启动期间的对象,一旦SessionFactory创建完成它就被丢弃了。
二、Hibernate的配置
提供User.hbm.xml文件,完成实体类的映射
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.example.hibernate.User">
<id name="id">
<generator class="uuid"/>
</id>
<property name="username"/>
<property name="password"/>
<property name="createTime"/>
<property name="expireTime"/>
</class>
</hibernate-mapping>
配置hibernate.cfg.xml文件
<hibernate-configuration>
<session-factory >
<!-- mysql数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- mysql数据库名称 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
<!-- 数据库的登陆用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库的登陆密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 方言:为每一种数据库提供适配器,方便转换 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/example/hibernate/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
三、Hibernate的基本应用
事务的开启
public class Client {
public static void main(String[] args) {
//读取配置文件
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
//根据SessionFactory创建Session
Session session = null;
try{
session = factory.openSession();
//开启事务
session.beginTransaction();
//进行事务(add、delete、update、get、load)......
//提交事务
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
//如果有异常则需要回滚事务
session.getTransaction().rollback();
}finally{
if(session != null){
if(session.isOpen()){
//关闭session
session.close();
}
}
}
}
}
添加对象
User user = new User();
user.setUsername("ada");
user.setPassword("123");
user.setCreateDate(new Date());
session.save(user);
查询对象
查询有两种方法:get()和load(),下面来介绍一下这两种方法的区别。两种方法的区别请看延迟加载。
//利用load()方法加载对象
User u = (User)session.load(User.class,id);
//利用get()方法加载对象
User user = (User)session.get(User.class, id);
删除对象
删除的对象一定要是持久态的,若是瞬时态的则会报错。通常进行删除操作之前,我们都会先把对象加载出来,然后再进行删除操作,这样相当于删除之前先查询数据库。
User u = (User)session.load(User.class,id);
if(u!=null)
session.delete(u);
小提示:delete方法本质上是取出对象的id,其他属性对他没意义,所以用load方法取出的代理对象,就可以delete了。这个时候不用担心延迟加载导致session关闭报错之类的问题。
修改对象
User u = (User)session.load(User.class,id);
if(u!=null){
u.setAge(18);
session.update(u);
}