三大框架-Hibernate

概念  持久化框架  把对象保存到数据库中,对数据的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.把映射文件注册到主配置文件中

原文地址:https://www.cnblogs.com/jingfengling/p/6038233.html