1、Configuraion类
1) 负责管理hibernate的配置信息2) 读取hibernate.cfg.xml
3) 加载hibernate.cfg.xml配置文件中配置的驱动,url,用户名,密码,连接池。
4) 管理*.hbm.xml对象关系文件。
示例:Configuration configuration = new Configuration().configure();
2、SessionFactory接口
1) 缓存sql语句和其他数据2) 重量级的类,一般是单例模式保证只有一个SessionFactory实例
示例:
public final class SessionUtils { private static SessionFactory sessionFactory = null; private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); private SessionUtils() { } static{ sessionFactory=new Configuration().configure().buildSessionFactory(); } //获取新的session public static Session OpenSession(){ return sessionFactory.openSession(); } //获取和线程相关的session public static Session getCurrentSession(){ Session session = threadLocal.get(); if (session==null) { session = sessionFactory.openSession(); threadLocal.set(session); } return session; } }
3) 一个数据库创建一个SessionFactory
4) 通过SessionFactory接口获取Session实例
openSession() 是获取一个新的session
getCurrentSession () 获取和当前线程绑定的session,在同一个线程中,我们获取的session是同一session,这样可以利于事务控制。
使用需要配置:
<property name="current_session_context_class">thread</property>
用下面代码测试:
3、session接口
1) 它的主要功能和作用是:Session一个实例代表与数据库的一次操作(当然一次操作可以是crud组合)
Session实例通过SessionFactory获取,用完需要关闭。
Session是线程不同步的(不安全),因此要保证在同一线程中使用,可以用getCurrentSessiong()。
Session可以看做是持久化管理器,它是与持久化操作相关的接口
2) get和load方法比较
如果查询不到数据,get 会返回 null,但是不会报错, load 如果查询不到数据,则报错 ObjectNotFoundException
使用get 去查询数据,(先到一级/二级)会立即向db发出查询请求(select ...), 如果你使用的是 load查询数据,(先到一级、二级)即使查询到对象,返回的是一个代理对象,如果后面没有使用查询结果,它不会真的向数据库发select ,当程序员使用查询结果的时候才真的发出select ,这个现象称为懒加载(lazy)
通过修改配置文件,可以取消懒加载
<class name="Employee" lazy="false" table="employee">
4、query接口
通过query可以完成更加复杂的查询任务.
例子说明:
public static void main(String[] args) { Session session = SessionUtils.getCurrentSession(); Transaction transaction = null; try { transaction = session.beginTransaction(); //Employee是类名不是表名 Query query = session.createQuery("from Employee where id=1"); //封装 List<Employee> list = query.list(); for (Employee employee : list) { System.out.println(employee.getName()); } transaction.commit(); } catch (Exception e) { if (transaction!=null) { transaction.rollback(); } throw new RuntimeException(e.getMessage()); } }
相关推荐
菜鸟学SSH-v1.0.pdf
菜鸟学架各类服务器-E书,学习吧!好东西大家看看
职场菜鸟升职记----完整版 描述了一个编程菜鸟一年升职到项目经理的故事,和《疯狂的程序员》有些类似
基本安卓开发环境搭建,欢迎大家提意见,谢谢。
java菜鸟学习第一步-java基础语法,学习一门语言先从语法开始学起,学好基础才能深入的学习编程
hello Word 创建实例!
关于小米手机开发运行环境搭建
安卓虚拟运行环境搭建,谢谢
菜鸟也能变凤凰--一个职场新人的述职报告(doc 14).doc
股市菜鸟必读----“笑傲股市”学习笔记.pdf
ssh框架中的hibernate,以及ssh框架整合的实例,该实例比较适合初学者
SSH之路 其实我只想说的是我是一只对Java编程来说不折不扣的菜鸟,原先最网页前端开发的我最近迷上了底层代码开发,于是开始自学java编程,在同事同学的建议下,选择了SSH。写这些日志的原因只是想把自己这段自学的...
菜鸟少走弯路,快速运行第一个hibernate!祝你成功!
swift菜鸟入门视频教程-09-类和结构体
菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华菜鸟成长手册2009——CPU-内存-硬盘篇 - 硬件知识精华...
python菜鸟快乐游戏编程_pygame 演讲人 202x-11-11 2020 Python菜鸟快乐游戏编程-pygame-课件PPT模板全文共14页,当前为第1页。 目录 contents 第4章pygame基础知识 第5章植物大战僵尸 第1章python菜鸟快乐游戏编程_...
菜鸟学T-SQL与C# 增删改查 菜鸟学T-SQL与C# 增删改查 菜鸟学T-SQL与C# 增删改查 菜鸟学T-SQL与C# 增删改查 菜鸟学T-SQL与C# 增删改查
新手入门 Linux菜鸟必学的60个命令-转载Linux必学命令