Hibernate(一)——基础和简单使用

2018-02-09  本文已影响62人  贾里

1.什么是框架,框架从何而来,为什么使用框架?


1.1.框架(framework):

最佳实践(Best Practice):
实际上是无数程序员经历过无数次尝试之后,总结出来的处理特定问题的特定方法.
如果把程序员的自由发挥看作是一条通往成功的途径,最佳实践就是其中的最短路径,能极大的解放生产力.

1.2.Web开发中的最佳实践:

分层开发模式(技术层面的"分而治之")
JavaEE开发根据职责的纵向划分:表现层,业务层,持久层:

名称 领域 职责 框架
表现层(Predentation Layer) web/mvc 负责处理与界面交互的相关操作 Struts2/Spring MVC
业务层(Business Layer) service 负责复杂的业务逻辑计算和判断 Spring
持久层(Persistent Layer) dao 负责将业务逻辑数据进行持久化存储 Hibernate/MyBatis
JavaEE层次 JavaEE框架图

1.3.持久层

持久层封装了数据访问的细节,为业务逻辑层提供了面向对象的API,完善的持久层应该达到:

2.对象关系映射


2.1.定义

对象关系映射(Object Relational Mapping,简称ORM):
是一种为了解决面向对象与关系数据库存在的互不匹配的现象的规范。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。

2.2.目的

ORM 主要解决对象-关系的映射:面向对象概念 面向关系概念

对象 表的行(记录)
属性 表的列(字段)

2.3.ORM的实现思想:

将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。

ORM 采用元数据来描述对象-关系映射细节:
元数据通常采用 XML 格式,并且存放在专门的对象-关系映射文件中。

2.4.目前流行的ORM框架:SSH

1.JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现.
2.Hibernate:目前最流行的ORM框架.设计灵巧,性能优秀,文档丰富.
3.MyBatis:本是apache的一个开源项目iBatis,提供的持久层框架包括SQL Maps和DAO,允许开发人员直接编写SQL.

ORM

3.Hibernate简介


Hibernate的故事

3.1.什么是Hibernate:

优秀的开源的Java对象持久层轻量级封装框架,既可以在Java应用程序中取代大部分JDBC代码,也可以整合到J2EE系统中作为持久层的解决方案。
Hibernate本身是基于JDBC,对JDBC访问数据库做了抽象和封装.
需要数据库的驱动包.

3.2.Hibernate的优缺点:

3.3.Hibernate框架包的结构分析:

下载地址:http://hibernate.org/orm/
Hibernate目录结构:
documentation :开发文档和API.
lib:核心jar包和依赖/相关的jar包.
project:hibernate源码以及配置文件等.

4.Hibernate的CRUD


4.1.准备操作:

CREATE TABLE `t_user` (

  `uid` bigint(20) PRIMARY KEY AUTO_INCREMENT,

  `uname` varchar(20),

  `usalary` decimal(8,2),

  `uhiredate` date 

) ENGINE=InnoDB DEFAULT CHARSET=utf8;
image.png image.png

User.hbm.xml文件: 针对于哪一个XX类型对象的映射文件就叫做XX.hbm.xml.
映射文件(User.hbm.xml): 关联约束文件hibernate-mapping-3.0.dtd.

image.png

Hibernate主配置文件(hibernate.cfg.xml):关联约束文件hibernate-configuration-3.0.dtd.
阅读hibernate.properties文件,找到连接数据库的基本要素.
在hibernate-release-4.3.5.Final\project\etc目录中:


image.png

4.2.使用Hibernate实现CRUD操作

DQL操作步骤:
查询操作模板:

DML操作步骤:

image.png

save和get方法执行流程:

image.png

5.常见错误操作

<property name="hibernate.connection.username ">root</property>
Configuration cfg = new Configuration().configure();  //加载hibernate.cfg.xml文件.

6.Hibernate的API介绍


6.1.Configuration对象:

hibernate的配置对象,主要用于解析Hibernate配置文件和持久化映射文件中的信息,最重要的功能,是用来创建

6.2.SessionFactory对象.(配置文件都要存放在CLASSPATH根路径)

Hibernate3.x中:
可以把所有的配置信息全部放在hibernate.cfg.xml中,一般不使用hibernate.properties.

SessionFactory sf=cfg.buildSessionFactory();
image.png

Hibernate4.x中:(了解)
建议把基本配置信息全部放在hibernate.properties中,而在hibernate.cfg.xml只存在引入映射文件的配置:

ServiceRegistry registry = new ServiceRegistryBuilder().buildServiceRegistry();//ServiceRegistry 是 Service 的注册表, 它为Service提供了一个统一的加载/初始化/存放/获取机制.
//Hibernate4.2方式
ServiceRegistry registry = new ServiceRegistryBuilder().build();
//Hibernate4.3方式
ServiceRegistry registry = new StandardServiceRegistryBuilder().build();
SessionFactory sessionFactory = cfg.buildSessionFactory(registry);

还有一些其他的方法:
addClass/addProperties/setProperty/setProperties
在hibernate中,可以直接使用代码完成所有的配置,不一定必须要hibernate.cfg.xml文件(Spring集成Hibernate采用该方式)

image.png
image.png
image.png image.png

SessionFactory对象:

SessionFactory的重要方法:
使用银行转账案例,说明openSession和getCurrentSession

6.3.Session对象

通过SessionFactory对象创建而来,包含了Connection对象,封装了很多操作方法.

image.png image.png

6.4.Transaction对象:代表对事务的封装;

常用方法:

1.tx.commit():提交相关联的session实例
2.tx.rollback():撤销事务操作

标准的处理有事务的模板代码:


image.png

7.常用的配置和映射细节详解

Hibernate主配置文件(hibernate.cfg.xml):
关联约束文件hibernate-configuration-3.0.dtd.

7.1.连接数据库

阅读hibernate.properties文件,找到连接数据库的基本要素.
在hibernate-release-4.3.5.Final\project\etc目录中:

7.2.自动生成数据库表:

根据对象和映射文件,在创建SessionFactory的时候,可以生成对应的数据表:

hibernate.hbm2ddl.auto=create-drop:删除并创建表,关闭SessionFactory时,删除数据库表.
hibernate.hbm2ddl.auto=create:删除并创建表 平时上课,测试
hibernate.hbm2ddl.auto=update:更新表结构:开发项目过程中:
hibernate.hbm2ddl.auto=validate:验证表结构:如果表结构和映射文件不匹配,hibernate启动失败

create-drop和create对比

序列 操作 create-drop create
1 删除那些表?创建那些表 删除本次hibernate管理的对象对应的表;创建hibernate本次管理的对象对应的表; 删除本次hibernate管理的对象对应的表;创建hibernate本次管理的对象对应的表;
2 如果新加一个domain会怎么处理 创建对应的表; 创建对应的表;
3 如果删除一个domain会怎么处理 不管 不管
4 删除 一定要正常关闭SessionFactory,才会正常删除表; 每次都是删除表并重新创建表
5 使用 一般不会使用create-drop 一般在做测试的时候使用create方法,因为每次都是删除表并重新创建表;所以可以保证多次测试的代码不用重写;注意在黑盒测试的时候不能使用create;

1).create-drop

2).create

1一般在做测试的时候使用create方法;
2,因为每次都是删除表并重新创建表;所以可以保证多次测试的代码不用重写;
3,注意在黑盒测试的时候不能使用create;

3).update

1.添加一个属性:在表中添加一列;
2.删除一个属性:不管;
3.修改一个属性:尝试修改属性对应的列类型,如果不能修改,抛出警告;

1.在黑盒测试的时候使用update;
2.在生产环境不建议使用update(运营过程中);
3.在启动的时候一定要关注由update导致的更新表结构失败;

4).validate

8.单对象映射细节单对象映射细节


持久化对象的要求:
*.hbm.xml文件常见映射细节:

什么是属性:由一对符合命名规范的getter和setter构成的;hibernate找的是getter和setter
hibernate什么时候使用getter:把对象-->数据库列中,getter方法返回的内容就是要保存到数据库中的内容
hibernate什么时候使用setter:数据库列-->对象中,setter方法传入的值就是数据库中的值
hibernate不关心getter和setter方法的可见性

<property name="bornDate" access="field"/>:使用字段来关联表字段

type里面写的类型,不是数据库的类型,是hibernate定义的一种中间类型,
JAVA类型-中间类型-数据表类型

在property元素的子元素column中,可以添加更多的列的控制条件

    <hibernate-mapping auto-import="false">
    <!-- 自己为类起别名 -->
    <import class="com._520it.day1._03_config.Person" rename="Person2"/>
image.png image.png
上一篇 下一篇

猜你喜欢

热点阅读