1、   Transaction 事务

事务的操作:

开启事务 beginTransaction()

获得事务 getTransaction()

提交事务:commit()

回滚事务:rollback()

package com.alice.hibernate01.api;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; public class TracnsactionTest {
@Test
//Transaction 封装了事务的操作
//开启事务
//提交事务
//回滚事务
public void openTest(){
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session
Session session = sf.openSession();
//-------------------------------
//打开事务
Transaction ts = session.beginTransaction();
//获得已经打开的事务对象(很少用)
session.getTransaction(); //Transaction 控制如何关闭事务
//提交
ts.commit();
//回滚
ts.rollback(); //-------------------------------
session.close();
sf.close();
} @Test
public void transactionTest2(){
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session,获得与当前线程绑定的session
Session session = sf.getCurrentSession();
//事务关闭时,会自动把与当前线程关联的session关闭,并删除
session.beginTransaction().commit(); //在获得当前线程绑定的session时. 获得的是新的session
Session session1 = sf.getCurrentSession(); System.out.println(session != session1);
//-------------------------------
session.close();
sf.close();
}
}

2、   Query对象

1  hibernate执行hql语句

2  hql语句:hibernate提供面向对象查询语句,使用对象(类)和属性进行查询。区分大小写。

3 获得 session.createQuery("hql")

4 方法:

list()  查询所有

uniqueResult() 获得一个结果。如果没有查询到返回null,如果查询多条抛异常。

setFirstResult(int) 分页,开始索引数startIndex

setMaxResults(int) 分页,每页显示个数 pageSize

package com.alice.hibernate01.api;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import com.alice.hibernate01.hello.User; public class QueryTest {
@Test
public void sqlQueryTest(){
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session
Session session = sf.openSession();
//打开事务
Transaction trac = session.beginTransaction(); Query query = session.createQuery("from User"); //分页 limit index,count;
//指定结果从第几个开始拿
query.setFirstResult(0);
//指定拿几个结果
query.setMaxResults(2); //query.list() 将hql语句执行,并返回结果(多行)
// List<User> list = query.list();
// System.out.println(list); //uniqueResult 将hql语句执行,并返回结果(一行)
User user = (User) query.uniqueResult();
System.out.println(user); trac.commit();
//关闭资源
session.close();
sf.close();
}
}

3、  Criteria对象(了解)

1、QBC(query by criteria),hibernate提供纯面向对象查询语言,提供直接使用PO对象进行操作

2、 获得方式:Criteria criteria = session.createCriteria(User.class);

3、  条件

criteria.add(Restrictions.eq("username", "tom"));

//    Restrictions.gt(propertyName, value)    大于

//    Restrictions.ge(propertyName, value) 大于等于

//    Restrictions.lt(propertyName, value) 小于

//    Restrictions.le(propertyName, value) 小于等于

// Restrictions.like(propertyName, value)  模糊查询,注意:模糊查询值需要使用 % _

package com.alice.hibernate01.api;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import org.junit.Test; import com.alice.hibernate01.hello.User; public class CretiariaTest {
@Test
public void queryTest() {
// 1加载配置
Configuration conf = new Configuration().configure();
// 2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
// 3 获得session
Session session = sf.openSession();
// 打开事务
Transaction ts = session.beginTransaction(); // --------------------------------------------------------
// Criteria 查询 => Hibernate独创的面向对象的查询=> 无语句
Criteria criteria = session.createCriteria(User.class); // select * from t_user;
// list() 将查询执行,并返回结果(多行)
// List<String> list = criteria.list();
// System.out.println(list); // 查找name属性值为tom的 记录
criteria.add(Restrictions.eq("name", "aaaa"));
// 返回一个查询结果
User user = (User) criteria.uniqueResult();
System.out.println(user); // 提交事务
ts.commit(); // 关闭资源
session.close();
sf.close(); } @Test
public void criteriaTest2() {
// Cretiaria对象 与 Query对象功能很像
// 控制查询
// 1加载配置
Configuration conf = new Configuration().configure();
// 2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
// 3 获得session
Session session = sf.openSession();
// 打开事务
Transaction ts = session.beginTransaction(); // --------------------------------------------------------
// Criteria 查询 => Hibernate独创的面向对象的查询=> 无语句
Criteria criteria = session.createCriteria(User.class);
// 查找名字中包含字母l的用户
criteria.add(Restrictions.like("name", "%l%")); List<User> list = criteria.list();
System.out.println(list); // ---------------------------------------------------------
// 提交事务
ts.commit(); // 关闭资源
session.close();
sf.close();
} @Test
//Cretiaria对象 与 Query对象功能很像
//> gt
//< lt
//= eq
//>= ge
//<= le
//like
public void criteriaTest3() {
// Cretiaria对象 与 Query对象功能很像
// 控制查询
// 1加载配置
Configuration conf = new Configuration().configure();
// 2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
// 3 获得session
Session session = sf.openSession();
// 打开事务
Transaction ts = session.beginTransaction(); // --------------------------------------------------------
// Criteria 查询 => Hibernate独创的面向对象的查询=> 无语句
Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.gt("id", 2)); List<User> list = criteria.list(); System.out.println(list);
// ---------------------------------------------------------
// 提交事务
ts.commit(); // 关闭资源
session.close();
sf.close();
}
}

4、封装工具类

package com.alice.hibernate01.hibernateutil;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; //完成Hibernate工具类
//封装配置文件读取操作
//封装Sessionfactroy创建操作
//封装session获得操作
public class HibernateUtil {
// 会话工厂,整个程序只有一份
private static SessionFactory sf;
static {
// 1加载配置
Configuration conf = new Configuration().configure();
// 2 根据Configuration 配置信息创建 SessionFactory
sf = conf.buildSessionFactory();
//3 关闭虚拟机时,释放SessionFactory
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override
public void run() {
System.out.println("虚拟机关闭!释放资源");
sf.close(); }
}));
}
/*
* 获得一个新的session
* @return
*/
public static Session openSession() {
// 3 获得session
Session session = sf.openSession();
return session;
}
/**
* 获得当前线程中绑定session
* * 注意:必须配置
* @return
*/
public static Session getCurrentSession() {
Session session = sf.getCurrentSession();
return session;
} // 测试
public static void main(String args[]) {
Session session = openSession();
System.out.println(session);
}
}

5、 核心配置文件详解

<!-- SessionFactory,相当于之前学习连接池配置 -->
<session-factory>
<!-- 1 基本4项 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///h_day01_db</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property> <!-- 2 与本地线程绑定 -->
<property name="hibernate.current_session_context_class">thread</property> <!-- 3 方言:为不同的数据库,不同的版本,生成sql语句(DQL查询语句)提供依据
* mysql 字符串 varchar
* orcale 字符串 varchar2
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 4 sql语句 -->
<!-- 显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property> <!-- 5 自动创建表(了解) ,学习中使用,开发不使用的。
* 开发中DBA 先创建表,之后根据表生产 PO类
* 取值:
update:【】
如果表不存在,将创建表。
如果表已经存在,通过hbm映射文件更新表(添加)。(映射文件必须是数据库对应)
表中的列可以多,不负责删除。
create :如果表存在,先删除,再创建。程序结束时,之前创建的表不删除。【】
create-drop:与create几乎一样。如果factory.close()执行,将在JVM关闭同时,将创建的表删除了。(测试)
validate:校验 hbm映射文件 和 表的列是否对应,如果对应正常执行,如果不对应抛出异常。(测试)
-->
<property name="hibernate.hbm2ddl.auto">create</property> <!-- 6 java web 6.0 存放一个问题
* BeanFactory 空指针异常
异常提示:org.hibernate.HibernateException: Unable to get the default Bean Validation factory
* 解决方案:取消bean校验
-->
<property name="javax.persistence.validation.mode">none</property> <!-- 添加映射文件
<mapping >添加映射文件
resource 设置 xml配置文件 (addResource(xml))
class 配置类 (addClass(User.class)) 配置的是全限定类名
-->
<mapping resource="com/itheima/a_hello/User.hbm.xml"/>
</session-factory>

  

hibernate学习(3)——api详解对象(2)的更多相关文章

  1. hibernate学习(2)——api详解对象

    1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...

  2. Hibernate框架学习(二)——api详解

    一.Configuration对象 功能:配置加载类,用于加载主配置,orm元数据加载. //1.创建,调用空参构造(还没有读配置文件) Configuration conf=new Configur ...

  3. 分享知识-快乐自己:Hibernate框架常用API详解

    1):Configuration配置对象 Configuration用于加载配置文件. 1): 调用configure()方法,加载src下的hibernate.cfg.xml文件 Configura ...

  4. Hibernate学习三----------session详解

    © 版权声明:本文为博主原创文章,转载请注明出处 如何获取session对象 1. openSession 2. getCurrentSession - 如果使用getCurrentSession需要 ...

  5. Java8学习笔记(五)--Stream API详解[转]

    为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 ...

  6. 大数据学习笔记——Spark工作机制以及API详解

    Spark工作机制以及API详解 本篇文章将会承接上篇关于如何部署Spark分布式集群的博客,会先对RDD编程中常见的API进行一个整理,接着再结合源代码以及注释详细地解读spark的作业提交流程,调 ...

  7. jqGrid APi 详解

    jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...

  8. Hibernate入门(二)——hibernateAPI详解

    Hibernate API 详解 1.Configuration 功能:配置加载类,用于加载主配置,orm元数据加载 .创建: Configuration conf = new Configurati ...

  9. OpenGL ES: (4) EGL API详解 (转)

    上一节我们初步学习了 OpenGL ES.EGL.GLSL 的相关概念,了解了它们的功能,以及它们之间的关联.我们知道了 EGL 是绘制 API(比如 OpenGL ES)与 底层平台窗口系统之间的接 ...

随机推荐

  1. 二叉搜索树 POJ 2418 Hardwood Species

    题目传送门 题意:输入一大堆字符串,问字典序输出每个字符串占的百分比 分析:二叉搜索树插入,然后中序遍历就是字典序,这里root 被new出来后要指向NULL,RE好几次.这题暴力sort也是可以过的 ...

  2. BFS(判断状态) HDOJ 3533 Escape

    题目传送门 题意:一个人从(0, 0)逃往(n, m),地图上有朝某个方向开炮的炮台,问最少逃脱步数 分析:主要在状态是否OK,当t时刻走到(x,y),炮台是否刚好打中,因为只能是整数,所以用整除判断 ...

  3. Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)

    题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和. 好难,不会写. ...

  4. 【原】iOS中KVC和KVO的区别

    在iOS开发中经常会看到KVC和KVO这两个概念,比较可能混淆,特地区分一下 KVC(Key Value Coding) 1> 概述 KVC:Key Value Coding,键值编码,是一种间 ...

  5. iOS学习35数据处理之文件读写

    1. 沙盒机制 1> 沙盒概述 每一个iOS应用程序都会为自己创建一个文件系统目录(文件夹), 这个独立.封闭.安全的空间,叫做沙盒 注:① 每一个应用程序都会拥有一个应用程序沙盒 ② 应用程序 ...

  6. iOS学习02C语言分支结构

    1. BOOL类型 返回值:真:YES  假:NO BOOL数据类型占一个字节的内存空间,占位符为%d. 计算机在识别时,YES就替换成1,NO就替换成0. bool是C语言中的布尔类型,返回值为tr ...

  7. float浮动问题:会造成父级元素高度坍塌;

    float浮动问题:会造成父级元素高度坍塌: 解决办法:清除浮动:clear:both; 给父元素高度:height(不是很可取) 给父元素:display:inline-black:(问题:marg ...

  8. 优化特性(Attribute)性能

    通过这篇文章,不仅可以了解到Attribute的工作原理,还可以了解到GetcustomeAttribute是的内部执行流程.最后,你会看到,使用缓存机制可以极大的优化反射Attribute的性能. ...

  9. JsonP的简单demo

    服务器端代码 public ActionResult GetNewUploadCourseIds() { "; var result = new Result<NewUpload> ...

  10. C语言(3)

    C语言(3)----数据输入 输入时的关键字为scanf.如我们要从键盘上输入一个数,放在变量a里面,则可以写成scanf("%d",&a); "&&qu ...