• 三大框架-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.把映射文件注册到主配置文件中

  • 相关阅读:
    pom变成红橙色
    拉链表
    Newsgroups数据集研究
    python 安装第三方包
    概率图(三)CRF条件随机场
    概率图(二)马尔科夫随机场MRF
    LDA主题模型
    TF-IDF算法
    mysql 自定义排序顺序
    [转]解决a different object with the same identifier value was already associated with the session错误
  • 原文地址:https://www.cnblogs.com/jingfengling/p/6038233.html
Copyright © 2020-2023  润新知