初识Hibernate
2011-12-11 14:07
246 查看
一、引用一段话:在理想环境中,获得任何java对象并将它持久化到数据库应该是很轻松的,不需要编写特殊的代码,也不会有性能损失,而且结果是完全可以移植的。在
这样的理想环境中,我们可能会按照以下方式执行数据库操作:
Hibernate是款神奇的软件,只需要你有少量的编程经验就可以完成上述的“理想”,在hibernate中我们是这样操作的:
其中HibernateSessionFactory我们编写的辅助类(很多时候并不需要我们手动编写此类,如果要编写的话也不是很难,就是个单例模式),他是个静态工具类,
在hibernate初始化的时候它会被装入内存,且只能有一个。session是hibernate提供的最重要的编程接口,它类似于jdbc的connection, 而user是一个javabean,
它与数据库中的一张表对应,它拥有表中所有的字段,当然在类中是属性,含有这些字段的get set方法,这就是实体类,在支持hibernate的系统中这样操作就
可以将实体存入数据库。
二、 一般使用hibernate开发的步骤
①引入hibernate需要的jar包
②配置hibernate配置文件(hibernate.cfg.xml),因为hibernate是对jdbc轻量级的封装,底层还是jdbc我们必须配置次文件,最重要的就是连接数据库的url用户名和密码。
③编写对应数据库表的实体和映射文件。这个也可以用第三方工具生成。3.0以后映射文件也可以省略,可以使用注解代替。
实体就不用说了,可以认为是hibernate心中的表,而映射文件是告诉hibernate实体类到底与那种表对应(还有表之间的关系)。 一个实体和映射文件的例子:
映射文件:
④在hibernate配置文件中加入此映射信息,虽然实体和表之间映射完成了,还得给hibernate一个查找的入口,可以认为是映射的“总目录”,
它是非常简单的:
在hibernate启动时会将所有的映射信息加载到一个configuration中,此类将这些信息保存一个hashmap中。
⑤利用hibernate提供的api编写程序,一般指的是dao层,所有的对数据库的操作都应该写在data access层,并且不包含任何业务逻辑。比如前面写的存储user。
最后你可能还需要编写sevice层,它就是具体的业务逻辑层了,没有一般的规律,它要操作数据库必须通过dao层,dao层不知道为什么要操作数据库,这样一来hibernate就屏蔽了底层的操作,使得业务逻辑层的代码非常清晰,而且与dao层是松耦合的。
三、除了这些基本原理我们使用hibernate还需要了解如下内容:
1、Hibernate对象的三种生命状态
2、操作数据库的两套api,hql和criteria,当然session本身的方法我觉得也可以算是一种
3、关系映射,比如一对多,在hibernate中,拿到一个一方,直接调用他的get方法就可以或者对他对应的N方的集合,前提是你在hibernate中做了关系映射。
4、hibernate的两种锁机制。
5、hibernate还有些高级特征,可能一般情况下我们不会用到,但是应该留意一下:hibernate可以使用传统的sql,可以调用存储过程,hibernate中有
事件和监听器,有拦截器这些概念。
这样的理想环境中,我们可能会按照以下方式执行数据库操作:
POJO pojo = new POJO(); ORMSolution magic = ORMSolution.getInstance(); magic.save(pojo);
Hibernate是款神奇的软件,只需要你有少量的编程经验就可以完成上述的“理想”,在hibernate中我们是这样操作的:
session = HibernateSessionFactory.getSession(); session.beginTransaction(); User user = new User(); session.save(user); session.getTransaction.commit();
其中HibernateSessionFactory我们编写的辅助类(很多时候并不需要我们手动编写此类,如果要编写的话也不是很难,就是个单例模式),他是个静态工具类,
在hibernate初始化的时候它会被装入内存,且只能有一个。session是hibernate提供的最重要的编程接口,它类似于jdbc的connection, 而user是一个javabean,
它与数据库中的一张表对应,它拥有表中所有的字段,当然在类中是属性,含有这些字段的get set方法,这就是实体类,在支持hibernate的系统中这样操作就
可以将实体存入数据库。
二、 一般使用hibernate开发的步骤
①引入hibernate需要的jar包
②配置hibernate配置文件(hibernate.cfg.xml),因为hibernate是对jdbc轻量级的封装,底层还是jdbc我们必须配置次文件,最重要的就是连接数据库的url用户名和密码。
③编写对应数据库表的实体和映射文件。这个也可以用第三方工具生成。3.0以后映射文件也可以省略,可以使用注解代替。
实体就不用说了,可以认为是hibernate心中的表,而映射文件是告诉hibernate实体类到底与那种表对应(还有表之间的关系)。 一个实体和映射文件的例子:
package com.jfly.hibernate.beans; public class User { private java.lang.Integer id; private java.lang.String username; private java.lang.String password; private java.lang.String email; public java.lang.String getEmail() { return email; } public void setEmail(java.lang.String email) { this.email = email; } public java.lang.Integer getId() { return id; } public void setId(java.lang.Integer id) { this.id = id; } public java.lang.String getPassword() { return password; } public void setPassword(java.lang.String password) { this.password = password; } public java.lang.String getUsername() { return username; } public void setUsername(java.lang.String username) { this.username = username; } }
映射文件:
<?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> <class name="com.jfly.hibernate.beans.User" table="user"> <id name="id" type="java.lang.Integer" column="id"> <generator class="assigned" /> </id> <property name="username" type="java.lang.String" column="username" not-null="true" length="50"/> <property name="password" type="java.lang.String" column="password" not-null="true" length="50"/> <property name="email" type="java.lang.String" column="email" length="60"/> </class> </hibernate-mapping>
④在hibernate配置文件中加入此映射信息,虽然实体和表之间映射完成了,还得给hibernate一个查找的入口,可以认为是映射的“总目录”,
它是非常简单的:
<mapping resource="com/jfly/hibernate/beans/hbm/User.hbm.xml" />
在hibernate启动时会将所有的映射信息加载到一个configuration中,此类将这些信息保存一个hashmap中。
⑤利用hibernate提供的api编写程序,一般指的是dao层,所有的对数据库的操作都应该写在data access层,并且不包含任何业务逻辑。比如前面写的存储user。
最后你可能还需要编写sevice层,它就是具体的业务逻辑层了,没有一般的规律,它要操作数据库必须通过dao层,dao层不知道为什么要操作数据库,这样一来hibernate就屏蔽了底层的操作,使得业务逻辑层的代码非常清晰,而且与dao层是松耦合的。
三、除了这些基本原理我们使用hibernate还需要了解如下内容:
1、Hibernate对象的三种生命状态
2、操作数据库的两套api,hql和criteria,当然session本身的方法我觉得也可以算是一种
3、关系映射,比如一对多,在hibernate中,拿到一个一方,直接调用他的get方法就可以或者对他对应的N方的集合,前提是你在hibernate中做了关系映射。
4、hibernate的两种锁机制。
5、hibernate还有些高级特征,可能一般情况下我们不会用到,但是应该留意一下:hibernate可以使用传统的sql,可以调用存储过程,hibernate中有
事件和监听器,有拦截器这些概念。
相关文章推荐
- hibernate学习(二)----初识标签
- Hibernate(一)Hibernate初识
- Hibernate初识
- 初识Hibernate之关联映射(二)百度_合作
- Hibernate 初识
- Hibernate 初识(补充)
- hibernate -----初识hibernate
- 初识Hibernate
- 【Hibernate】(1)初识Hibernate
- 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架
- Hibernate(3.6)之初识
- Java框架之Hibernate--初识Hibernate
- Hibernate之API初识及增删改查实现
- 初识Hibernate-原理篇
- 初识Hibernate(三)之多表关系维护
- hibernate初识
- 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架
- 初识Hibernate
- 【Hibernate】——初识hibernate
- 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架