概念  持久化框架  把对象保存到数据库中,对数据的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. 【BZOJ】2154: Crash的数字表格

    http://www.lydsy.com/JudgeOnline/problem.php?id=2154 题意:求$\sum_{i=1}^{n} \sum_{j=1}^{m} lcm(i, j)$, ...

  2. Cortex-M0(NXP LPC11C14)启动代码分析

    作者:刘老师,华清远见嵌入式学院讲师. 启动代码的一般作用 1.堆和栈的初始化: 2.向量表定义: 3.地址重映射及中断向量表的转移: 4.初始化有特殊要求的断口: 5.处理器模式: 6.进入C应用程 ...

  3. SQL Server2008清空日志文件

    USE[master] GO ALTER DATABASE mydbname SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE mydbname S ...

  4. docker WARNING: bridge-nf-call-iptables is disabled 处理

    在CentOS中 vim /etc/sysctl.conf net.bridge.bridge-nf-call-ip6tables = net.bridge.bridge-nf-call-iptabl ...

  5. SpringMVC原理和框架

    SpringMVC工作原理 在上一篇章[spring]01_环境配置 中,我们演示了一个简单的HelloWorld工程. 本篇章重点讲述SpringMVC的基本工作原理,让大家进一步加深认识. 工作流 ...

  6. linux下获取本机IP

    转载:http://blog.chinaunix.net/uid-20593763-id-1620213.html 源代码级Unix/Linux 通用网卡IP地址获取方法 在Unix和Linux系统下 ...

  7. JQuery基本方法介绍和使用

    1.属性 $("p").addClass(css中定义的样式类型); 给某个元素添加样式 常用于表格鼠标移动效果 $(document).ready(function(){ //& ...

  8. c#面向对象基础 封装、继承

    一.封装 这是一种隐藏的特性.可以用一个公式来展示类的封装特性: 封装的类=数据  +  对此数据进行的操作(即算法) 通俗的说,封装就是:包起外界不必要知道的东西,只向外界展露可供展示的东西. 在面 ...

  9. error CS0016: 未能写入输出文件

    win7 下解决办法: 1.打开C:\Windows ,找到 TEMP 文件夹 2. 进行权限设置,点击编辑,找到 IIS-User,勾选所有权限

  10. liunx系统计划任务管理(at/crond调度)

    一.at命令 at命令格式at HH:MM YYYY-MM-DD 其中 HH(小时):MM(分钟) YYYY(年)-MM(月份)-DD(日) 启动atd进程 /etc/init.d/atd start ...