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);
Hibernate-02的更多相关文章
- hibernate 02之helloworld
1.安装插件 安装方法说明(hibernatetools-.Final): Help --> Install New Software... Click Add... In dialog Add ...
- Rhythmk 学习 Hibernate 02 - Hibernate 之 瞬时状态 离线状态 持久化状态 三状态
by:rhythmk.cnblogs.com 1.Hibernate 三种状态: 1.1.三种定义(个人理解,不一定准确): 瞬时状态(transient): 不被session接管,且不存在 ...
- hibernate 映射 多对一
一对多和上文讲的多对一两种映射关系,其实就是站在相反的角度考虑同样的事情. 一对多和多对一映射原理是一样的,都在多的一端加入一个外键指向一的一端.也就是说,在关系数据库的表中,他们的表及表字段都是一样 ...
- Hibernate 系列 02 - Hibernate介绍及其环境搭建
引导目录: Hibernate 系列教程 目录 昨晚喝多了,下午刚清醒,继续搞Hibernate.走起. 觉得还行的话,记得点赞哈,给我这个渣渣点学习的动力.有错误的话也请指出,省的我在错误上走了不归 ...
- 02 Hibernate错题分析
解析:使用final修饰的成员变量是常量 解析:不存在StateMoreSession的对象 解析:一个PreparedStatement 可以执行多次executQuery方法 解析:A 使用H ...
- 02.Hibernate映射基础
前言:Hibernate的核心功能是根据数据库到实体类的映射,自动从数据库绑定数据到实体类.使我们操作实体类(Java对象)就能对数据库进行增.删.查.改,而不用调用JDBC API使数据操作变得简单 ...
- Hibernate逍遥游记-第5章映射一对多-02双向(<set>、<key>、<one-to-many>、inverse、cascade="all-delete-orphan")
1. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hi ...
- Hibernate-ORM:02.Hibernate增删改入门案例
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本笔者使用的是Idea+mysql+maven做Hibernate的博客,本篇及其以后都是如此! 首先写好思路 ...
- Hibernate事务以及一级缓存02
一. Hibernate中的事务 1. 事务的回顾 1.1 什么是事务(Transaction)(面试重点) 是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的 ...
- 02.Hibernate配置文件之映射配置文件
映射文件,即xxx.hbm.xml的配置文件 <class>标签:用来将类与数据库表建立映射关系 属性: name:类中的全路径 table:表名(如果类与表名一致,那么table属性可以 ...
随机推荐
- MFC优秀博客记录 鸡啄米
最近在学习和利用C++ MFC做一些小的应用,发现鸡啄米先生的教程很不错适合新手,在这就把自己实现的一些小demo分享一下: C++编程入门系列之目录和总结 第一部分:C++编程概述 第二部分:C++ ...
- CodeForces 730A Toda 2 (模拟)
题意:给定一个序列,现在你每次至多给5个人的权值减小1,最少2个人,最小是0,使得剩下的所有权值都相等且尽量大. 析:用multiset来模拟,每次取权值最大的三个或者两个,直到最后相等.我开始没有这 ...
- Ruby module里的self
创建: 2018/03/15 更新: 2018/03/22 把标题ruby首字母大写 都知道def self.方法名 来定义类方法 class SampleClass def self.class_m ...
- JAVA数据类型提升
在java中数值进行计算事会自动进行数据类型提升,例如:计算时byte,short,char类型会提升为int数据类型. 例1: class dataType { public static void ...
- 洛谷 P4012 深海机器人问题 【最大费用最大流】
和火星那个有点像,但是这个价值直接在路径上,不用拆点,对于每条价值为w的边(i,j),连接(i,j,1,w)(i,j,inf,0),表示价值只能取一次,然后连接源点和所有出发点(s,i,k,0),所有 ...
- Eclipse 最新版2018-09安装Maven教程
其实在写这篇教程之前,花了不少时间来学习安装Maven.不是链接打不开,要么就是提供的方法不适合我这个版本,当然了,既然你能看到这篇教程说明我已经找到了正确方法. 打开Eclipse-Help-> ...
- Canvas 入门案例
五. Canvas 入门案例 1. canvas 圆形绘制 <!DOCTYPE html> <html lang="en"> <head> ...
- iOS 上传APP到AppStore 卡在 Authenticating with the iTunes store 提示
上传APP的时候,遇到了问题,一直卡在Authenticating with the iTunes store提示这里, 解决办法:在Application Loader里面登录需要上传APP的开发者 ...
- Fools and Roads CodeForces - 191C
Fools and Roads CodeForces - 191C 题意:给出一棵n个节点的树,还有树上的k条简单路径(用路径的两个端点u和v表示),对于树上每一条边,求出其被多少条简单路径经过. 方 ...
- 题解报告:hdu1205吃糖果(插空法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1205 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果, ...