• Hibernate-02


    一、hibernate实体创建规则

    1、hibernate---->持久层ORM 映射框架,专注于数据的持久化工作。

    2、持久化类创建规则

      --->1、提供无参数的构造方法

         2、私有化、对石油的属性提供get、set方法

         3、尽力提供包装类的类型 

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

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

    3、主键类型

    1、自然主键:把含有业务含义的字段作为主键(非空,不能重复、不可修改)

         2、代理主键:不具备业务含义的字段作为主键

    4 主键策略

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

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

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

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

      

    二、hibernate对象状态

    
    

    三、hibernate 事务

    1、特性
        a :原子性
        c :一致性
        i :
    隔离性
        d: 持久性
    2、事务并发问题
        脏读、不可重复读、幻读|虚读
    3、事务隔离级别
    注意:数据库使用时,隔离级别越高,安全性越高,性能就越低。
        建议:READ_COMMITTED ----->oracle(默认)
           REPEATABLE_EAD ----->mysql(默认)


    四、hibernate 一级缓存

    1、目的:
        缓存:提高效率.hibernate中的一级缓存也是为了提高操作数据库的效率.
    2、方案一
    3、方案二

    五、查询

    HQL查询:
      1、Hibernate独家查询语言,属于面向对象的查询语言
      2、简单查询
        String hql = "from cn.xxx.xxx.User";
        //String hql = "from User";
        Query query = session.createQuery(hql);//传入hql
        List<Customer> Lists = query.list(); //接收list返回结果
        接收唯一查询结果-----》 query.uniquerResult();
      3、条件查询
         占位符 ? or :属性名 :
        1--> String hql1 = "from User where id = ?";
           Query query = session.createQuery(hql1);
            query.setParameter(0,2);//设置参数
            User c = (User)query.uniqueResult();//获取结果
        2--> String hql2 = "from User where id=:id";
            Qusery query = session.createQuery(hql2);
            query.setParameter(0,1);
            User c = (User)query.uniqueResult();
      4、分页查询
          1 -->SetFirstResult(1); 起始位
           -->setMaxResults(2);  可以理解为最大步长
          2---->基本和上面步骤一致为query 设置这两个属性就行啦  
    Criteria:
      1、Hibernate独家的无语句面向对象查询(建议不要使用sql的查询相关的信息 )
      2、
        1--->简单
          Critera critera = session.createCriteria(User.class);创建查询语句
          List<User> list = critera.list();//获取对象
        2
    --->条件
          在条件查询中可以使用的Restriction的方法
            
                

          Criteria critera = session.createCriteria(User.class);
          critera.add(Restriction.eq("id",1l));//查询id为1
          User c = (User)criteria.uniqueResult();
          
      3--->分页 :分页同样也是调用hql中的那两个方法名
        4--->查询总数:采用这个方法setProjection

    criteria.setProjection(Projections.rowCuount());

    原生查询:就是使用原生的sql查询,建议在复杂查询的时候使用他不建议使用hql 和 Criteria
    简单查询1:
    public void fun(){
      //获取session对象
      Session session = HibernateUtis.openSession();
      //事务控制
      Transction tx = session.beginTransction();
      //编写执行sql
      String sql = "select * from user";
      //创建查询对象
      SQLQuery query = session.createSQLQuery(sql);
      //run ----》query 方法
      List<Object[]> list = query.list(); // 返回的是数组list
      for(Object[] obj: list){        //遍历数组list
        Syso(Arrays.toString(obj));//此处简写
      }
    }

     简单查询2:

    String sql = "select * from user";
    SQLQuery  query = createSQLQuery(sql);
    query.andEntity(User.class);
    List<User> list = query.list();//返回对象list
    System.out.println(list);

    分页查询:

    //此处省略部分代码
    
    String sql = "select * from user limit ?,?";
    
    SQLQuery query = session.createSQLQuery(sql);
    
    query.setParameter(0,0);
    query.setParameter(1,1);
    
    query.addEntity(User.class);
    
    List<User> list = query.list();
    
    System.out.println(list);

    条件查询:

    String sql = "select * from User where id = ?";
    //创建查询对象
    SQLQuery query = session.createSQLQuery(sql);
    //设置参数
    query.setParameter(0,11);
    //指定结果集封装对象
    query.addEntity(User.class);
    //调用方法
    List<user> list = query.list();
    
    Sysout.out.println(list);
    既能朝九晚五,又能浪迹天涯
  • 相关阅读:
    Cookie
    JS开发常用工具函数
    手动搭建Vue之前奏:搭建webpack项目
    Redis的下载与安装
    Redis官方Tutorial
    Redis之datatype概述
    18 SQL优化
    16 SQL Mode
    17 MySQL的小技巧
    14 事务控制和锁定语句
  • 原文地址:https://www.cnblogs.com/jackerzhou/p/9863527.html
Copyright © 2020-2023  润新知