关于Hibernate框架的基础详解


1,什么是框架?

框架就是已经封装好的类,类中可以完成较为复杂的业务逻辑的通用方法

我们可以通过这些方法来完成自己的业务逻辑

可以完成通用的业务逻辑

封装好的业务逻辑(.jar)

2,常用的框架

Struts2

Spring

Hibernate

 

Hibernate框架

1,Hibernate的作用(负责数据库表)

Hiberbate就是对JDBC的封装,完成数据库的持久化操作,从而简化程序员在系统开发过程中使用JDBC对数据库操作的繁琐的步骤.

2,步骤

2-1,创建项目

2-2,在项目中导入Hibernate的jar包

(1)导入Hibernate 的核心jar包 hibernate3.jar(最常用的,性能稳定)

(2)导入Hibernate 的依赖jar包 /Hibernate_0100/WebRoot/WEB-INF/lib

(3)导入数据库的驱动jar包 ojdbc14.jar(数据库连接)

2-3,引入Hibernate 核心配置文件:hibernate.cfg.xml

用来告诉Hibernate数据库的连接信息

(1)在src中间创建一个名为hibernate.cfg.xml的文件

(2)在Hibernate.cfg中引入Hibernate框架定义好的DTD规范:Hibernate3.jar-->org.hibernate-->hibernate--configuration-3.0 dtd(倒数第二个),将3-5行复制粘贴到hibernate.cfg.xml内

内容:<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

(3)在hibernate.cfg.xml中的配置信息

<hibernate-configuration>

<session-factory>

<property name="myeclipse.connection.profile">orcl</property>

<propertyname="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>

<property name="connection.username">scott</property>

<property name="connection.password">Sa123456</property>

<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>

<!-- 创建表时就会显示sql语句 -->

<property name="show_sql">true</property>

<!-- 告诉核心配置文件我们需要创建哪张表 -->

<mapping resource="com/softeem/dto/User.hbm.xml" />

</session-factory>

</hibernate-configuration>

2-4 创建dto类

 创建DTO类: 一个dto对应数据库中间的一张表(tb_user tb_role tb_power)

dto中类的字段要和数据库中表的字段,类型,长度是一致的

 dto中 数据库中

User 对象 tb_user

userid int userid int

username String username varchar2

userpass String userpass varchar2

User 对象的字段和tb_user表中的字段 字段个数 及其类型要一致

2-5 为当前的dto类创建映射文件User.hbm.xml

(1)在dto所在的包中创建一个映射文件(名字.hbm.xml)

(2)正映射文件中引入映射文件的dtd规范

路径:Hibernate3.jar(核心架包)-->org.hibernate(第一个)-->hibernate--mapping-3.0 dtd(倒数第一个),将3-5行复制粘贴到User.hbm.xml内

内容:<!DOCTYPE hibernate-mapping PUBLIC 

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

(3)在User.hbm.xml中的配置信息:

<hibernate-mapping>

<!--class标签中有两个属性 :

name:是谁的映射文件就写谁的路径

table:将要创建的表名

id 标签中的属性

name:对应UserDto中id的字段

column:对应表中对应的字段

 -->

<class name="com.softeem.dto.UserDto" table="users_tb">

<id name="userid" column="user_id">

<!-- 对id进行设置:native 完成的数字自增1,2,3... -->

<generator class="native"></generator>

</id>

<!-- 对普通的属性进行设置 -->

<property name="username" column="user_name"></property>

<property name="userpass" column="user_pass"></property>

</class>

</hibernate-mapping>

 

(4)在映射文件中建立起dtd类和数据库表直接的映射关系

 

2-6将映射文件添加到核心配置文件hibernate.cfg.xml中 

(加载核心配置文件我们就可以获得需要创建表的信息)

在hibernate.cfg.xml中最后添加映射关系

<!-- 创建表时就会显示sql语句 -->

<property name="show_sql">true</property>

<!-- 告诉核心配置文件我们需要创建哪张表 -->

<mapping resource="com/softeem/dto/User.hbm.xml" />

2-7创建创建表的工具方法

public static void ExpTable() {

//加载核心配置文件,读取配置文件的信息生成实例

Configuration cfg = new Configuration().configure();

//更新脚本信息

SchemaExport se = new SchemaExport(cfg);

//创建表,假如数据库中存在这张表了就覆盖

se.create(truetrue);

}

2-7-1Configuration 方法解析配置文件

// Configuration:加载核心配置文件,获取SessionFactory

Configuration cfg = new Configuration().configure();

//2 获取SessionFactory接口 session 工厂 可以获取session对象

SessionFactory factor = cfg.buildSessionFactory();

 

3 hibernate6个核心接口

 Session/SessionFactory/Transaction/Query/Criteria/Configuration

 通过这6个接口可以对持久化对象进行存取还能够进行事务控制

 

3-1 Configuration

  作用:加载核心配置文件,获取SessionFactory

  负责管理Hibernate的配置信息包括如下:

 (1),Hibernate的底层信息:数据库的URL 用户名 密码 JDBC驱动类  数据库方言(Dlalect数据库连接池

 (2),Hibernate的核心配置文件(**.hbm.xml)

  Hibernate的两种配置方式:

  a配置文件hibernate.properties

  调用代码:Configuration cfg = new Configuration();

  b配置文件hibernate.cfg.xml

  调用代码:Configuration cfg = new Configuration().configure();

3-2 SessionFactory(会发工厂)

应用程序从SessionFactory里获取session(会话程序)实例

它在多个应用程序间进行共享,通常情况下,整个应用程序只有唯一的一个会话工厂

 --例如:在应用程序初始化的时候创建

 如果在使用Hibernate 访问多个数据库,你就需要给一个数据库创建一个会话工厂(SessionFactory)

说明:SessionFactory Configuration对象创建,所以每一个Hibernate配置文件实际上对SessionFactory的配置

 调用代码:SessionFactory factor = cfg.buildSessionFactory();

  

3-3 Session(会话)

 Session 不是线程安全的,它代表与数据库之间的一次操作,它的概念介于ConnectionTransaction之间

  session 也被称为持久化管理器,因为它是持久化有关的操作接口 (执行被持久化对象的CRUD操作 CRUD操作的任务是完成与数据库的交流 包含了SQL语句)

 sesion 通过SessionFactory打开,在所有工作完成后要关闭,WEBHttpSession 无任何关系

 调用:Session session = factor.openSession();

关闭session

  session.close();

session.clear();

 

3-4Transaction接口

作用:负责事务的相关操作,可选的,开发人员也可以设计编写自己的底层事务处理代码

 事务

 开启事务:Transaction tx = session.beginTransaction();

 提交事务:tx.commit();

  事物回滚:tx.rollback();

3-5 QueryCriteria接口

 QueryCriteria接口负责执行各种数据库查询,它可以使用HQL语句或者SQL语句两种

  瞬间对象(Transaction Objects):使用new 操作符初始化的对象不是立刻就持久的它们是瞬间的,也就是说它们没有任何根据数据库表相关联的的行为,只要应用不载引用这些对象它们的状态将会丢失,并且有垃圾回收机制回收

 

  持久化对象(Persist Objects):持久实例是任何具有数据库表的实例

  它有持久化管理器Session 统一管理,持久化实例是在事物中进行操作的,它们的状态在事务结束时同数据库进行同步

  当事务提交时,通过执行SQLinsert update delete 语句把内存中的状态同步到数据库中 

 离线对象(Detached Objects):session关闭的之后 持久化对象就变成离线对象离线表示这个对象不再与数据库保持同步,不再接受Hibernate管理

  

3-6 hibernate3个配置7个步骤

3-6-1 三个配置

 1配置Hibernate的运行环境导入jar(核心jar,赋值jar,数据库连接jar)

2配置Hibernate的核心配置文件Hibernate.cfg.xml或者(hibernate.properties)

3配置映射文件(**.hbm.xml)

 3-6-2 七个步骤

1加载核心配置 :Configuration cfg = new Configuration().configure();

 2获取SessionFactory(session 工厂):SessionFactory factor = cfg.buildSessionFactory();

 3打开session:Session session = factor.openSession();

 4开启事物:Transaction tx = session.beginTransaction();

 5持久化操作:session.save(stu);

 6提交事物:tx.commit();

7关闭session:session.close(); 

4 HQL查询

4-1 Query查询

获取Query对象

Query query = session.createQuery("from Car");

createQuery(“HQL/SQL查询语句”)

例如:from + 对象名 + where 对象属性名 “值”

获取查询的结果

List<Car> list = query.list();

4-2 模糊查询Criteria接口

获取对象

Criteria criteria = session.createCriteria("com.softeem.pojo.Car");

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值