转载请注明原文地址: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. Linux下怎么确定Nginx安装目录

    linux环境下,怎么确定nginx是以那个config文件启动的? 输入命令行: ps  -ef | grep nginx 摁回车,将出现如下图片: master process 后面的就是 ngi ...

  2. List转换为字符串并添加分隔符

    // 方法一: public String listToString(List list, char separator) { StringBuilder sb = new StringBuilder ...

  3. [Web 前端] React高级教程(es6)——(2)对于Refs最新变动的理解

    cp : https://blog.csdn.net/liwusen/article/details/53384561 1.什么是ReactJS中的refs 在React中组件并不是真实的 DOM 节 ...

  4. SQL文件的BOM问题导致的invalid character错误及解决

    最近在做数据的搬运工,将Oracle中的数据搬运到ES中,方案很成熟了,使用Logstash的jdbc-input执行SQL,然后将结果输出到ES中.这么简单的问题,在测试环境中测试也一帆风顺,可一上 ...

  5. Java命令学习系列(四)——jstat

    jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具.他可以显示本地或远程虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据, ...

  6. SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行

    ylbtech-SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行 可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表.PIVOT 通过将表达式某一列 ...

  7. 《mysql技术内幕 InnoDB存储引擎(第二版)》阅读笔记

    一.mysql架构 mysql是一个单进程多线程架构的数据库. 二.存储引擎 InnoDB: 支持事务 行锁 读操作无锁 4种隔离级别,默认为repeatable 自适应hash索引 每张表的存储都是 ...

  8. 算法: skiplist 跳跃表代码实现和原理

    SkipList在leveldb以及lucence中都广为使用,是比较高效的数据结构.由于它的代码以及原理实现的简单性,更为人们所接受. 所有操作均从上向下逐层查找,越上层一次next操作跨度越大.其 ...

  9. CentOS6.4下安装Chrome

    因为蛋疼的glibc问题,(我就纳闷了,为何CentOS支持的glibc的版本就那么低呢,害得我至今还没把genymotion安装上), Chrome浏览器一直没安装上,不过终于找到了解决方案,安装派 ...

  10. 4个设计绝招教你减少PCB板电磁干扰

    电子设备的电子信号和处理器的频率不断提升,电子系统已是一个包含多种元器件和许多分系统的复杂设备.高密和高速会令系统的辐射加重,而低压和高灵敏度 会使系统的抗扰度降低. 因此,电磁干扰(EMI)实在是威 ...