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框架学习笔记3:API详解
Configuration对象: package api; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configur ...
- hibernate框架(1)---Hibernate增删改查
Hibernate增删改查 1.首先我们要知道什么是Hibernate Hibernate是一个轻量级的ORMapping对象.主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获 ...
- JavaWeb_(Hibernate框架)使用Hibernate开发用户注册功能
使用Hibernate开发用户注册功能: 用户在register.jsp表单成功后,页面跳转到login.html,数据库中会存放用户注册的信息 <%@ page language=" ...
- Hibernate框架笔记01_环境搭建_API_CRUD
目录 1. Hibernate框架的概述 1.1 什么是框架 1.2 经典三层架构 1.3 Hibernate框架 2 Hibernate入门 2.1 下载Hibernate的开发包 2.2 创建项目 ...
- Hibernate框架基础
Hibernate框架基础 Hibernate框架 ORM概念 O, Object 对象 R, Realtion 关系 (关系型数据库: MySQL, Oracle…) M,Mapping 映射 OR ...
- Hibernate框架之入门
1.Hibernate框架简述 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.proper ...
- Hibernate框架学习笔记
Hibernate 是一个 JDO( Java Data Objects)工具.它的工作原理是通过文件把值对象(Java对象)和 数据库表之间建立起一个映射关系,还提供数据查询和获取数据的方法. ...
- Struts2,Spring,Hibernate框架的优缺点
Struts2,Spring,Hibernate框架的优缺点 Struts2框架(MVC框架)的优点如下: 1) 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现: ...
- Hibernate框架简介(二)基本使用增、删、改、查
一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬 ...
随机推荐
- opencv的安装
网上搜了好多文章安装opencv3.2.0都未能成功,写的也个不相同,后来找到了opencv官网的教程,看了后才发现,这上面才是最详细的. 于是按照opencv官网教程安装,安装的一半就中断了.经过苦 ...
- js unicode转中文 方案概述联网LED照明方案可执行全部的DALI 和
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Git和Eclipse的使用、上传、部署
https://www.jianshu.com/p/812717c740a2 https://blog.csdn.net/lynn_Kun/article/details/73740400 https ...
- Python的条件判断语句------if/else语句
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户的年龄,根据年龄打印不同的内容... Python程序中,能让计算机自己作出判断的语句就是if语句: 例: age = 25 ...
- [转]构建高性能MySQL体系
来源:http://www.yunweipai.com/archives/21232.html 构建高性能MySQL系统涵盖从单机.硬件.OS.文件系统.内存到MySQL 本身的配置,以及schema ...
- [leetcode268]Missing Number
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...
- 阿里云,未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接.
阿里云主机使用SQL Server作为数据库服务器,连接数据库时候出现错误. 按照网上经验,检查SQL服务是否开启,sa用户权限,数据库安全性和连接权限: 关闭服务器防火墙,修改入站规则: 检查阿里云 ...
- HTML 列表中的dl,dt,dd,ul,li,ol区别及应用
无序列表 无序列表是一个项目的列表,此列项目使用粗体圆点(典型的小黑圆圈)进行标记. 无序列表始于 <ul> 标签.每个列表项始于 <li>. 有序列表 同样,有序列表也是 ...
- PMP:8.项目质量管理
内容中包含 base64string 图片造成字符过多,拒绝显示
- 监听HTTP请求
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Oracle.DataAccess.Client; using System; usi ...