- 浏览: 699852 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (362)
- java基础 (33)
- html/css+div/javascript (17)
- Ajax/XML/JSON/XSL (7)
- JQuery (11)
- Extjs (1)
- JSP/Servlet (19)
- MVC模式 (4)
- struts 1 (17)
- Struts 2.3.4 (17)
- Spring 3.2 (26)
- Springmvc (3)
- Hibernate 4.1 (21)
- ibatis (6)
- Velocity模板语言 (2)
- Rose框架 (5)
- EJB (1)
- JUnit测试 (2)
- 数据库DB (24)
- 重构 / 设计模式 (3)
- 开发工具IDE (37)
- 数据结构与算法设计 (3)
- Android (12)
- Linux (4)
- bug集合 (29)
- 缓存技术(redis) (3)
- Lucene全文索引 (15)
- maven3.0.5 (4)
- 小工具集合 (18)
- 面试题 (5)
- 闲聊 (11)
- 其他 (4)
- 接口API (2)
- work (2)
- Flex (0)
- JMS (1)
- 开源项目集合 (1)
- 技术博客 (1)
- 分类04 (0)
- 分类05555 (0)
最新评论
-
小小小羊:
好屌...
java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$Refle -
liubinli2005:
这个可以脱底spring。单独使用吗?
DAO层:jade -
cangbaotu:
我觉得对于开发者来说,能脚本化编写爬虫是一件挺开心的事情( ̄▽ ...
网页爬取 -
asjava:
很好的文章, 但每段代码清单都重复了一次.
spring 事务 -
xia635317478:
jethypc 写道验证码的session无法传过去啊 还是我 ...
登陆验证码(struts2实现)
整体流程
1:通过configuration来读cfg.xml文件
2:得到SessionFactory 工厂
3:通过SessionFactory 工厂来创建Session实例
4:通过Session打开事务
5:通过session的api操作数据库
6:事务提交
7:关闭连接
为什么要用:
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作。
3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
两种取得session方法:
openSession和getCurrentSession区别
openSession:永远创建新的session 需手动close,事务提交不会自动close
getCurrentSession:事务没提交之前。在上下文找,有可能返回旧的session,事务提交了,会得到新的session。事务提交,session自动close
上下文,在配置文件指定:
<property name="current_session_context_class">thread</property>
jta | thread | managed | custom.Class
thread常用—》必须指明current_session_context_class,否则抛异常
a.sessionFactory.openSession();
b.sessionFactory.getCurrentSession();
一、没有通过applicationContext.xml配置文件加载hibernate.cfg.xml,而是通过
自定义的类HibernateUtil.java创建sessionFactory对象
2.HibernateUtil.java
二、通过配置Spring的applicationContext.xml文件加载,spring对Hibernate的支持(HibernateTemplate)
1.applicationContext.xml
2.HibernateTemplate
1:通过configuration来读cfg.xml文件
2:得到SessionFactory 工厂
3:通过SessionFactory 工厂来创建Session实例
4:通过Session打开事务
5:通过session的api操作数据库
6:事务提交
7:关闭连接
为什么要用:
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作。
3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
两种取得session方法:
openSession和getCurrentSession区别
openSession:永远创建新的session 需手动close,事务提交不会自动close
getCurrentSession:事务没提交之前。在上下文找,有可能返回旧的session,事务提交了,会得到新的session。事务提交,session自动close
上下文,在配置文件指定:
<property name="current_session_context_class">thread</property>
jta | thread | managed | custom.Class
thread常用—》必须指明current_session_context_class,否则抛异常
a.sessionFactory.openSession();
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); //创建新的session对象 session.beginTransaction(); session.save(t); session.getTransaction().commit(); session.close() ; //关闭session对象
b.sessionFactory.getCurrentSession();
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); //获取当前"上下文"中的session对象 session.beginTransaction(); session.save(t); Session session2 = sessionFactory.getCurrentSession(); System.out.println(session == session2); //true session.getTransaction().commit(); //事务提交自动关闭该session System.out.println(session == session2); //false
一、没有通过applicationContext.xml配置文件加载hibernate.cfg.xml,而是通过
自定义的类HibernateUtil.java创建sessionFactory对象
1.TeamDaoHibernate package com.org.momo.dao.hibernateTemplate; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import com.org.momo.bean.PageInfo; import com.org.momo.bean.Team; import com.org.momo.dao.TeamDao; import com.org.momo.util.HibernateUtil; public class TeamDaoHibernate implements TeamDao { private SessionFactory sessionFactory; public TeamDaoHibernatenotused() { sessionFactory = HibernateUtil.getSessionFactory(); } public void insert(Team team) throws Exception { Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session.save(team); transaction.commit(); session.close() ; } public void deleteById(Integer id) throws Exception { Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); String hql = "delete from Team where id=?"; Query query = session.createQuery(hql); query.setInteger(0, id); query.executeUpdate(); transaction.commit(); session.close(); } public void update(Team team) throws Exception { Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session.merge(team); transaction.commit(); session.close(); } public List<Team> findAll() throws Exception { List<Team> teams = null; Session session = sessionFactory.openSession(); Query query = session.createQuery("from Team"); teams = query.list(); session.close(); return teams; } public Team findById(Integer id) throws Exception { Team team = null; Session session = sessionFactory.openSession(); Query query = session.createQuery("from Team where id=?"); query.setInteger(0, id); team = (Team)query.uniqueResult(); session.close(); return team; } public List<Team> findAllPage(PageInfo pageInfo) throws Exception { List<Team> teams = null; Session session = sessionFactory.openSession(); Query queryTotal = session.createQuery("select count(id) from Team"); int rowCount = ((Long)queryTotal.uniqueResult()).intValue() ; //先转换为Long 在转换为int int pageTotal = rowCount/pageInfo.getPageRows(); if(rowCount%pageInfo.getPageRows() > 0) { pageTotal++; } pageInfo.setPageTotal(pageTotal); Query query = session.createQuery("from Team"); query.setFirstResult(pageInfo.getPageRows()*(pageInfo.getCurrentPage()-1)); query.setMaxResults(pageInfo.getPageRows()); teams = query.list(); session.close(); return teams; } }
2.HibernateUtil.java
package com.org.momo.util; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; public class HibernateUtil { private static final SessionFactory sessionFactory; static{ try{ //初始化hibernate.cfg.xml配置,建立数据库连接 sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); }catch(Exception e){ e.printStackTrace() ; throw new ExceptionInInitializerError(e) ; } } public static SessionFactory getSessionFactory(){ return sessionFactory ; } }
二、通过配置Spring的applicationContext.xml文件加载,spring对Hibernate的支持(HibernateTemplate)
1.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="teamService" class="com.org.momo.service.impl.TeamServiceImpl"> <property name="teamDao" ref="teamDao"></property> </bean> <bean id="adminService" class="com.org.momo.service.impl.AdminServiceImpl"> <property name="adminDao" ref="adminDao"></property> </bean> <bean id="logService" class="com.org.momo.service.impl.LogServiceImpl"> <property name="logDao" ref="logDao"></property> </bean> <bean id="studentService" class="com.org.momo.service.impl.StudentServiceImpl"> <property name="studentDao" ref="studentDao"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="teamDao" class="com.org.momo.dao.hibernateTemplate.TeamDaoHibernateTemplate"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="adminDao" class="com.org.momo.dao.hibernateTemplate.AdminDaoHibernateTemplate"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="logDao" class="com.org.momo.dao.hibernateTemplate.LogDaoHibernateTemplate"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean id="studentDao" class="com.org.momo.dao.hibernateTemplate.StudentDaoHibernateTemplate"> <property name="hibernateTemplate" ref="hibernateTemplate"/> </bean> <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"> </bean> </beans>
2.HibernateTemplate
package com.org.momo.dao.hibernateTemplate; import java.sql.SQLException; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.org.momo.bean.PageInfo; import com.org.momo.bean.Team; import com.org.momo.dao.TeamDao; public class TeamDaoHibernateTemplate extends HibernateDaoSupport implements TeamDao { public void deleteById(Integer id) throws Exception { Team team = this.getHibernateTemplate().load(Team.class, id) ; this.getHibernateTemplate().delete(team) ; } public List<Team> findAll() throws Exception { return this.getHibernateTemplate().loadAll(Team.class); } public Team findById(Integer id) throws Exception { List<Team> teams = this.getHibernateTemplate().find("from Team where id=?",id) ; if(!teams.isEmpty()){ return teams.get(0) ; }else{ return null; } } public void insert(Team team) throws Exception { this.getHibernateTemplate().save(team) ; } public void update(Team team) throws Exception { this.getHibernateTemplate().update(team); } public List<Team> findAllPage(final PageInfo pageInfo) throws Exception { List<Team> teams = null; int rowTotal = ((Long)this.getHibernateTemplate().find("select count(id) from Team").get(0)).intValue(); int pageTotal = rowTotal/pageInfo.getPageRows(); if(rowTotal%pageInfo.getPageRows() > 0) { pageTotal++; } pageInfo.setPageTotal(pageTotal); teams = this.getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery("from Team"); query.setFirstResult(pageInfo.getPageRows()*(pageInfo.getCurrentPage()-1)); query.setMaxResults(pageInfo.getPageRows()); return query.list(); } }); return teams; } }
发表评论
-
hibernate缓存总结
2013-09-05 09:54 743hibernate缓存总结 Hibernat ... -
Hibernate原理
2013-09-05 09:10 1184Hibernate原理 1.hibernate ... -
getHibernateTemplate().save和super.getHibernateTemplate().merge
2012-12-05 15:16 2996代码1_save: super.getHibernate ... -
分页查询
2012-12-03 16:57 842HibernateTemplate提供了非常多的常用方法来完成 ... -
mappingResource属性和mappingDirectoryLocations属性的使用
2012-11-19 16:54 637mappingResource属性和mappingDirect ... -
S2SH整合
2012-11-12 16:08 1075Struts2_spring_Hibernate整合 MyE ... -
spring中配置log4j
2012-11-10 16:30 1646log4j 和 slf4j slf4j和log4j用于做日志 ... -
log4j 和slf4j
2012-11-11 20:55 868http://sishuok.com/forum/blogPo ... -
Hibernate两级缓存
2012-10-29 17:01 764Hibernate两级缓存 一级缓存就是Session级别 ... -
数据加载 load get list iterator
2012-10-07 11:14 1069Hibernate的优化-数据加载 除了对映射文件的配置外 ... -
栏目、帖子、回复(设置导航ManyToOne便于操作 QBC/QBE语句)02
2012-10-06 11:39 1076栏目、帖子、回复(设置导航ManyToOne便于操作QBC/Q ... -
栏目、帖子、回复(设置导航便于操作)HQL使用01
2012-10-06 11:28 956栏目、帖子、回复(设置导航ManyToOne便于操作 HQL语 ... -
Many-To-Many (学生、课程、分数)
2012-10-05 17:41 1335Many-To-Many (学生、课程、分数) 多对多: 一个 ... -
树状结构Tree
2012-10-05 17:09 1154树状结构Tree 一、部门类Org.java impo ... -
CUDR_Fetch 和 Cascade
2012-10-05 16:05 4702CUDR_Fetch 和 Cascade 1.Fetch ... -
OneToOne 、OneToMany 、 ManyToMany
2012-10-05 10:31 3529OneToOne OneToMany ManyToMa ... -
ID生成策略
2012-10-04 16:18 3908ID生成策略 1.XX.hbm.xml方 ... -
对象的几种状态
2012-10-04 14:10 1397对象的几种状态 1.Transient 刚new一个 ... -
load 和 get的区别
2012-10-04 11:49 1237session加载数据库数据时,load 和 get 1. ... -
Hibernate 注解和配置文件由ORM框架连接库
2012-10-02 12:30 4191Hibernate 注解和配置文件由ORM框架连接库 xm ...
相关推荐
**Hibernate实现原理模拟** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将通过模拟Hibernate的实现原理,帮助开发者深入理解其工作方式,以便更好地运用到实际...
Hibernate orm 实现原理 主要讲解了关于hibernate 的一些知识
### Hibernate框架ORM的实现原理详解 #### 一、ORM概念及意义 **ORM**,即**对象关系映射**(Object Relational Mapping),是一种程序技术,用于将关系型数据库中的数据映射到对象上,以便于程序员能够以面向对象的...
【标题】:“Hibernate、Spring和Struts工作原理及使用理由” 【内容】: Hibernate是一个流行的Java持久化框架,它的核心工作原理主要包括以下步骤: 1. **读取并解析配置文件**:Hibernate通过读取hibernate....
本篇文章将详细探讨如何利用JSF与Hibernate相结合来实现批量删除功能,以及在CRUD(创建、读取、更新和删除)操作中的应用。 首先,我们需要理解JSF的工作原理。JSF是一个基于组件的MVC(Model-View-Controller)...
Struts、Spring和Hibernate是Java开发中非常著名的三个开源框架,它们共同构成了经典的"SSH...通过阅读《Struts + Spring + Hibernate工作原理解析》文档,你可以更系统地掌握这些知识,为你的项目开发带来极大的帮助。
Spring+Struts+Hibernate(SSH)是Java EE领域中一种经典的开源框架组合,用于构建企业级的Web应用程序。这个框架组合充分利用了各自的优势,实现了松散耦合的三层架构,提高了代码的可重用性和可维护性。 首先,让...
### Hibernate原理深度解析 #### Hibernate为何重要? Hibernate作为一款开源的对象关系映射(ORM)框架,在Java开发领域占据着举足轻重的地位。其重要性体现在以下几个方面: 1. **资源管理**:Hibernate通过...
**Hibernate4基本实现原理** Hibernate 是一款流行的 Java ORM(对象关系映射)框架,它允许开发者将数据库操作与 Java 对象交互,简化了数据库应用程序的开发。本文将深入解析 Hibernate4 的基本实现流程,帮助...
#### 六、Hibernate实现原理剖析 对于想要深入了解Hibernate内部机制的开发者,《Hibernate4实战》提供了关于Hibernate如何工作的深度解析。这包括缓存机制、懒加载、代理模式以及查询优化等方面的知识点。通过理解...
在"hibernate+mysql基本原理"示例中,可能包含了一个简单的用户管理系统的实现,包括用户注册、登录、查询等功能。这个例子旨在帮助初学者理解如何在实际项目中整合Hibernate和MySQL,以及如何在JSP页面上展示数据。...
### Hibernate 实现分页查询详解 #### 一、引言 在进行数据库操作时,为了提高用户体验和系统性能,分页查询是一项非常重要的技术。...以上就是关于Hibernate实现分页查询的具体介绍,希望对大家有所帮助。
【Hibernate工作原理】 Hibernate是一个ORM(Object-Relational Mapping)框架,它将Java对象与关系数据库的数据进行映射,实现了对象与数据库之间的一套映射规则。其主要工作流程包括: 1. 加载并解析配置文件和...
本项目通过Java的反射和注解技术,试图模拟Hibernate的部分功能,以便更好地理解和掌握ORM的核心原理。 1. **Java反射**: 反射是Java提供的一种强大的动态类型特性,允许程序在运行时获取类的信息(如类名、属性、...
### Hibernate原理详细解说 #### Hibernate概述 Hibernate 是一个开源的对象关系映射(Object Relational Mapping,简称 ORM)框架,用于 Java 应用程序与关系型数据库之间的交互。它通过将对象模型与数据库模型...
3. Hibernate工作原理: Hibernate 是一个流行的Java ORM(Object-Relational Mapping)框架,它简化了数据库操作,使开发者能够以面向对象的方式处理数据。其工作流程如下: - 应用程序创建SessionFactory,这是...
**Hibernate原理解析** Hibernate是一个开源的Java语言下的对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。通过Hibernate,开发者可以将数据库操作与业务逻辑解耦,使得代码更加...
【Hibernate原理与实现简介】 Hibernate 是一款流行的Java平台上的对象关系映射(ORM)框架,它的主要作用是简化数据库操作,将复杂的SQL语句和Java对象之间的转换工作自动化,从而提高开发效率。Hibernate通过将...
在"Struts2+Hibernate实现新闻发布系统"中,Action类可能被用来接收用户发布的新闻信息,如标题、内容、发布日期等,然后调用相应的服务或DAO进行处理。 Struts2还提供了拦截器(Interceptor)机制,可以添加自定义...
下面将详细解释Hibernate的工作原理,以及为何在开发中需要使用它。 **工作原理:** 1. **读取并解析配置文件**:Hibernate首先读取hibernate.cfg.xml配置文件,从中获取数据库连接信息、方言设置等关键配置。 2....