Hibernate学习笔记
最近在看视频学习Hibernate,之前上课已经学习了MyBatis,这两个框架都是数据持久层的ORM(Object/Relational Mapping)框架。
Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。
首先还是放上官方学习资料:http://docs.jboss.org/hibernate/core/3.6/reference/zh-CN/html_single/
什么是Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合, 既可以在Java的客户端程序使用,也可以在ServietJSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP, 完成数据持久化的重任。
优点
1.Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码
2.Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的orm实现,它很大程度的简化了dao层编码工作 session.save(User);
3.Hibernate使用java的反射机制
4.Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系
搭建Hibernate开发环境
一、官网下载Hibernate
解压后目录结构如下:
Hibernate项目必须Jar包:
二、编写JavaBean + 映射文件
bean类属性名尽量和数据库字段名保持一致,必须提供id。
数据库和表:
create database mydb;#创建数据库mydb
use mydb;
#创建user表
create table user(
id int auto_increment primary key,
username varchar(50),
password varchar(30)
);
bean类:
public class User {
private Integer id;
private String username;
private String password;
get/set...
映射文件:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="bean类全名(包名.类名)" table="user">
<!-- 主键 -->
<id name="id">
<!-- 固定值:主键生成策略 -->
<generator class="native"></generator>
</id>
<!-- 普通属性 -->
<property name="username"></property>
<property name="password"></property>
</class>
</hibernate-mapping>
三、编写核心配置文件
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 基本4项 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb</property>
<property name="hibernate.connection.username">账号</property>
<property name="hibernate.connection.password">密码</property>
<!-- 添加映射文件 -->
<mapping resource="映射文件所在位置"/>
</session-factory>
</hibernate-configuration>
四、测试
@Test
public void test1(){
User user = new User();
user.setUsername("张三");
user.setPassword("123");
//1 加载配置文件获得核心配置对象
Configuration config = new Configuration().configure();
//2 获得工厂 SessionFactory,相当于连接池
SessionFactory factory = config.buildSessionFactory();
//3获得会话session,相当于链接Connection
Session session = factory.openSession();
//4 开启事务
Transaction transaction = session.beginTransaction();
//操作
session.save(user);
//5 提交事务 | 回滚事务
transaction.commit();
//6 释放资源--关闭session
session.close();
//7 释放资源--关闭工厂factory
factory.close();
}
附一个工具类
public class HUtils {
// 会话工厂,整个程序只有一份。
private static SessionFactory factory;
static{
//1 加载配置
Configuration config = new Configuration().configure();
//2 获得工厂
factory = config.buildSessionFactory();
//3 关闭虚拟机时,释放SessionFactory
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("虚拟机关闭!释放资源");
sf.close();
}
}));
}
//获得session
public static Session openSession(){
return factory.openSession();
}
/**
* 获得当前线程中绑定session
* * 注意:必须配置
* @return
*/
public static Session getCurrentSession(){
return factory.getCurrentSession();
}
}
想要学习好hibernate,还是要多练。