`

Hibernate基础语义

阅读更多

 

  • Configuration

 

Configuration类负责管理Hibernate的配置信息,Hibernate运行时需要获取一些底层的信息。如:数据库URL,数据库用户,数据库密码,数据库驱动类,数据库适配器等;

当我们调用:

 

new Configuration().configure()

 

 Hibernate会根据当前的CLASSPATH找到hibernate.cfg.xml(Hibernate.properties)并将其加载到内存中,作为后面操作的基础配置;

Configuration类一般只有在获取SessionFactory时需要涉及,当SessionFactory实例创建之后,由于配置的基本信息已经由Hibernate绑定在返回的SessionFactory之中,因此,一般情况下无需再对其进行操作!

 

  • 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

 

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则提供了面向对象的查询模式;

1
3
分享到:
评论

相关推荐

    深入浅出Hibernate中文版 part1

    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...

    深入浅出Hibernate中文版 part2

    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...

    Hibernate开发指南

    第一段代码 ....................................................................................................19 Hibernate 基础语义 ......................................................................

    hibernate笔记

    自己的hibernate笔记,从一个最基本的对象关系映像自动化程序,了解 Hibernate 组成的基本元素,并进一步了解 Hibernate 的基础语义、配置等概念

    Spring开发指南

    Spring 基础语义 Dependency Injection 依赖注入的几种实现类型 Type1 接口注入 Type2 设值注入 Type3 构造子注入 几种依赖注入模式的对比总结 Spring Bean封装机制 Bean Wrapper Bean Factory ...

    Java学习路线图.pdf

    * Struts/Hibernate/Spring Framework 基础:掌握 Struts、Hibernate 和 Spring Framework 等整合框架的使用。 * MyBatis/容器基础:掌握 MyBatis 和容器技术的使用。 * Tomcat/Jetty/WebLogic/WebSphere/WildFly ...

    java面试题(题库全).doc

    这份java面试题库涵盖了java面试的所有方面,包括Core Java、OOAD & UML、XML、SQL、JDBC & Hibernate、Web、EJB & Spring、数据结构& 算法& 计算机基础、C++等多个领域。该题库共分为10个部分,每个部分都涵盖了...

    ejb 3.0实用教程

    作者对一些新的概念和知识理解也难免有误,有些概念和语义把握的不是很准,希望在这方面有经验和了解的朋 友批评指正,欢迎多提意见。 因为JBOSS EJB3.0 产品常未成熟,本教程随着新产品的推出将有所改动...

    ibatis 开发指南(pdf)

    11 ibatis 基础语义...................................................................................................... 16 XmlSqlMapClientBuilder................................................

    JBPM4工作流应用开始指南.rar

    第一篇 jBPM工作流开发基础 1 第1章 工作流基础 2 1.1 工作流概念 2 1.1.1 工作流管理思想之于企业现代化管理 2 1.1.2 工作流技术在企业中的应用 5 1.1.3 如何从一个开发者的角度看工作流技术 6 1.2 工作流管理系统...

    antlr4权威指南

    免费的在线文档提供了足够多有关基础语法的句法和语义的资料,不过没有详细解释ANTLR的相关概念。在本书中,识别语言的语法模式和将其表述为ANTLR语法的内容是独一无二的。贯穿全书的示例能够在构建语言类应用程序...

    Spring 2.0 开发参考手册

    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. 使用 ...

    spring chm文档

    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. 使用 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    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. 编程式...

    Spring中文帮助文档

    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. 编程式事务管理 ...

    Spring API

    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. 编程式事务管理 ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...

Global site tag (gtag.js) - Google Analytics