转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6760773.html 

一:ORM

ORM:对象-关系 映射。

即:把Java中有关联关系的对象,转换成关系型数据库里有主、外键关系的表中的记录,其转换的过程叫做映射,是通过配置文件实现的。

基于ORM的框架,就是实现了在编程时,脱离开繁杂的SQL语句,用面向对象的方式来操作数据,而框架则负责根据配置文件的配置而转换成具体的数据库语句并执行。

二:创建Hibernate项目

1:在Myeclipse中配置DataBase

2:创建一个项目

3:右键项目,添加Hibernate支持,选择刚才配置的DataBase连接

4:创建Java实体类,实体类至少包含构造函数、getter、setter

5:为实体类配置映射文件,一个类一个 classname.hbm.xml 文件,其中配置该对象的id属性以及其他字段属性

6:配置hibernate.cfg.xml文件,配置数据库连接的驱动、数据库路径、账户、密码等,引入每个实体类的hbm.xml 文件。

三:使用Hibernate

一般步骤为:

Session session=HibernateSessionFactory.getSession();//单例模式获得session
Transaction transaction=(Transaction) session.beginTransaction();//开启事务
session.save(article);//执行session操作,保存、更改、删除某对象
transaction.commit();//提交事务
session.close();//关闭session

四:Session

Myeclipse中创建Hibernate工程时,会自动生成一个HibernateSeesionFactory类,里面定义了Session字段以及getSession的静态方法。

其中,session被定义为ThreadLocal类型变量,也就是说,这个session是与线程绑定的。当一个请求发送到服务器,服务器启动一条线程来处理这个请求,在处理过程中,会经历filter、servlet、service、dao等各层方法的执行,而session对象则贯穿整个过程,直到线程关闭。并且,getSession方法是静态的单例模式的方法。因此,整个线程执行期间获取的是同一个session对象。这样做的意义在于:可以在非DAO层进行事务管理,可以在DAO层用session进行了save、update等操作后,在service或filter层进行事务的提交。

  Session的非查询类操作,如:save、update、delete等都需要事务提交才能生效,持久化到数据库,get则不需。

五:hbm.xml映射文件

<?xmlversion="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"> //1:头不能错
<hibernate-mapping package="包名"> //2:根标签为 hibernate-mapping,package属性指明包名
<class name="类名"table="表名"> //3:class标签配置实体类,包括类名、表名
<id name="主键在java类中的字段名" column="对应表中属性列名" type="数据类型 "> //4:id 标签配置实体类的主键属性,包含类中字段名、表中列名、数据类型、主键生成策略
<generator class="主键生成策略"/>
</id>

<property name="属性名" type="数据类型">                               //5:property标签配置实体类其他属性,包括属性名、数据类型、表中对应列
         <column name="数据库表中属性列名" length="长度" not-null="是否非空"/>
       </property>

<component name="实体类中字段名" class="哪个属性实体类"> //6:组件属性:组件属性对应一个自定义属性类的对象,但是这个属性类没有映射表,而是把属性值作为当前class的表中的某几个属性列

<property name="属性实体类中字段名" column="表中哪列">

</component>

......                                                              //7:关系映射标签:配置那个字段与哪个实体类具有什么类型的关系,如one-to-many

</class>
</hibernate-mapping>

主键生成策略有:
1) assigned
主键由程序负责生成,编码时在 save() 之前指定。
2) hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle
4) increment
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。由数据库自增。
5) identity
采用数据库提供的主键生成机制。如DB2、SQL ServerMySQL 中的主键生成机制。
6) sequence
采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。
7) native
由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。
8) uuid.hex
由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
9) uuid.string
与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据中。
10) foreign
使用另外一个相关联的对象的标识符作为主键。

(使用最多的是:assigned、increment、native)

六:hibernate.cfg.xml文件

<?xml version='1.0' encoding='gb2312'?>
<!--表明解析本XML文件的DTD文档位置-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--Hibernate配置文件的开始-->
<hibernate-configuration>
<!--session-factory配置-->
<session-factory>
<!--配置数据库驱动-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver </property>
<!--设置数据库连接-->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate </hibernate>
<!--连接数据库用户名-->
<property name="hibernate.connection.username">root </property>
<!--连接数据库密码-->
<property name="hibernate.connection.password">123456 </property>
<!--数据库连接池大小-->
<property name="hibernate.connection.pool.size">20 </property>
<!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率-->
<property name="hibernate.show_sql">true </property>
<!--jdbc.fetch_size是指Hibernate每次从数据库中取出并放到JDBC的Statement中的记录条数。Fetch Size设的越大,读数据库的次数越少,速度越快,Fetch Size越小,读数据库的次数越多,速度越慢-->
<property name="jdbc.fetch_size">50 </property>
<!--jdbc.batch_size是指Hibernate批量插入,删除和更新时每次操作的记录数。Batch Size越大,批量操作的向数据库发送Sql的次数越少,速度就越快,同样耗用内存就越大-->
<property name="jdbc.batch_size">23 </property>
<!--jdbc.use_scrollable_resultset是否允许Hibernate用JDBC的可滚动的结果集。对分页的结果集。对分页时的设置非常有帮助-->
<property name="jdbc.use_scrollable_resultset">false </property>
<!--connection.characterEncoding连接数据库时数据的传输字符集编码方式-->
<property name="connection.characterEncoding">UTF-8</property>
<!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </property>
<!--配置实体类的映射文件-->
<mapping resource="org/mxg/XX.hbm.xml">
</session-factory>
</hibernate-configuration>

Hibernate学习笔记一:项目创建与基本配置文件的更多相关文章

  1. maven学习笔记--maven项目创建

    使用Maven命令和Eclipse的Maven插件,创建Maven项目 (1)maven命令生成项目         新建一个文件目录,dos进入该目录并执行下面命令: mvn archetype:c ...

  2. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  3. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  4. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  5. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  6. thinkphp学习笔记3—项目编译和调试模式

    原文:thinkphp学习笔记3-项目编译和调试模式 1.项目编译 在章节2.4项目编译中作者讲到使用thinkphp的项目在第一次运行的时候会吧核心需要加载的文件去掉空白和注释合并到一个文件中编译并 ...

  7. InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移

    系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...

  8. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  9. Hibernate学习笔记

    一.Hibernate基础 1.Hibernate简介 Hibernate是一种对象关系映射(ORM)框架,是实现持久化存储的一种解决方案.Java包括Java类到数据库表的映射和数据查询及获取的方法 ...

  10. Hibernate学习笔记(1)Hibernate构造

    一 准备工作 首先,我们将创建一个简单的基于控制台(console-based)Hibernate应用. 我们所做的第一件事就是创建我们的开发文件夹.并把所有需要用到的Java件放进去.解压缩从Hib ...

随机推荐

  1. 实用ExtJS教程100例-010:ExtJS Form异步加载和提交数据

    ExtJS Form 为我们提供了两个方法:load 和 submit,分别用来加载和提交数据,这两个方法都是异步的. 系列ExtJS教程持续更新中,点击查看>>最新ExtJS教程目录 F ...

  2. Curl操作Elasticsearch的常用方法

    Elasticsearch对于文档操作,提供了以下几种API,本文就说明如何使用curl方式来调用这些API. API种类 单文档操作API 1.* Index API 索引文档 * 为文档创建索引 ...

  3. 几种常见的JavaScript混淆和反混淆工具分析实战

    几种常见的JavaScript混淆和反混淆工具分析实战 xiaix2016-03-05+8共1195751人围观 ,发现 5 个不明物体WEB安全 信息安全常被描述成一场军备竞赛,白帽与黑帽,渗透测试 ...

  4. maven-shade-plugin 入门指南

    1. Why? 通过 maven-shade-plugin 生成一个 uber-jar,它包含所有的依赖 jar 包. 2. Goals Goal Description shade:help Dis ...

  5. iOS开发-ViewController的生命周期和切换

    ViewController在App开发中是至关重要的一环,无论是页面的展示和数据之间的交互,ViewController提供了一个框架可以管理和构建App应用.iOS中构建App提供了两种方式一种是 ...

  6. Elasticsearch 入门教程

    全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选. 它可以快速地储存.搜索和分析海量数据.维基百科.Stack Overflow.Gi ...

  7. Redis学习手册(主从复制)(转)

    一.Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理论性的 ...

  8. Swift编程语言学习1.7——断言

    断言 可选能够让你推断值是否存在,你能够在代码中优雅地处理值缺失的情况.然而,在某些情况下,假设值缺失或者值并不满足特定的条件,你的代码可能并不须要继续执行.这时.你能够在你的代码中触发一个断言(as ...

  9. Android -- Volley解析

    Volley设计 Dispatch Thread不断从RequestQueue中取出请求,根据是否已缓存调用Cache或Network这两类数据获取接口之一,从内存缓存或是服务器取得请求的数据,然后交 ...

  10. Documentation/PCI/pci-iov-howto.txt

    Chinese translated version of Documentation/PCI/pci-iov-howto.txt If you have any comment or update ...