一、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);

Hibernate-02的更多相关文章

  1. hibernate 02之helloworld

    1.安装插件 安装方法说明(hibernatetools-.Final): Help --> Install New Software... Click Add... In dialog Add ...

  2. Rhythmk 学习 Hibernate 02 - Hibernate 之 瞬时状态 离线状态 持久化状态 三状态

    by:rhythmk.cnblogs.com 1.Hibernate 三种状态: 1.1.三种定义(个人理解,不一定准确):  瞬时状态(transient):    不被session接管,且不存在 ...

  3. hibernate 映射 多对一

    一对多和上文讲的多对一两种映射关系,其实就是站在相反的角度考虑同样的事情. 一对多和多对一映射原理是一样的,都在多的一端加入一个外键指向一的一端.也就是说,在关系数据库的表中,他们的表及表字段都是一样 ...

  4. Hibernate 系列 02 - Hibernate介绍及其环境搭建

    引导目录: Hibernate 系列教程 目录 昨晚喝多了,下午刚清醒,继续搞Hibernate.走起. 觉得还行的话,记得点赞哈,给我这个渣渣点学习的动力.有错误的话也请指出,省的我在错误上走了不归 ...

  5. 02 Hibernate错题分析

    解析:使用final修饰的成员变量是常量 解析:不存在StateMoreSession的对象 解析:一个PreparedStatement 可以执行多次executQuery方法 解析:A   使用H ...

  6. 02.Hibernate映射基础

    前言:Hibernate的核心功能是根据数据库到实体类的映射,自动从数据库绑定数据到实体类.使我们操作实体类(Java对象)就能对数据库进行增.删.查.改,而不用调用JDBC API使数据操作变得简单 ...

  7. Hibernate逍遥游记-第5章映射一对多-02双向(<set>、<key>、<one-to-many>、inverse、cascade="all-delete-orphan")

    1. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hi ...

  8. Hibernate-ORM:02.Hibernate增删改入门案例

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本笔者使用的是Idea+mysql+maven做Hibernate的博客,本篇及其以后都是如此! 首先写好思路 ...

  9. Hibernate事务以及一级缓存02

    一. Hibernate中的事务 1. 事务的回顾 1.1 什么是事务(Transaction)(面试重点) 是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的 ...

  10. 02.Hibernate配置文件之映射配置文件

    映射文件,即xxx.hbm.xml的配置文件 <class>标签:用来将类与数据库表建立映射关系 属性: name:类中的全路径 table:表名(如果类与表名一致,那么table属性可以 ...

随机推荐

  1. 【黑金教程笔记之002】【建模篇】【Lab 01 永远的流水灯】—笔记&勘误

    学习并行操作的思想. 勘误001: Page 17,模块图下方,“扫描频配置定为100Hz”应为10Hz. 勘误002: Page 17,最后一行 “10ms”应为100ms:“2.5ms”应为25m ...

  2. Linux系统调用之open(), close() (转载)

    转自:http://joe.is-programmer.com/posts/17463.html open函数可以打开或创建一个文件. #include <sys/types.h> #in ...

  3. 在selenium中一些相对常用的JavaScript事件

    输入框输入: 1.找到输入框的id,然后进行输入操作 ordinal :输入框的id parameter :需要输入的内容 browser.execute_script("document. ...

  4. 【WIP】Swift4 异常处理, JSON处理

    创建: 2018/03/24 更新: 2018/06/05 补充catch可以只带where不带模式 [任务表]TODO 异常处理语法  异常的发生 抛出例外 thorw 式 ● 抛出的值的类型必须采 ...

  5. 洛谷 P1081 开车旅行【双向链表+倍增】

    倍增数组的20和N写反了反复WAWAWA-- 注意到a和b在每个点上出发都会到一个指定的点,所以这样构成了两棵以n点为根的树 假设我们建出了这两棵树,对于第一问就可以枚举起点然后倍增的找出ab路径长度 ...

  6. 【OpenJ_Bailian - 2945】拦截导弹(动态规划)

    拦截导弹  Descriptions: 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高 ...

  7. java基础类型数据与String类包装类之间的转换与理解

    数据类型转换一般分为三种: 在java中整型,实型,字符型视为简单数据类型,这些数据类型由低到高分别为:(byte,short,char--int-long-float-double) 简单数据类型之 ...

  8. B - Archer

    Problem description SmallR is an archer. SmallR is taking a match of archer with Zanoes. They try to ...

  9. 459 Repeated Substring Pattern 重复的子字符串

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000.示例 1:输入: "abab"输出: True解释: 可由 ...

  10. WCF入门大致思路

    WCF服务: 1.IServer.cs(类似接口,WCF接口) 2.Server.svc(实现了WCF接口)右键浏览器运行可以看到WCF服务链接,类似(http://localhost:4609/Us ...