一、hibernate是什么?
hibernate是对jdbc进行轻量级封装的ORM框架,充当项目的持久层
二、什么是ORM?
object relation mapping 对象关系映射,为了解决面向对象与关系数据库之间不匹配的技术,将java对象自动持久化到关系数据库中。本质上就是将一种形式转换成另一种形式。使用ORM技术可以在Java中以类和对象的方式去操控数据表和记录
三、使用hibernate的好处
程序员关注业务实现,数据库人员关注数据操作,工作角色细化,提高效率
分层清晰,降低耦合性
通用性强,轻松转移至其他数据平台
对象化;
性能保证,hibernate根据不同数据库,使用最优语句
四、学习hibernate的三个重点:
- hibernate api;
- hibernate.cfg.xml(核心配置文件)
- 对象关系映射文件
五、hibernate开发方式的三种方式:
- 由Domain object -> mapping->db。(官方推荐)
- 由DB开始,用工具生成mapping和Domain object。(使用较多)
- 由映射文件开始
六、简单的Hibernate开发流程
- 创建一个项目
- 画出简单的项目框架示意图
- 引入项目开发所需要的jar包
必须的
连接oracle数据库的 或 其他数据库的(...)
- 创建表
create table employee(
id number primary key,
name varchar2(64) not null,
email varchar2(64) not null,
hiredate date not null)
--创建一个序列
create sequence emp_seq
start with 1
increment by 1
minvalue 1
nomaxvalue
nocycle
nocache
- 开发domain对象和对象关系映射文件(domain名.hbm.xml 【反射机制】
Employee.hbm.xml配置文件 :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hsp.domain">
<class name="Employee" table="employee">
<!-- id元素用于指定主键属性 -->
<id name="id" column="id" type="java.lang.Integer">
<!-- 该元素用于指定主键值生成策略hilo native increment sequence uuid -->
<generator class="sequence">
<param name="sequence">emp_seq</param>
</generator>
</id>
<!-- 对其它属性还有配置 -->
<property name="name" type="java.lang.String">
<column name="name" not-null="false" />
</property>
<property name="email" type="java.lang.String" >
<column name="email" not-null="false"/>
</property>
<property name="hiredate" type="java.util.Date">
<column name="hiredate" not-null="false" />
</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">
<hibernate-configuration>
<session-factory>
<!-- hibernate 设计者,给我们提供了一写常用的配置 -->
<!-- 配置使用的driver -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.username">scott</property>
<property name="connection.password">tiger</property>
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orclhsp</property>
<!-- 配置dialect方言,明确告诉hibernate连接是哪种数据库 -->
<property name="dialect">org.hibernate.dialect.OracleDialect</property>
<!-- 显示出对于sql -->
<property name="show_sql">true</property>
<!-- 指定管理的对象映射文件 -->
<mapping resource="com/hsp/domain/Employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>
- 测试:创建configuration读取hibernate.cfg.xml文件,创建SessionFactory,Session,用对象进行持久化操作
测试文件TestMain.java
public class TestMain {
/**
* @param args
*/
public static void main(String[] args) {
//我们使用hibernate完成crud操作[这里我们只见对象,不见表]
//现在我们不是用service ,直接测试.
//1。创建Configuration,该对象用于读取hibernate.cfg.xml,并完成初始化
Configuration configuration=new Configuration().configure();
//2.创建SessoinFactory[这是一个会话工厂,是一个重量级的对象]
SessionFactory sessionFactory=configuration.buildSessionFactory();
//3.创建Sessoin 相当于jdbc Connection[ servelt HttpSession ,也不是 jsp session]
Session session=sessionFactory.openSession();
//4.对hiberate而言,要求程序员,在进行 增加,删除,修改的时候使用事务提交,
Transaction transaction = session.beginTransaction();
//添加一个雇员
Employee employee=new Employee();
employee.setName("shunping");
employee.setEmail("shunping@sohu.com");
employee.setHiredate(new Date());
//insert .............
//保存
session.save(employee);//save employee就是持久化该对象 (把对象保存到了数据库中称为一条记录)
//==>insert into ....[被hiberante封装]
//提交
transaction.commit();
session.close();
}
七、hibernate的load()方法
//修改用户
//获取一个会话
Session session=MySessionFactory.getSessionFactory().openSession();
Transaction ts=session.beginTransaction();
//修改用户1. 获取要修改的用户,2.修改
//load是通过主键属性,获取该对象实例.<--->表的记录对应
Employee emp=(Employee) session.load(Employee.class, 3);
emp.setName("123");//update...无需使用update方法,
emp.setEmail("abc@sohu.com");
ts.commit();//提交之后自动写入一条update语句
八、使用hibernate切换成mysql数据库
1、修改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">
<hibernate-configuration>
<session-factory>
<!-- hibernate 设计者,给我们提供了一写常用的配置 -->
<!-- 配置使用的driver -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8</property>
<!-- 配置dialect方言,明确告诉hibernate连接是哪种数据库 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 显示出对于sql -->
<property name="show_sql">true</property>
<!-- 让hibernate给我们自动创建表 create :每次执行创建新表,update:不存在表或者表空间有变化则创建新表. -->
<property name="hbm2ddl.auto">create(update)</property>
<!-- 指定管理的对象映射文件 -->
<mapping resource="com/hsp/domain/Employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>
2、修改Emplyee.hbm.xml文件配置
<!-- 对主键生成策略我们做了修改 -->
<id name="id" column="id" type="java.lang.Integer">
<generator class="increment"></generator>
</id>