Hibernate入门
Hibernate简介
- Hibernate的创始人Gavin King
- EJB 3.0专家委员会成员
- JBoss核心成员之一
- 《Hibernate in Action》的作者
- 优秀的Java持久化层解决方案
- 主流的对象-关系映射工具
Hibernate的优缺点
-
简化了JDBC繁琐的编码
Session session = HiberanteUtil.currentSession(); Query query = session.createQuery("from User"); List<User> users = (List<User>) query.list();
-
对面向对象特性支持良好
-
可移植性好
-
Hibernate的缺点
- 不适合需要使用数据库的特定优化机制的情况
- 不适合大规模的批量数据处理
与MyBatis的比较
- 相对于MyBatis的“SQL-Mapping”的ORM实现,Hibernate的ORM实现更加完善,提供了对象状态管理、级联操作的功能
- 完全面向对象,语句与数据库无关,开发者无需关注SQL的生成,开发简单,便于修改,数据库移植性好
- 由于直接使用SQL,MyBatis使用自由度较高
使用Hibernate的步骤
- 下载并部署相关jar文件
- 编写Hibernate配置文件
- 创建持久化类和映射文件
- 使用Hibernate API
准备Hibernate
-
下载需要的jar文件
- Hibernate的官方网站 http://hibernate.org
- 托管网站
- https://sourceforge.net/projects/hibernate/files/
- 推荐下载:hibernate-distribution-3.6.10.Final-dist.zip
- https://sourceforge.net/projects/hibernate/files/
-
部署jar文件
- hibernate3.jar
- lib\required目录下的jar文件
- lib\jpa\hibernate-jpa-2.0-api-1.0.1.Final.jar
- Oracle数据库驱动jar文件
-
编写Hibernate配置文件
- 用于配置数据库连接
- 运行时所需的各种特性
- 一般命名为“hibernate.cfg.xml”
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1.1521:orcl</property> <property name="connection.username">scott</property> <property name="connection.password">tiger</property> <property name="connection.dirver_class">oracle.jdbc.OracleDriver</property> <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="current_session_context_class">thread</property>
-
创建持久化类和映射文件
-
定义持久化类(也称实体类),实现java.io.Serializable接口,添加默认构造方法
pulbic class Dept implements Serializable{ private Byte deptNo; private String deptName; private String location; public Dept(){} //省略getter&setter方法 }
-
配置映射文件(*.hbm.xml)
<hibernate-mapping> <class name="cn.hibernatedemo.entity.Dept" table="`DEPT`"> <id name="deptNo" column="`DEPTNO`" type="java.lang.Byte"> <generator class="assigned"/> </id> <property name="deptName" type="java.lang.String"> <column name="`DNAME`"></column> </property> <property name="location" type="java.lang.String" column="`LOC`"/> </class> </hibernate-mapping>
-
向hibernate.cfg.xml文件中配置映射文件
<session-factory> <!-- 省略其他配置 --> <mapping resource="cn/hibernatedemo/entity/Dept.hbm.xml"/> </session-factory>
-
使用Hibernate API
使用Hibernate实现查询操作
通过主键值加载指定类型的实例
方法 | 区别一 |
---|---|
Object get(Class clazz,Serialible id) | 若数据不存在,返回null |
Object load(Class clazz,Serializable id) | 若数据不存在,使用时抛出ObjectNotFoundException |
使用Hibernate实现修改、删除
修改
tx = session.beginTransaction();//开启事务
Dept dept = (Dept) session.load(Dept.class,new Byte("13"));//加载数据
dept.setDeptName("研发部");//修改数据
tx.commit();//提交事务
删除
tx = session.beginTransaction();
Dept dept = (Dept) session.load(Dept.class,new Byte("13"));
session.delete(dept)
tx.commit();
Hibernate中Java对象的三种状态
瞬时状态(Transient):数据库中没有,会话中没有
持久状态(Persistent):数据库中有,会话中有
游离状态(Detached):数据库中有,会话中没有
三种状态之间的转换