概念  持久化框架  把对象保存到数据库中,对数据的CURD操作

    ORM框架  ORM对象关系映射  类<->表

                    属性<->字段

                     对象<->表中的记录

          实现方法  创建持久化类

                描述映射关系  对象关系映射文件,使用注解

环境搭建  安装 eclipse 的 HiberTools 插件  带有配置文件的向导

                       支持正项工程和反向工程

      在项目中引入 Hibernate 的 jar 包

      在项目中引入数据库驱动的 jar 包

配置文件  默认名 hibernate.cfg.xml

      放在src目录下

      根节点<hibernate-configuration>  

      子节点 <session-factory>  数据库连接

                      <property name="属性名">属性值</property>  

                              hibernate.connection.driver_class  数据库驱动类属性

                              hibernate.connection.password  数据库密码

                              hibernate.connection.url  数据库连接

                              hibernate.connection.username  数据用户名

                              hibernate.default_schema  数据库方案,只针对oracle(配置为全大写的用户名)

                              hibernate.dialect  数据库方言  (org.hibernate.dialect.Oracle10gDialect)

                              调试选项  hibernate.show_sql  是否显示SQL语句

                                    hibernate.format_sql  是否格式化SQL语句

                              自动建表方式  hibernate.hbm2ddl.auto  update(表不存在就创建新表)

                                                         (增加属性就增加字段)

                                                        (减少属性不减少字段)

                                                    create(先删表和序列,重新创建)

                                                       (是用于重新初始化系统)

                                                     creat-drop(先删除表和序列,

                                                        重新创建,用完之后删除)

                                                     validate(检查映射关系和表是否一直)

                                                         (不一直就报错)

                    <mapping resource="包名/映射文件名.hbm.xml"/>

                              注册映射文件

  

API  Configuration  管理和加载配置信息

             默认加载 hibernate.cfg.xml

            new Configuration().configure()

    ServiceRegistry  4.0之后新增,所有基于 hibernate 的配置或服务都必须向其注册才能生效

               ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();

    SessionFactory  生成 session 的类,相当于数据库连接

              比较耗资源,一般一个应用创建一个

              SessionFactory sf = cfg.buildSessionFactory(sr);

    session  和数据库交互操作的单线程对象

          管理所有持久化类的实例

          Session se = sf.openSession();

    Transaction  相当于数据库事务的概念

            Transaction ts = se.beginTransaction();

            所有持久化操作包括查询,都必须放在事务中进行

            ts.commit(); 提交事务

            ts.rollback(); 回滚事务

ORM  持久化类  实体类(符合pojo结构)

           必须有无参的构造方法(用来反射)

           提供一个表示属性(用来对应主键字段)

           不能使final类  如果是final累就不能使用load()进行延迟加载

    映射文件  一般持久化类对应一个映射文件

          一般命名方式是 类名.hbm.xml

          根节点<hibernate-mapping>  <class name="持久化类全路径" table="表名">

                          <property name="属性名" type="数据类型">

                            <column name="字段名" />
                          </property>

                class的属性  id标签(主键用这个标签)  column同property标签

                                     generator class=“”(主键生成策略)

                                    (assigned 自然主键,由程序负责定义)

                                    (odentity 数据库自动增长,要求底层数据库支持自动增长字段,数据类型要为整形)

                                    (sequence 序列,要求底层数据库支持序列,数据库类型要为整形)

                                    (hilo 适合所有数据库-需要在数据库中建表保存计算次数,按照high/low算法生成随机数,数据类型要为整形)

                                    (native 根据底层数据库类型自动选择上面三种之一,适用于跨平台项目开发,数据类型必须是整形)

                                    (guid 全局唯一标示,和数据库平台无关,数据库类型要为字符串类型)

                        property标签  name=“属性名”                     

                                length=“长度”

                                not-null=“是否为空”  (true为空,false非空)

                                sql-type=“数据库的数据类型”  

                                unique=“唯一约束”

                                  default=“默认值” 

      多对一 

      <many-to-one name="属性名" class=“持久化类的全路径”>    column同property标签  通过字段的值查找对应的主键表的数据

      一对多(和多对一不能同时配置)

      <set name="属性名" table="表名" inverse="true">   

         <key>

          <column name="TNO"></column>

         <key>

       <one-to-many class="持久化类的全路径" />

          set内的属性   inverse="true"反转控制方向可以提高效率

                  级联操作类型cascade=  none 默认不级联

                                delete 级联删除

                                save-update 级联保存和更新

                                all 级联全部操作

session  get(持久化类.class,主键值)  立即加载数据,加载前检查一级缓存,如果数据不存在就返回空

      load(持久化类.class.主键值)  延时加载数据,当使用时才加载,加载前检查一级缓存,如果数据不存在就抛出异常,要求持久化类是非final类

      状态  持久化状态  get()或load()调用之后得到的实例

                 通过save(),update(),saveorupdate()调用之后

          临时状态  实例化之后,save之前是临时状态

          删除状态  delete()之后是删除状态

          游离状态  关闭了session之后是游离状态

      save(持久化类的实例)  添加数据到数据库,并把实例转为持久化状态,会根据主键策略生成策略覆盖OID的属性

      update(持久化类的实例)  执行数据修改,如果持久化状态的实例属性发生变化,事务在提交前自动执行update

      saveOrUpdate(持久化类的实例)  根据OID属性是否为空自动执行save或update方法

      delete(持久化类的实例)  执行删除,使实例进入删除状态 

HQL  一种面向对象的查询语言  类似SQL查询语句,基于持久化类实现查询,类名和属性名严格区分大小写

    Query  负责执行HQL查询的类(支持方法链调用)

        方法  1.创建  Query qu = session的实例.createQuery("HQL语句")  

            2.条件参数设置  (?占位符  setXXX(位置索引从0开始,值))(:参数名  setXXX(参数名,值))

            3.得到查询数据集合Lise(返回List<持久化类名>)  

            分页查询  setFirstResult(开始行号)(默认开始行号从0开始)

                  每页的开始行号=页码-1*每页行数

            分组和聚合函数  使用List<Object>或List<Object[]>接收数据集合(根据查询结果选择)

反向工程  表要有主键(最好是单主键)

      步骤  1.创建Hibernate Console Configuration  目的只创建数据库连接,一般是选择项目的hintrnate.cfg.xml获取连接信息

          2.创建反向配置文件Hibernate.reveng  目的是确定要反向的表

          3.配置CodeGeneration并运行  链接数据库的Console Configuration

                          反向配置文件.reveng.xml

                          输出的项目目录  一般是项目的SRC目录

                          要生成的包名

                          要导出的文件类型  持久化类 和 映射文件

          4.检查生成的结果  检查持久化类

                    检查映射文件  一对多和多对一只能同时存在一个

          5.把映射文件注册到主配置文件中

三大框架-Hibernate的更多相关文章

  1. java 三大框架 hibernate部分知识实现增删该查操作

    1.三层架构    表现层 web层(MVC是一个表现层的设计模型)    业务层 service层    持久层 dao层2.三大框架和三层架构的关系(建议学习三大框架的顺序:先学习hibernat ...

  2. java 的 struts2 Spring Hibernate 三大框架的整合

    原理就不说了,直接上配置文件及代码,用来备用 首先,将三大框架所需要的jar包导入项目中 导入  struts2-spring-plugin-2.3.3.jar包  此包的作用是作为struts2 与 ...

  3. Struts,spring,hibernate三大框架的面试

    Struts,spring,hibernate三大框架的面试 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3 ...

  4. 三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板

    最近在学SSH三大框架的整合,在此对他们整合时相关配置文件做一简单的模板总结,方便以后复用! 首先是web.xml配置文件,这里面就配置一些简单的监听器.过滤器,包括spring核心配置文件appli ...

  5. Struts2+Spring+Hibernate 三大框架的合并集成

    这次来看看Struts2+Spring+Hibernate三大框架的整合应用,主要是Spring和Hibernate框架的整合,因为前边已经将Strtus2+Spring整合过了基本一样.  首先看一 ...

  6. 三大框架:Struts+Hibernate+Spring

    三大框架:Struts+Hibernate+Spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...

  7. 2018.11.11 Java的 三大框架:Struts+Hibernate+Spring

    ·定义:Java三大框架主要用来做WEN应用.Struts主要负责表示层的显示: Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作): Hibernate主要是数据持久化到数据库. ...

  8. 详谈Struts+Hibernate+Spring三大框架

    前言:对于JAVA WEB端的程序员来说,对JAVA三大框架:Struts+Hibernate+Spring的了解必不可缺,下面详细谈谈 Java三大框架主要用来做WEN应用. 三大框架:Struts ...

  9. JavaWeb_(SSH)三大框架整合struts+hibernate+spring_Demo

    三大框架整合 一.SSH导包 二.书写Spring 三.书写Struts 四.整合Spring与Struts 五.书写(与整合)Hibernate.引入c3p0连接池并使用hibernate模板 六. ...

随机推荐

  1. 【HDU】1517 A Multiplication Game

    http://acm.hdu.edu.cn/showproblem.php?pid=1517 题意:每次乘上2~9..p>=n时赢.. #include <cstdio> #incl ...

  2. 【BZOJ2223/3524】[Coci 2009]PATULJCI

    Description Input   Output 10 3 1 2 1 2 1 2 3 2 3 3 8 1 2 1 3 1 4 1 5 2 5 2 6 6 9 7 10 Sample Input ...

  3. BZOJ3442: 学习小组

    Description [背景] 坑校准备鼓励学生参加学习小组. [描述]     共有n个学生,m个学习小组,每个学生有一定的喜好,只愿意参加其中的一些学习小组,但是校领导为学生考虑,规定一个学生最 ...

  4. 转载 Android快捷键 转载

    一.实用类快捷键 1 常用熟悉的快捷键 CTRL+C(复制).CTRL+X(剪切).CTRL+Z(撤销).CTRL+F(查找).CTRL+H(搜索文件或字符串).CTRL+Y(重做).CTRL+/(双 ...

  5. Nginx_HTTP 499 状态码 nginx下 499错误

    日志记录中HTTP状态码出现499错误有多种情况,我遇到的一种情况是nginx反代到一个永远打不开的后端,就这样了,日志状态记录是499.发送字节数是0. 老是有用户反映网站系统时好时坏,因为线上的产 ...

  6. ListView的HeaderView和Footer

    HeaderView介绍 HeaderView用法 属性中添加 ListView中属性listHeader和overScrollHeader区别: android:overScrollHeader=& ...

  7. HTML DOM随笔

    编程接口 所有 HTML 元素被定义为对象,而编程接口则是对象方法和对象属性. 方法是您能够执行的动作(比如添加或修改元素). 属性是您能够获取或设置的值(比如节点的名称或内容). getElemen ...

  8. QQ中打开链接不是默认浏览器

    电脑上装了搜狗和Chrome,Chrome为默认浏览器.但QQ中不论点什么都是以搜狗打开,解决办法: 1.设置, 2. 安全设置-->安全推荐-->使用搜狗打开链接增强安全性.去掉勾勾就行 ...

  9. sqlmap用户手册详解(转)

    http://url/sqlmap/mysql/get_int.php?id=1 当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQL注入技术来注入 3.识别出 ...

  10. cocos2d-x渲染流程

    Cocos2Dx之渲染流程 发表于8个月前(2014-08-08 22:46)   阅读(3762) | 评论(2) 17人收藏此文章, 我要收藏 赞2 如何快速提高你的薪资?-实力拍“跳槽吧兄弟”梦 ...