二、hibernate的常用API
hibernate的调用过程
public class demo01 {
@Test
public void test(){
// 1.加载hibernate核心配置文件
Configuration configure = new Configuration().configure();
// 2.创建SessionFactory对象:类似JDBC连接池
SessionFactory factory = configure.buildSessionFactory();
// 3.通过SessionFactory获取Session对象:类似Connection对象
Session session = factory.openSession();
// 4.手动开启事务
Transaction transaction = session.beginTransaction();
// 5.编写代码执行数据库操作
User user = new User();
user.setId(null);
user.setName("admin");
user.setPassword("123");
Serializable save = session.save(user);
int ret = (int) save;
// 6.提交事务
if(ret > 0){
transaction.commit();
}else {
transaction.rollback();
}
session.close();
factory.close();
}
}
加载核心配置文件
Configuration类,加载核心配置文件
- 加载hibernate.properties文件,hibernate里无法引入映射文件,所以需要手动加载映射文件
// 1.加载hibernate核心配置文件
Configuration configure = new Configuration();
configure.addResource("com/qf/entity/User.hbm.xml");//手动加载映射文件 - 加载hibernate.cfg.xml文件
// 1.加载hibernate核心配置文件
Configuration configure = new Configuration().configure();
创建SessionFactory对象
SessionFactory,相当于一个数据库连接池,是线程安全的对象,一个项目只需要创建一个SessionFactory对象
另外,SessionFactory是一个重量级的对象,所以有必要将SessionFactory的创建过程单独抽取处理
public class SessionFactoryUtil {
private static Configuration cfg ;
private static SessionFactory factory;
static {
cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
}
public Session getSession(){
Session session = factory.openSession();
return session;
}
}
获取Session对象以及操作数据库
Session对象,相当于JDBC操作中的Connection,负责对被持久化对象进行CRUD操作,并且线程不安全,所以不能把session定义成全局的或者抽出来单独处理
- 保存方法,save方法返回的是新增记录的id,saveOrUpdate方法适合保存和修改

- 修改方法,推荐先查询再修改

- 删除方法,推荐先查询,再删除,便于级联删除

- 查询方法
- load

- get

- load方法和get方法的区别
-
查询方法 加载策略 返回结果 查不到对象的处理方式 sql发送时机 load() 延迟加载 代理对象
javassist-3.23.1-GA.jar提供的代理技术支持
ObjectNotFoundException 真正使用对象时 get() 立即加载 对象本身 null 执行到当前代码时
-
- load
事务相关操作
Transaction,管理Hibernate中的事务
- 开启事务
Transaction transaction = session.beginTransaction();
- 提交事务
transaction.commit();
- 回滚事务
transaction.rollback();
其他的API
Query
传递的参数是HQL语句,是面向对象的查询,返回的是一个对象的集合
String sql = "from User where id < ? and name like ?";
- 这里User是对象,id和name是对象的属性
query.setInteger(0, 10);和query.setString(1, "%ad%");是设置HQL中的"?"参数值(索引位置从0开始)
简单查询
@Test
public void query() {
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
Transaction tx = session.beginTransaction(); String sql = "from User where id < ? and name like ?";
Query query = session.createQuery(sql);
query.setInteger(0, 10);
query.setString(1, "%ad%");
List<User> list = query.list();
for (User user : list) {
System.out.println(user);
} tx.commit();
session.close();
----------------------------------console----------------------------------
Hibernate:
select
user0_.id as id1_0_,
user0_.name as name2_0_,
user0_.password as password3_0_
from
user user0_
where
user0_.id<?
and (
user0_.name like ?
)
User [id=3, name=admin, password=123]
User [id=4, name=admin, password=123]
User [id=8, name=admin, password=123]
分页查询
- query.setFirstResult(2):从第几条记录开始查询
- query.setMaxResults(3):本页一共查询多少条记录
@Test
public void query() {
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
Transaction tx = session.beginTransaction(); String sql = "from User";
Query query = session.createQuery(sql);
query.setFirstResult(2);
query.setMaxResults(3);
List<User> list = query.list();
for (User user : list) {
System.out.println(user);
} tx.commit();
session.close();
}
----------------------------------console----------------------------------
Hibernate:
select
user0_.id as id1_0_,
user0_.name as name2_0_,
user0_.password as password3_0_
from
user user0_ limit ?,
?
User [id=3, name=admin, password=123]
User [id=4, name=admin, password=123]
User [id=5, name=hz, password=0]
Criteria
Query By Criteria:条件查询
完全面向对象的查询方式
- c.add(Restrictions.like("name", "%ad%")):这里的"name"是属性名,"%ad%"是参数值
- 返回的是一个对象的集合
查询user表中id>3并且名字中含有ad的记录
@Test
public void criteria() {
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
Transaction tx = session.beginTransaction(); //Criteria c = session.createCriteria("com.qf.entity.User");
Criteria c = session.createCriteria(User.class);
c.add(Restrictions.like("name", "%ad%"));
c.add(Restrictions.gt("id", 3));
List<User> list = c.list();
for (User user : list) {
System.out.println(user);
} tx.commit();
session.close();
}
----------------------------------console----------------------------------
select
this_.id as id1_0_0_,
this_.name as name2_0_0_,
this_.password as password3_0_0_
from
user this_
where
this_.name like ?
and this_.id>?
User [id=4, name=admin, password=123]
User [id=8, name=admin, password=123]
SQLQuery
接收的是SQL语句,返回的是Object[]的集合
查询user表中id>3并且名字中含有ad的记录
@Test
public void SqlQuery() {
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
Transaction tx = session.beginTransaction(); String sql = "select * from user where id>? and name like ?";
SQLQuery query = session.createSQLQuery(sql);
query.setInteger(0, 3);
query.setString(1, "%ad%"); List<Object[]> list = query.list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
} tx.commit();
session.close();
}
----------------------------------console----------------------------------
Hibernate:
select
*
from
user
where
id>?
and name like ?
[4, admin, 123]
[8, admin, 123]
二、hibernate的常用API的更多相关文章
- 【OpenGL游戏开发之二】OpenGL常用API
OpenGL常用API 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数.它采用C语言风格,提供大量的函数来进行图形的处理和显示.OpenGL库函数的命名方式非常有规律.所有OpenGL ...
- 分享知识-快乐自己:Hibernate框架常用API详解
1):Configuration配置对象 Configuration用于加载配置文件. 1): 调用configure()方法,加载src下的hibernate.cfg.xml文件 Configura ...
- NodeJS:(二)基础常用API
node.js中文网:http://nodejs.cn/api/ (path.Buffer.events.fs) ①path路径-----const {resolve} = require('path ...
- Hibernate常用api以及增删改查
一 .API的定义 所谓的API全称就是(Application Programming Interface,应用程序编程接口).就是类库对外提供的接口.类.枚举.注解等元素. 如:JDK API ...
- Servlet 常用API学习(二)
Servlet常用API学习 一.HTTP简介 WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议. HTTP是 hypertext transfer pr ...
- Netty的常用API(二)
在使用Netty之前先介绍下Netty的常用API,对其有一个大概的了解. 一.EventLoop和EventLoopGroup EventLoop如同它的名字,它是一个无限循环(Loop),在循环中 ...
- java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)
1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件 准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...
- Java 常用API(二)
目录 Java 常用API(二) 1. Object类 2. Date类 概述 构造方法和成员方法 3. DateFormat类 概述 SimpleDateFormat类 练习 4. Calendar ...
- Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API
不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...
随机推荐
- BZOJ 1779. [Usaco2010 Hol]Cowwar 奶牛战争
传送门 考虑构建网络流模型 把一个流量看成一只奶牛的攻击过程,那么答案就是最大流 因为每只奶牛只能操作一波,所以构造分层图,一层相当于一步 第一层就是初始状态,从 $S$ 向所有 $J$ 奶牛连一条流 ...
- Libgdx中TextButton的一些思考
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/caihongshijie6/article/details/37566183 由于有 ...
- C#解惑:HashSet<T>类
原贴: https://blog.csdn.net/X_X_OO/article/details/52529548 https://www.cnblogs.com/refuge/p/9465466.h ...
- Linux面试基础(二)
Linux常用目录——存放 /bin 所有用户可以使用的可执行文件 /sbin 新管理员使用的执行文件 /boot Linux内核映像文件和与引导加载有关的文件 /dev 设备文件 /etc ...
- 一、@Html.DropDownList
一.Html.DropDownList 通过linq 将datatable转换下拉列表 //查询城市 string CityId = WebCommon.Public.GetAdminCityId() ...
- 【转】Java里如何实现线程间通信
正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及到的知识点:thread.join(), object.w ...
- HTML+CSS+JS是什么
html:整合网页结构和内容显示的一种语言 css:是一种用来表现HTML或XML等文件样式的计算机语言 js:增加表现力的脚本 做网页前台设计的标准套装,html是一些网页控件,css是美化这些控件 ...
- 【Flutter学习】之DateTime日期转换
概述: 表示一个时间点 通过构造函数或解析格式化的字符串创建DateTime对象,并且符合ISO 8601标准的子集,小时是24小时制,范围在0-23之间 DateTime对象创建之后,将是固定不变的 ...
- Es学习第四课, 倒排索引
大家知道,ES的发明者初衷是想做一个搜索引擎给自己老婆用来搜菜谱,所以ES的核心工作就是做搜索,下面我们就开始讲关于搜索方面的知识点. DOC的概念我们第一课就讲过,它是ES存储数据的最小单元,我们再 ...
- setTimeout()和setInterval()的用法及区别
setInterval 方法表示每间隔一段时间执行一次函数,会一直执行下去,除非手动 clearInterval 来停止. var i = 10; var timer = setInterval(() ...