• hibernate基础(二)


    1.hibernate中的实体规则

      1)实体类创建的注意事项

        1>持久化类提供无参数构造

        2>成员变量私有,提供共有get/set方法访问。需提供属性。

        3>持久化类中的属性,应尽量使用包装类型。

        4>持久化类需要提供oid.与数据库中的主键列对应。

        5>不要用final修饰class

          ---hibernate使用cglib代理生成代理对象。代理对象是继承被代理对象。如果被final修饰。将无法生成代理。

      2)主键类型

        1>自然主键(少见)

          ---表的业务列中,有某业务列符合,必须有,并且不重复的特征时,该列可以作为主键使用。

        2>代理主键(常见)

          ---表的业务列中,没有某业务列符合,必须有,并且不重复的特征时,创建一个没有业务意义的列作为主键。

      3)主键生成策略

        1>代理主键

          ---identity : 主键自增.由数据库来维护主键值.录入时不需要指定主键.

            a. sequence: Oracle中的主键生成策略.

            b.increment(了解): 主键自增.由hibernate来维护.每次插入前会先查询表中id最大值.+1作为新主键值.

            c.hilo(了解): 高低位算法.主键自增.由hibernate来维护.开发时不使用.

            d.native:hilo+sequence+identity 自动三选一策略.

            e.uuid: 产生随机字符串作为主键. 主键类型必须为string 类型.

        2>自然主键

          assigned:自然主键生成策略. hibernate不会管理主键值.由开发人员自己录入.

    2.hibernate中的对象状态

      1)对象分为三种状态

        1>瞬时状态

          ---没有id,没有在session缓存中

        2>持久化状态

          ---有id,在session缓存中

        3>游离|托管状态

          ---有id,没有在session缓存中

      2)三种状态的转换图

      

    3.hibernate进阶-一级缓存

      1)缓存:提高效率.hibernate中的一级缓存也是为了提高操作数据库的效率.

      2)提高效率手段1:提高查询效率

     

      3)提高效率手段2:减少不必要的修改语句发送

      

    4.hibernate中的事务

      1)事务

        1>事务特性

          ---a 原子性

          ---c 一致性

          ---i 隔离性

          ---d 持久性

        2>事务并发问题

          ---1.脏读

          ---2.不可重复度

          ---3.幻|虚读

        3>事务的隔离级别

          ---读未提交- 123

          ---读已提交 - 23

          ---可重复读(mysql默认级别)-3

          ---串行化 - 没有问题

      2)知识点:如何在hibernate中指定数据库的隔离级别

      

      3)知识点2:在项目中如何管理事务

        1>业务开始之前打开事务,业务执行之后提交事务. 执行过程中出现异常.回滚事务.

        2>在dao层操作数据库需要用到session对象.在service控制事务也是使用session对象完成. 我们要确保dao层和service层使用的使用同一个session对象

         3>在hibernate中,确保使用同一个session的问题,hibernate已经帮我们解决了. 我们开发人员只需要调用sf.getCurrentSession()方法即可获得与当前线程绑定的session对象

        4>注意1: 调用getCurrentSession方法必须配合主配置中的一段配置

         

        5>注意2:通过getCurrentSession方法获得的session对象.当事务提交时,session会自动关闭.不要手动调用close关闭.

        6>crm项目中

          Service层:

        

          Dao层:

        

    5.hibernate中的批量查询(概述)

      1)HQL查询-hibernate Query Language(多表查询,但不复杂时使用)

        1>Hibernate独家查询语言,属于面向对象的查询语言

        2>基本查询

        

        

        3>条件查询

          (a)?号占位符

          

          (b)命名占位符

          

          (c)分页查询

          

      2)Criteria查询(单表条件查询)

        1>Hibernate自创的无语句面向对象查询

        2>基本查询

        

        3>条件查询

        

        

        4>分页 查询

        

        5>设置查询总记录数

        

      3)原生SQL查询(复杂的业务查询)

        1>基本查询

          (a)返回数组List

          

          (b)返回对象List

          

        2>条件查询

        

        3>分页查询

        

  • 相关阅读:
    Firefox做默认浏览器,点击QQ面板连接(QQ邮箱,空间),延迟很久很久才打开网页(Firefox 浏览器 延迟 打开 点击没反应) 拂晓风起
    web.xml filter执行顺序 java jsp web 拂晓风起
    JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址 拂晓风起
    Javascript 检测 页面是否在iframe中 拂晓风起
    Spring 获取web根目录 (Spring线程获取web目录/路径/根目录,普通类获取web目录) 拂晓风起
    java输出字符串到多个输出流 同时输出到console终端,网页,文本 拂晓风起
    开启eclipse全部代码提示,自动完成(类似visual studio 2008) 拂晓风起
    java web 自定义错误页面 完整jsp错误页面代码(同时写错误日志) error.jsp 拂晓风起
    struts/Servlet,action转到jsp后,路径问题(struts2,jsp路径,action路径,action跳转,相对路径,绝对路径) 拂晓风起
    C# 14位日期型字符串yyyyMMddHHmmss转变为日期格式
  • 原文地址:https://www.cnblogs.com/chengshun/p/9769713.html
Copyright © 2020-2023  润新知