转载请注明原文地址: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. X、Y轴抖动的动画

    实现这个动画效果用到了interpolator属性,这样就能让一些控件产生自定义的抖动效果 这是用作interpolator的文件,用来做动画循环 cycle.xml <?xml version ...

  2. vim的翻页、跳转到某一行功能

    第一种方式 :$ 跳转到最后一行 :1 跳转到第一行 :n 跳转到第n行 第二种方式 shift+g 跳转到最后一行 gg 跳转到第一行 command+上下箭头

  3. HttpAsyncClient的连接池使用

    代码示例 public static void main(String[] args) throws Exception { ConnectingIOReactor ioReactor = new D ...

  4. JavaScript:RegExp 对象

    ylbtech-JavaScript:RegExp 对象 1.返回顶部 RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 直接量语法 /pattern/att ...

  5. TortoiseSVN 和 VisualSVN

    ylbtech-Miscellaneos:TortoiseSVN 和 VisualSVN 1. TortoiseSVN 百科返回顶部 1-1.百科 TortoiseSVN 是 Subversion 版 ...

  6. 为sharepoint的内部页面添加后台代码

    我们知道,存储在数据库里的SharePoint页面是不能直接添加后台代码的,这给我们带来了很多的不方便,比如想要在页面上实现一些东西,都必 须使用Webpart或者自定义控件的方式,哪怕仅仅是很简单的 ...

  7. 开启Remote Desktop的PowerShell

    1) Enable Remote Desktop set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Ser ...

  8. 解剖android中的闹钟app 一

    首先,看一看android市场上有哪些主流的闹钟app了,我们来进行一个简单的评测: 一.正点闹钟 这是一款源自金山技术的闹钟app,其主力创始团队都是来自于金山,其装机量,下载量都是排名第一.老样子 ...

  9. Packagist 镜像使用方法--composer

    镜像用法 有两种方式启用本镜像服务: 系统全局配置: 即将配置信息添加到 Composer 的全局配置文件 config.json 中.见“方法一” 单个项目配置: 将配置信息添加到某个项目的 com ...

  10. Java复习1-基本数据类型

    数据类型 整形 type 存储 取值范围 int 4字节 -2 147 483 648 ~ 2 147 483 647 (超过20亿) short 2字节 -32 768 ~ 32 7677 long ...