hibernate系列笔记(2)---Hibernate的核心API
Hibernate的核心API
一般我们通过hibernate进行操作的时候,都会遵循下面的流程,那么接下来我对每一个步骤进行讲解:
1 public void testInsert() {
2 //(1) 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
3 Configuration configuration = new Configuration().configure();
4 //(2)创建会话工厂
5 SessionFactory sessionFactory = configuration.buildSessionFactory();
6 //(3) 创建会话
7 Session session = sessionFactory.openSession();
8 //(4) 开启事务
9 Transaction transaction = session.beginTransaction();
10
11 /*
12 *编写自己的逻辑代码
13 */
14
15 // 提交事务
16 transaction.commit();
17 session.close();
18 sessionFactory.close();
19 }
(1) 实例化配置对象 configuration
这一步是用来加载核心配置文件
核心配置有两种:
hibernate.properties
加载:Configuration configuration = new Configuration();
hibernate.cfg.xml:
加载:Configuration configuration = new Configuration().configure();
(2)创建会话工厂 sessionFactory
Configuration对象根据当前的配置信息生成 SessionFactory对象,
SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句
SessionFactory 对象是线程安全的,SessionFactory还负责维护Hibernate的二级缓存,
SessionFactory对象根据数据库信息,维护连接池,创建Session(相当于Connection)对象
(3)创建会话 session对象(相当于 JDBC的 Connection)
Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,是线程不安全的
所有持久化对象必须在 session 的管理下才可以进行持久化操作,Session 对象有一个一级缓存
显式执行 flush 之前,所有的持久化操作的数据都缓存在 session 对象处,持久化类与 Session 关联起来后就具有了持久化的能力,
Session维护了Hiberante一级缓存.
session对象提供了许多的方法来实现增删改差:
save()/persist() :添加
update() :修改
saveOrUpdate() :增加和修改对象
delete() :删除对象
get()/load() :根据主键查询
createQuery() :创建一个Query接口,编写HQL语句
createSQLQuery() :创建一个SQLQuery接口,编写SQL语句数据库操作对象
createCriteria() :返回一个Criteria接口.条件查询
(4)提取工具类
因为我们在项目开发中经常需要进行相关增删改查的操作,所以都需要这个session对象,这个时候我们可以把她变成一个工具类
public class HibernateUtils {
private static Configuration configuration;
private static SessionFactory sessionFactory;
static{
configuration=new Configuration().configure();
sessionFactory=configuration.buildSessionFactory();
}
public static Session getSession(){
return sessionFactory.openSession();
}
}
/*
*通过这个工具类,只要你每次HibernateUtils.getSession
*就可以获得session对象
*/
(5) 开启事务 Transaction 对象
获得:Transaction tx = session.beginTransaction();
常用方法:
commit() :提交相关联的session实例
rollback() :撤销事务操作
wasCommitted() :检查事务是否提交
如果没有开启事务,那么每个Session的操作,都相当于一个独立的事务
6.Query 对象
Query代表面向对象的一个Hibernate查询操作
session.createQuery 接收一个HQL语句
HQL是Hibernate Query Language缩写, 语法很像SQL语法,但是完全面向对象的
举例
//1.查询所有的数据
public void testQuery(){
//这里就是通过足记编写的工具类,来获得session对象
Session session=HibernateUtils.getSession();
Transaction transaction =session.beginTransaction(); String hql="from Customer"; //类名 Query query =session.createQuery(hql); List<Customer> customers=query.list();
System.out.println(customers); transaction.commit();
session.close();
}
}
查询所有的数据
//批量插入数据
public void testBathInsert(){
Session session=HibernateUtils.getSession();
Transaction transaction =session.beginTransaction(); for(int i=0;i<1000;i++){
Customer customer =new Customer();
customer.setName("小明_"+i);
customer.setAddr("余杭区_"+i);
customer.setCity("杭州_"+i);
customer.setAge(i);
session.save(customer);
}
transaction.commit();
session.close();
批量插入数据
//分页查询
public void testQueryByPage(){
Session session=HibernateUtils.getSession();
Transaction transaction =session.beginTransaction(); //查询所有数据
String hql=" from Customer";
Query query =session.createQuery(hql); //设置查询条件
query.setFirstResult(20);//设置开始查询的位置
query.setMaxResults(20);//要查询的长度 List<Customer> customers =query.list();
System.out.println(customers); transaction.commit();
session.close();
}
分页查询
//通过select关键字 查询指定的属性和对应的列
public void testQuerySelect(){
Session session=HibernateUtils.getSession();
Transaction transaction =session.beginTransaction();
//这里既然是new Customer(name,age),那么就需要通过这样的构造函数
String hql="select new Customer(name,age) from Customer"; Query query =session.createQuery(hql); List<Customer> customers =query.list();
System.out.println(customers); transaction.commit();
session.close();
}
选择特定的列
//通过where条件
public void testQueryParamter(){
Session session=HibernateUtils.getSession();
Transaction transaction =session.beginTransaction(); String hql="from Customer where name=? and age=?"; Query query =session.createQuery(hql);
query.setParameter(0, "小明_4");
query.setParameter(1, 4); List<Customer> customers =query.list();
System.out.println(customers); transaction.commit();
session.close();
}
where条件查询
7.Criteria(条件查询接口)
可以实现和Query一样的效果
举例
// 查询所有
public void testQueryAll() { // 获取Session对象
Session session = HibernateUtils.getSession();
//开启事务
Transaction transaction =session.beginTransaction();
//
Criteria criteria =session.createCriteria(Customer.class); List<Customer> customers =criteria.list();
System.out.println(customers); transaction.commit();
session.close();
}
查询所有
//分页查询
public void testQueryByPage(){
// 获取Session对象
Session session = HibernateUtils.getSession();
//开启事务
Transaction transaction =session.beginTransaction(); Criteria criteria =session.createCriteria(Customer.class);
criteria.setFirstResult(30);
criteria.setMaxResults(20); List<Customer> customers =criteria.list();
System.out.println(customers); transaction.commit();
session.close();
分页查询
//条件查询
public void testQueryByCondition(){
// 获取Session对象
Session session = HibernateUtils.getSession();
//开启事务
Transaction transaction =session.beginTransaction();
Criteria criteria =session.createCriteria(Customer.class); //创建条件对象
Criterion criterion =Restrictions.eq("name", "小明_4"); //把查询条件对象加载到查询对象
criteria.add(criterion); List<Customer> customers =criteria.list();
System.out.println(customers); transaction.commit();
session.close();
}
条件查询
这篇文字就讲到这了,欢迎大家多多指点,谢谢!
hibernate系列笔记(2)---Hibernate的核心API的更多相关文章
- hibernate系列笔记(1)---Hibernate增删改查
Hibernate增删改查 1.首先我们要知道什么是Hibernate Hibernate是一个轻量级的ORMapping对象.主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获 ...
- hibernate框架学习第二天:核心API、工具类、事务、查询、方言、主键生成策略等
核心API Configuration 描述的是一个封装所有配置信息的对象 1.加载hibernate.properties(非主流,早期) Configuration conf = new Conf ...
- Hibernate 系列 03 - 使用Hibernate完成持久化操作
引导目录: Hibernate 系列教程 目录 康姆昂,北鼻,来此狗.动次打次,Hibernate继续走起. 目录: 使用Hibernate实现按主键查询 使用Hibernate实现数据库的增.删.改 ...
- hibernate学习笔记之四 Hibernate的增删改查
采用JUnit测试,继承TestCase import java.util.Date; import junit.framework.TestCase; import org.hibernate.Se ...
- Hibernate学习笔记(六) — Hibernate的二级缓存
我们知道hibernate的一级缓存是将数据缓存到了session中从而降低与数据库的交互.那么二级缓存呢? 一.应用场合 比方.在12306购票时.须要选择出发地与目的地,假设每点一次都与数据库交互 ...
- hibernate系列笔记(3)---持久化对象
持久化对象 再讲持久化对象之前,我们先来理解有关session中get方法与 load方法区别: 简单总结: (1)如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库 ...
- hibernate学习笔记之一 hibernate简介
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架 hibernate可以自动生成SQL语句,自 ...
- 笔记-Nodejs中的核心API之Events
最近正在学习Node,在图书馆借了基本关于Node的书,同时在网上查阅资料,颇有收获,但是整体感觉对Node的理解还是停留在一个很模棱两可的状态.比如Node中的模块,平时练习就接触到那么几个,其他的 ...
- JBoss 系列二十一:JBossCache核心API
内容简介 本处介绍JBossCache相关的主要API,我们目的通过本部分描述,读者可以使用JBossCache API,在自己的应用中使用JBossCache. Cache接口 Cache 接口是和 ...
随机推荐
- UVa 483 - Word Scramble
题目大意:给一个由单词组成的句子,只反转单词内部的次序而不改变单词之间的次序.如“I love you.”转换成“I evol .uoy”. #include <cstdio> #incl ...
- SVN下载分支、合并分支
http://www.cnblogs.com/armyfai/p/3985660.html(不知道实际工作中怎么使用,有好多步骤感觉不是太理解) 从远处把库fork到本地,会有一个库文件夹 服务器库结 ...
- Javascript 浮点运算问题分析与解决
分析 JavaScript 只有一种数字类型 Number ,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的. 浮点数的精度问题不是JavaScript特有的,因为有些小数 ...
- iOS 类库列表
1. LinqToObjectiveC #import "NSArray+LinqExtensions.h" 它为NSArray添加了许多方法,能让你用流式API来转换.排序.分 ...
- 分享Grunt.js配置: watch + liveReload 实时监测文件变化自动刷新浏览器
http://www.tuicool.com/articles/2eaQJn 用Grunt配置watch和liveReload组件,可以实时检测指定的文件变化并自动刷新浏览器.目前基本已经成为了我的必 ...
- nodejs那些事
安装篇: 1.从http://nodejs.cn/上下载了nodejs-v4.4.4版安装包(已存入360云盘) 2.在windows下双击——下一步——下一步安装即可(注意:安装路径就默认安装到C: ...
- 兼容ie6及以上的阴影滤镜的写法
.subnav{ width: 220px; _width:160px; min-height: 168px; border: 1px solid #d0d8da; background: #fff; ...
- 看完让你彻底搞懂Websocket原理
偶然在知乎上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有.所以转到我博客里,分享一下.比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗 ...
- 程序启动缓慢-原来是hbm.xml doctype的原因
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "h ...
- Javaweb阶段知识回顾一
java基础增强 一.jdk1.5的新特性 自动封箱拆箱 封箱:Java自动将原始类型值转换成对应的对象,如将int的变量转换成Integer对象 拆箱:自动将对应的对象转换成原始类型值,将Integ ...