hibernate的核心类和接口

① Configuration 类
它的用处是:

  1. 读取hibernate.cfg.xml
  2. 管理对象关系映射文件
  3. 加载hibernate 的驱动,url ,用户…
  4. 管理hibernate配置信息

② hibernate.cfg.xml
③ 对象关系映射文件
④ SessionFactory (会话工厂)

  1. 可以缓存sql语句和数据(称为session级缓存)!!
  2. 是一个重量级的类,因此我们需要保证一个数据库,有一个SessionFactroy

这里我们讨论一个通过SessionFactory 获取 Session的两个方法 openSession() 一个 getCurrentSession();

  1. openSession() 是获取一个新的session
  2. getCurrentSession () 获取和当前线程绑定的session,换言之,在同一个线程中,我们获取的session是同一session,这样可以利于事务控制
    如果希望使用 getCurrentSession 需要配置 hibernate.cfg.xml中配置.
  3. 如何选择
    原则:
    ①如果需要在同一线程中,保证使用同一个Session则,使用getCurrentSession()
    ②如果在一个线程中,需要使用不同的Session,则使用opentSession()
  4. 通过 getCurrentSession() 获取的session在事务提交后,会自动关闭,通过openSession()获取的session则必须手动关闭
  5. 如果是通过getCurrentSession() 获取 sesssion ,进行查询需要事务提交.

全局事务和本地事务

jndi

  • 如何确定你的session有没有及时关闭
    windows cmd netstat –an [oracle 1521 mysql 3306 sql server 1433]
    linux/unix netstat –anp top

⑤ session接口
它的主要功能和作用是:

  1. Session一个实例代表与数据库的一次操作(当然一次操作可以是crud组合)
  2. Session实例通过SessionFactory获取,用完需要关闭。
  3. Session是线程不同步的(不安全),因此要保证在同一线程中使用,可以用getCurrentSessiong()。
  4. Session可以看做是持久化管理器,它是与持久化操作相关的接口
  • get vs load
  1. 如果查询不到数据,get 会返回 null,但是不会报错, load 如果查询不到数据,则报错ObjectNotFoundException
  2. 使用get 去查询数据,(先到一级/二级)会立即向db发出查询请求(select …), 如果你使用的是 load查询数据,(先到一级、二级))即使查询到对象,返回的是一个代理对象,如果后面没有使用查询结果,它不会真的向数据库发select ,当程序员使用查询结果的时候才真的发出select ,这个现象我们称为懒加载(lazy)
  3. 通过修改配置文件,我们可以取消懒加载
  4. 如何选择使用哪个: 如果你确定DB中有这个对象就用load(),不确定就用get()(这样效率高)
  • 我们对获取session的工具类,升级,让它可以直接返回 全新的session和线程相关的session
    代码:
package com.hsp.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
final public class HibernateUtil { //SqlHelper private static SessionFactory sessionFactory=null;//使用线程局部模式private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();private HibernateUtil(){};static {sessionFactory=new Configuration().configure("com/hsp/config/hsp.cfg.xml").buildSessionFactory();}//获取全新的全新的sesessionpublic static Session openSession(){return sessionFactory.openSession();}//获取和线程关联的sessionpublic static Session getCurrentSession(){Session session=threadLocal.get();//判断是否得到if(session==null){session=sessionFactory.openSession();//把session对象设置到 threadLocal,相当于该session已经和线程绑定threadLocal.set(session);}return session;}}
  • query接口
    通过query接口我们可以完成更加复杂的查询任务.
    举例: 通过用户来查询数据.
    快如入门 :
     Session session=HibernateUtil.getCurrentSession();Transaction ts=null;try {ts=session.beginTransaction();//获取query引用[这里 Employee不是表.而是domain类名]//[where 后面的条件可以是类的属性名,也可以是表的字段,安照hibernate规定,我们还是应该使用类的属性名.]Query query=session.createQuery("from Employee where namehsp='shunping'");//通过list方法获取结果,这个list会自动的将封装成对应的domain对象//所以我们jdbc进行二次封装的工作没有.List<Employee> list=query.list();for(Employee e: list){System.out.println(e.getAaaid()+" "+e.getHiredate());}ts.commit();} catch (Exception e) {if(ts!=null){ts.rollback();}throw new RuntimeException(e.getMessage());}finally{//关闭sessionif(session!=null&&session.isOpen()){session.close();}}
  • criteria 接口的简单使用
    快如入门:
Session session=HibernateUtil.getCurrentSession();Transaction ts=null;try {ts=session.beginTransaction();Criteria cri=session.createCriteria(Employee.class).setMaxResults(2).addOrder(Order.desc("id") );List<Employee> list=cri.list();for(Employee e: list){System.out.println(e.getAaaid());}ts.commit();} catch (Exception e) {if(ts!=null){ts.rollback();}throw new RuntimeException(e.getMessage());}finally{//关闭sessionif(session!=null&&session.isOpen()){session.close();}}
  • 如何使用eclipse进行hibernate 快速开发
    我们以前面讲的对employee表进行crud为例,演示具体用法

手动配置:
db(table )-> 手写domain对象->对象关系映射文件
现在我们希望用工具完成 Domain对象和 关系映射文件的工作.

  1. 创建web项目
  2. 通过myeclipse 提供 数据库浏览器连接到我们的oracle数据库(多人开发)
  • 这里请大家小心,如果我们测试

你们把自己的数据库通过 db 浏览器连接上

引入hibernate开发包.,同时自动创建hibernate.cfg.xml文件,如果希望把hibernate开发包升级,我们可以重新引入包.

下面我们使用myeclipse提供的逆向工程,自动的创建domain类和对象关系映射文件.

java对象(属性) <---------1. java类型 2. hibernate types-------------> 表字段类型

拉通练习一把.

hibernate教程笔记2相关推荐

  1. Hibernate学习笔记(一)----针对不同的数据库不同的配置

    Hibernate初学笔记 l Hibernate初步配置: 1 新建项目 2 学习建立user-library-hibernate,并加入相应的jar包(hibernate核心jar包,lib下的所 ...

  2. hibernate学习笔记二

    上一篇关于hibernate学习笔记一,主要是作为hibernate的入门知识.没有和spring发生任何关系,这一篇我将把spring集成进去,看spring如何管理hibernate,还有和未使用 ...

  3. 台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)

    台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix) matrix left division左除:\ or mldivide() solvi ...

  4. 台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)

    台湾国立大学郭彦甫Matlab教程笔记(21) today: linear equation 线性方程 linear system 线性系统 我们先看第一部分 linear equation 假定一个 ...

  5. 台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric)

    台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric) symbolic vs. numeric符号法和数值法的区别对比 symbolic 1)advantages ...

  6. 台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration

    台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration 数值积分 calculating the numerical value of a definite inte ...

  7. 台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numerical differentiation

    台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numeric differentiation 复习:diff()函数用来计算vector前后 entry的差异 数值微分继续 various ...

  8. 台湾国立大学郭彦甫Matlab教程笔记(15)polynomial integration 多项式积分

    台湾国立大学郭彦甫Matlab教程笔记(15) Polynomial integration多项式积分 一个多项式和它的积分如下 MATlAB中如何计算积分? polynomial integrati ...

  9. 台湾国立大学郭彦甫Matlab教程笔记(14)polynomial differentiation多项式微分

    台湾国立大学郭彦甫Matlab教程笔记(14) today: polynomial differentiation and integration多项式微分与积分 numerical differen ...

  10. 台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下

    台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下 上文记录的是关于统计的图标的绘制 下面我们来到另一个模块:颜色 fill()填充函数 功能:某一个封闭曲线,图上特 ...

最新文章

  1. linux(ubuntu) 查看系统设备信息 命令
  2. 【论文解读】深度强化学习基石论文:函数近似的策略梯度方法
  3. Android OOM的解决方式
  4. ssl1715-计算面积【差积】
  5. luogu1168 中位数
  6. JQuery 之 跳出循环
  7. Ponemon:优化SIEM时所面临的挑战
  8. 易语言 钩子 (钩子HOOK与APIHOOK是不一样的)
  9. HihoCoder 1511: 树的方差(prufer序)
  10. Linux通过UUID挂载和卸载硬盘
  11. keil+c语言优化,KEIL编译器【C语言编译选项优化等级说明】
  12. Docker CE 安装教程
  13. 系统分析师-论文(论系统分析中对用户需求的把握、论信息系统开发方法及其应用)
  14. 基于阿里云产品和开源Hudi结合
  15. WebRTC-NACK、Pacer和拥塞控制和FEC
  16. 打印系统开发(6)——纸张尺寸对照表如下
  17. 油藏弹性存储量计算公式_各类油藏采收率计算公式
  18. twitter跳过手机验证_安卓怎么注册推特账号(twitter跳过手机验证)
  19. flutter无法抓包
  20. 中国水产科学研究院教授黄樟翰走进伊宅购集团考察伊家田园项目

热门文章

  1. Ubuntu 解压缩
  2. Asp.net MVC的ViewData与ViewBag以及TemplateData的使用与区别
  3. Ubuntu14.04桌面版 apt-get 方式安装LNMP
  4. PHP--变量部分知识点
  5. 浅谈HTML5之一:语法的改变
  6. LVS+KeepAlived,RabbitMQ高可用负载均衡
  7. /var/spool/clientmqueue/下的大文件
  8. Android中文API(125) —— VideoView
  9. 无线AP与无线路由器都有些什么区别?(一)
  10. 关于ASp.NEt方面的好书,不得不看啊!!!