Configuration类负责管理Hibernate的配置信息,Hibernate运行时需要获取一些底层的信息。如:数据库URL,数据库用户,数据库密码,数据库驱动类,数据库适配器等;
当我们调用:
new Configuration().configure()
Hibernate会根据当前的CLASSPATH找到hibernate.cfg.xml(Hibernate.properties)并将其加载到内存中,作为后面操作的基础配置;
Configuration类一般只有在获取SessionFactory时需要涉及,当SessionFactory实例创建之后,由于配置的基本信息已经由Hibernate绑定在返回的SessionFactory之中,因此,一般情况下无需再对其进行操作!
SessionFactory负责创建session实例,可以通过Configuration实例构建SessionFactory:
new Configuration().configure().buildSessionFactory()
Configuration实例会根据当前数据库配置信息,构造SessionFactory实例并返回,SessionFactory一旦构造完毕,即被赋予特定的配置信息;之后的Configuration实例对象不会影响到已经创建的SessionFactory实例!
如果需要改变SessionFactory实例,就需要从Configuration实例重新构建一个SessionFactory实例,同理,如果应用中需要访问多个数据库,那么针对每个数据库都应该建立想对应的SessionFactory实例;
SessionFactory中保存着数据库配置的所有映射关系,同时也负责维护当前的二级缓存和StatementPool,由此可见,SessionFactory的创建过程会很复杂且代价高昂,所有我们在系统设计中应充分的考虑到SessionFactory的重用策略,SessionFactory采用了线程安全设计,可由多个线程并发调用,大多数情况下,一个应用中针对一个数据库共享一个SessionFactory就可以;
Session是Hibernate持久化操作的基础,Hibernate的Session与Web中的HttpSession并没有任何关系,Hibernate Session之与Hibernate就像JDBC Connection与JDBC之间的关系;
Session是Hibernate持久化管理器的核心,通过了很多持久化方法,我们可以根据这些方法完成对象的增删改查(CRUD);
Save():
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Tuser tUser = new Tuser();
tUser.setName("keith");
session.save(tUser);
session.getTransaction().commit();
输出的SQL:
Hibernate: insert into tUser(uName) values(?)
Get():
Tuser tUser = (Tuser) session.get(Tuser.class, 1);
输出的SQL:
Hibernate:
select tuser0_.uId as uId0_0_, tuser0_.uName as uName0_0_ from tUser tuser0_ where tuser0_.uId=?
Delete():
Tuser tUser = (Tuser) session.get(Tuser.class, 1);
session.delete(tUser);
输出的SQL:
Hibernate: select tuser0_.uId as uId0_0_,tuser0_.uName as uName0_0_ from tUser tuser0_ where tuser0_.uId=?
Hibernate: delete from tUser where uId=?
删除的操作还采用HQL方式:
String hql = "delete Tuser where id = 2";
Query query = session.createQuery(hql);
query.executeUpdate();
输出的SQL:
Hibernate: delete from tUser where uId=2
Hibernate3中我们必须通过Query或Criteia接口进行数据查询:
Query接口:
String hql = "from Tuser where uName like ?";
Query query = session.createQuery(hql);
query.setParameter(0, "keith");
List list = query.list();
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Tuser tUser = (Tuser) iterator.next();
System.out.println(tUser.getuName()+" "+tUser.getuId());
}
输出SQL:
Hibernate: select tuser0_.uId as uId0_,tuser0_.uName as uName0_ from tUser tuser0_ where tuser0_.uName like ?
输出结果: keith 3
Criteria接口:
Criteria criteria = session.createCriteria(Tuser.class);
criteria.add(Expression.eq("uName", "keith"));
List list = criteria.list();
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Tuser tUser = (Tuser) iterator.next();
System.out.println(tUser.getuName()+" "+tUser.getuId());
}
输出SQL:
Hibernate: select this_.uId as uId0_0_,this_.uName as uName0_0_ from tUser this_ where this_.uName=?
输出结果:keith 3
Query和Criteria作为Hibernate数据查询接口,都提供了对查询条件的封装机制,两者之间的不同之处在于:Query面向HQL和Native SQL,而Criteria则提供了面向对象的查询模式;
分享到:
相关推荐
4.1 Hibernate基础语义 4.2 基础配置 4.3 Hibernate O/R映射 4.4 数据关联 4.5 Hibernate数据检索 4.6 HQL实用技术 4.7 自定义持久化实现 第5章 Hibernate高级特性 5.1 Hibernate持久化实现 5.2 Hibernate...
4.1 Hibernate基础语义 4.2 基础配置 4.3 Hibernate O/R映射 4.4 数据关联 4.5 Hibernate数据检索 4.6 HQL实用技术 4.7 自定义持久化实现 第5章 Hibernate高级特性 5.1 Hibernate持久化实现 5.2 Hibernate...
第一段代码 ....................................................................................................19 Hibernate 基础语义 ......................................................................
自己的hibernate笔记,从一个最基本的对象关系映像自动化程序,了解 Hibernate 组成的基本元素,并进一步了解 Hibernate 的基础语义、配置等概念
Spring 基础语义 Dependency Injection 依赖注入的几种实现类型 Type1 接口注入 Type2 设值注入 Type3 构造子注入 几种依赖注入模式的对比总结 Spring Bean封装机制 Bean Wrapper Bean Factory ...
* Struts/Hibernate/Spring Framework 基础:掌握 Struts、Hibernate 和 Spring Framework 等整合框架的使用。 * MyBatis/容器基础:掌握 MyBatis 和容器技术的使用。 * Tomcat/Jetty/WebLogic/WebSphere/WildFly ...
这份java面试题库涵盖了java面试的所有方面,包括Core Java、OOAD & UML、XML、SQL、JDBC & Hibernate、Web、EJB & Spring、数据结构& 算法& 计算机基础、C++等多个领域。该题库共分为10个部分,每个部分都涵盖了...
作者对一些新的概念和知识理解也难免有误,有些概念和语义把握的不是很准,希望在这方面有经验和了解的朋 友批评指正,欢迎多提意见。 因为JBOSS EJB3.0 产品常未成熟,本教程随着新产品的推出将有所改动...
11 ibatis 基础语义...................................................................................................... 16 XmlSqlMapClientBuilder................................................
第一篇 jBPM工作流开发基础 1 第1章 工作流基础 2 1.1 工作流概念 2 1.1.1 工作流管理思想之于企业现代化管理 2 1.1.2 工作流技术在企业中的应用 5 1.1.3 如何从一个开发者的角度看工作流技术 6 1.2 工作流管理系统...
免费的在线文档提供了足够多有关基础语法的句法和语义的资料,不过没有详细解释ANTLR的相关概念。在本书中,识别语言的语法模式和将其表述为ANTLR语法的内容是独一无二的。贯穿全书的示例能够在构建语言类应用程序...
9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用 ...
9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用 ...
9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 9.5.7. 插入事务操作 9.5.8. 结合AspectJ使用 @Transactional 9.6. 编程式...
9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 ...
9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 ...
其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...