1   Configuration 配置对象

/详解Configuration对象
public class Configuration_test {
@Test
//Configuration 用户加载配置文件
public void fun1(){
//1.1 调用configure() 方法=> 加载src下名为hibernate.cfg.xml
Configuration conf = new Configuration().configure();
//1.2 如果配置文件不符合默认加载规则.我们可以调用
//new Configuration().configure(file); 通过file加载
//new Configuration().configure(path); 通过路径加载
//1.3 可以通过Configuration对象加载 映射文件(不推荐)
//推荐hibernate.cfg.xml 使用 mapping 属性引入配置文件
//规范: 1>orm映射文件名称与实体的简单类名一致
// 2>orm映射文件 需要与实体的类在同一包下
conf.addClass(User.class);
}
}

2    SessionFactory工厂

1)SessionFactory 相当于java web连接池,用于管理所有session

2)获得方式:config.buildSessionFactory();

3)sessionFactory hibernate缓存配置信息 (数据库配置信息、映射文件,预定义HQL语句 等)

4)SessionFactory线程安全,可以是成员变量,多个线程同时访问时,不会出现线程并发访问问题

5)提供api

//详解SessionFactory对象
public class sessionfactory_test {
@Test
//SessionFactory 创建session的工厂
public void fun1(){
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session
//3.1 openSession => 获得一个全新的Session对象,测试环境下使用
sf.openSession();
//3.2 getCurrentSession => 获得与当前线程绑定的session对象
//将session与线程绑定
// 调用getCurrentSession 需要加上一个配置: <property name="hibernate.current_session_context_class">thread</property>
sf.getCurrentSession(); }
}

hibernate支持,将创建的session绑定到本地线程中,底层使用ThreadLocal,在程序之间共享session。

1.必须在hibernate.cfg.xml 配置

2.如果提交或回滚事务,底层将自动关闭session

3.   Session 会话

1) Session 相当于 JDBC的 Connection -- 会话

2)通过session操作VO对象 --增删改查

3)session单线程,线程不安全,不能编写成成员变量

4)

l  session api

save 保存

update 更新

delete 删除

get 通过id查询,如果没有 null

load 通过id查询,如果没有抛异常

createQuery("hql")  获得Query对象

createCriteria(Class) 获得Criteria对象

load方法.返回一个代理对象,获得其内容时,会查询数据库,不是每次都查.代理对象中有一个标识是否被初始化的boolean型变量. 记录是否被初始化过。

java中的动态代理是基于接口.  而 Hibernate 是使用javassist-3.12.0.GA.jar 产生代理对象的,该代理与被代理对象之间的关系是继承关系.与我们学的动态代理不是一种.所以不需要接口

package com.alice.hibernate01.api;

import java.util.List;

import org.hibernate.Criteria;
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.hibernate.hql.ast.SqlASTFactory;
import org.junit.Test; import com.alice.hibernate01.hello.User; public class SessionTest {
@Test
public void addTest(){
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session
Session session = sf.openSession();
//打开事务
Transaction trac = session.beginTransaction(); User user = new User();
user.setName("李良");
user.setPassword("1234"); //调用Session的save方法保存对象到数据库中
session.save(user);
//提交事务
trac.commit();
//关闭资源
session.close();
sf.close();
}
@Test
public void updateTest(){
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session
Session session = sf.openSession();
//打开事务
Transaction trac = session.beginTransaction(); //先查询出你要修改的对象
User user = (User) session.get(User.class, 1); //在查询结果上,进行修改
user.setName("aaaa"); //提交事务
trac.commit();
//关闭资源
session.close();
sf.close();
}
@Test
public void deleteTest(){
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session
Session session = sf.openSession();
//打开事务
Transaction trac = session.beginTransaction(); //先查询出你要修改的对象
User user = new User();
user.setId(3); session.delete(user); //提交事务
trac.commit();
//关闭资源
session.close();
sf.close();
}
@Test
//Session对象 用于操作数据库
//查询get
public void getTest(){
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session
Session session = sf.openSession();
//打开事务
Transaction trac = session.beginTransaction(); //查询
User user = (User) session.get(User.class, 4);
System.out.println(user); trac.commit();
//关闭资源
session.close();
sf.close();
} @Test
//Session对象 用于操作数据库
//查询 load
public void loadTest(){
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session
Session session = sf.openSession();
//打开事务
Transaction trac = session.beginTransaction(); User user = (User) session.load(User.class, 5);
System.out.println(user);
trac.commit();
//关闭资源
session.close();
sf.close();
}
@Test
//Session对象 用于操作数据库
//查询所有User
public void getAllTest(){
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session
Session session = sf.openSession();
//打开事务
Transaction trac = session.beginTransaction(); //HQL语言 => Hibernate Query Language
//createQuery 传入hql语句查询
//select * from t_user;
//session.createQuery("com.alice.hibernate01.hello.User")
Query query = session.createQuery(" from User"); List<User> list = query.list();
System.out.println(list); trac.commit();
//关闭资源
session.close();
sf.close();
}
@Test
//Session对象 用于操作数据库
//查询所有User
public void critieriaTest(){
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
SessionFactory sf = conf.buildSessionFactory();
//3 获得session
Session session = sf.openSession();
//打开事务
Transaction trac = session.beginTransaction(); //Criteria 查询 => Hibernate独创的面向对象的查询=> 无语句
Criteria criteria = session.createCriteria(User.class); //select * from t_user;
List<User> list = criteria.list();
System.out.println(list); trac.commit();
//关闭资源
session.close();
sf.close();
} @Test
//Session对象 用于操作数据库
//查询所有User
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(); //原生的Sql查询
SQLQuery query = session.createSQLQuery("select * from t_user");
// addEntity 将查询结果封装到指定对象中
query.addEntity(User.class); List<User> list = query.list();
System.out.println(list); trac.commit();
//关闭资源
session.close();
sf.close();
}
}

  

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

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

    1.   Transaction 事务 事务的操作: 开启事务 beginTransaction() 获得事务 getTransaction() 提交事务:commit() 回滚事务:rollback ...

  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. ZJOI2016二试+游记

    ...excited.... 一场打回原形爽哦. T1莫名爆到了10分,T2T3均没交,一个小时过后就没再拿任何分数,perfectly狗带了... 总之没有给自己充足的时间去敲暴力,ZJOI啊..拿 ...

  2. Robotium ant 报错Unable to find instrumentation info for: ComponentInfo{project/android.test.InstrumentationTestRunner}

    [echo] Running tests ... [exec] INSTRUMENTATION_STATUS: id=ActivityManagerService [exec] INSTRUMENTA ...

  3. 使用asynctask的问题

    在使用asynctask  的onpostexcute 这个方法的时候,发现return 变量这个语句,只是return 到onpostexcute 本来 我是 private 变量1 方法1(){ ...

  4. jquery ajax 提交信息后等待返回的提示信息

    最简单的方法: http://bbs.csdn.net/topics/390584283?page=1 $('#click').click(function){ $('#data').html('&l ...

  5. BZOJ 1059 & 二分图匹配

    题意: 判断一个黑白染色的棋盘能否通过交换行或列使对角线上都是黑色. SOL: 真是有点醉...这种问题要么很神要么很水...第一眼感觉很水但就是不造怎么做...想了10分钟怎么感觉就是判断个数够不够 ...

  6. QtCreator下运行opencv出现realloc():pointer invalid

    解决办法是将qmake换成4.8的,qmake5.2的支持opencv支持的不是很好

  7. ACM: 敌兵布阵 解题报告 -线段树

    敌兵布阵 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Li ...

  8. 快速搭建IE测试环境(Virtualbox+ievms)

    IE下的测试 作为一个有追求的程序员,应该尽可能的远离Windows系统.不论从专业开发者的角度,还是仅仅作为最终用户从使用体验上来说,Windows都可以算是垃圾中的战斗机: 没有shell . 响 ...

  9. 彻底弄明白之java多线程中的volatile

    一. volatite 简述 Java 语言提供了一种稍弱的同步机制,即 volatile 变量.用来确保将变量的更新操作通知到其他线程,保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新. ...

  10. TC SRM 593 DIV2 1000

    很棒的DP,不过没想出,看题解了..思维很重要. #include <iostream> #include <cstdio> #include <cstring> ...