- 浏览: 1524885 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (525)
- SEO (16)
- JAVA-EE-Hibernate (6)
- JAVA-EE-Struts (29)
- JAVA-EE-Spring (15)
- Linux (37)
- JAVA-SE (29)
- NetWork (1)
- CMS (14)
- Semantic Research (3)
- RIA-Flex (0)
- Ajax-Extjs (4)
- Ajax-Jquery (1)
- www.godaddy.com (0)
- SSH (34)
- JavaScript (6)
- SoftwareEngineer (9)
- CMMI (0)
- IDE-Myeclipse (3)
- PHP (1)
- Algorithm (3)
- C/C++ (18)
- Concept&Items (2)
- Useful WebSite (1)
- ApacheServer (2)
- CodeReading (1)
- Socket (2)
- UML (10)
- PowerDesigner (1)
- Repository (19)
- MySQL (3)
- SqlServer (0)
- Society (1)
- Tomcat (7)
- WebService (5)
- JBoss (1)
- FCKeditor (1)
- PS/DW/CD/FW (0)
- DesignPattern (11)
- WebSite_Security (1)
- WordPress (5)
- WebConstruction (3)
- XML|XSD (7)
- Android (0)
- Project-In-Action (9)
- DatabaseDesign (3)
- taglib (7)
- DIV+CSS (10)
- Silverlight (52)
- JSON (7)
- VC++ (8)
- C# (8)
- LINQ (1)
- WCF&SOA (5)
- .NET (20)
- SOA (1)
- Mashup (2)
- RegEx (6)
- Psychology (5)
- Stock (1)
- Google (2)
- Interview (4)
- HTML5 (1)
- Marketing (4)
- Vaadin (2)
- Agile (2)
- Apache-common (6)
- ANTLR (0)
- REST (1)
- HtmlAnalysis (18)
- csv-export (3)
- Nucth (3)
- Xpath (1)
- Velocity (6)
- ASP.NET (9)
- Product (2)
- CSS (1)
最新评论
-
lt26w:
理解成门面模式应该比较容易明白吧
FacadePattern-Java代码实例讲解 -
lt26w:
看下面的例子比较明白.
FacadePattern-Java代码实例讲解 -
javaloverkehui:
这也叫文档,别逗我行吗,也就自己看看。
HtmlCleaner API -
SE_XiaoFeng:
至少也应该写个注释吧。
HtmlCleaner API -
jfzshandong:
...
org.springframework.web.filter.CharacterEncodingFilter 配置
一直都很疑惑在spring框架中getSession与getHibernateTemplate的区别。相同的地方不用说大家都是调用数据库返回结果的。但为什么要这样有二个不同的兄弟呢。认真学习了一下(其实还是很粗略的)
从使用上看
getHibernateTemplate必须继承或实例HibernateDaoSupport当然包括sessionFactory
- @SuppressWarnings ( "unchecked" )
- public T get(String id) {
- T ret = (T) getHibernateTemplate().get(type, id);
- if (ret == null ) {
- throw new ObjectRetrievalFailureException(type,
- "can't get object with id " + id);
- }
- return ret;
- }
- public IResponseDataNPage findPageByCriteria(
- final DetachedCriteria detachedCriteria, final Order order,
- final int pageSize, final int startIndex) {
- return (IResponseDataNPage) getHibernateTemplate().execute(
- new HibernateCallback() {
- public Object doInHibernate(Session session)
- throws HibernateException {
- Criteria criteria = detachedCriteria
- .getExecutableCriteria(session);
- int totalCount = ((Integer) criteria.setProjection(
- Projections.rowCount()).uniqueResult())
- .intValue();
- criteria.setProjection( null );
- if (order != null )
- criteria.addOrder(order);
- if (pageSize> 0 && startIndex>= 0 )
- {
- criteria.setFirstResult(startIndex).setMaxResults(
- pageSize);
- }
- List items = getHibernateTemplate().findByCriteria(
- detachedCriteria);
- // IResponseDataNPage ps = new IResponseDataNPage(items,
- // totalCount, pageSize, startIndex);
- IResponseDataNPage dataNPage = buildResponseDataNPage(
- null , items, totalCount);
- return dataNPage;
- }
- }, true );
- }
- }
@SuppressWarnings("unchecked") public T get(String id) { T ret = (T) getHibernateTemplate().get(type, id); if (ret == null) { throw new ObjectRetrievalFailureException(type, "can't get object with id " + id); } return ret; } public IResponseDataNPage findPageByCriteria( final DetachedCriteria detachedCriteria, final Order order, final int pageSize, final int startIndex) { return (IResponseDataNPage) getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria .getExecutableCriteria(session); int totalCount = ((Integer) criteria.setProjection( Projections.rowCount()).uniqueResult()) .intValue(); criteria.setProjection(null); if (order != null) criteria.addOrder(order); if(pageSize>0 && startIndex>=0) { criteria.setFirstResult(startIndex).setMaxResults( pageSize); } List items = getHibernateTemplate().findByCriteria( detachedCriteria); // IResponseDataNPage ps = new IResponseDataNPage(items, // totalCount, pageSize, startIndex); IResponseDataNPage dataNPage = buildResponseDataNPage( null, items, totalCount); return dataNPage; } }, true); } }
getSession只有sessionFactory
- public T get( final PK id) {
- return (T) getSession().load(entityClass, id);
- }
- public Page<T> find(Page<T> page, String hql, Object... values) {
- Assert.notNull(page);
- Query q = createQuery(hql, values);
- if (page.isFirstSetted()) {
- q.setFirstResult(page.getFirst());
- }
- if (page.isPageSizeSetted()) {
- q.setMaxResults(page.getPageSize());
- }
- page.setResult(q.list());
- return page;
- }
public T get(final PK id) { return (T) getSession().load(entityClass, id); } public Page<T> find(Page<T> page, String hql, Object... values) { Assert.notNull(page); Query q = createQuery(hql, values); if (page.isFirstSetted()) { q.setFirstResult(page.getFirst()); } if (page.isPageSizeSetted()) { q.setMaxResults(page.getPageSize()); } page.setResult(q.list()); return page; }
从上面可以看出getSession能实现与getHibernateTemplate完全一样的代码。
但getSession要自己实现一堆的功能。如createQuery等等。
但深入比较发现一下不同处:
getSession() 获得的是原始的sessionFactory,每次你必须自己维护session如结束后你必须关闭session。如果是hibernate中进行数据库操作,你获得是原始的hibernate style和excepttion。
而hibernate template是spring包装过的,它会帮你管理session,并且它会将hibernate exceptions转换成其他的分类后的错误。这点getSession是肯定不行了。例如你用orcle和mysql返回的错误在 getSession中就是不一样的,而在hibernate template中就是一样的。
但我在实际使用中发现,对于基本的操作Hibernate template处理的的确比getSession要好,但到了复杂查询的时候如分页时需要调用 getHibernateTemplate().execute(HibernateCallBack).要产生很多innerClass,调试非常不 便。而getSession就相当简单多了。
总之:dao layer的设计五花八门,只能根据需要自己选择了。晕 java 的多态?还是变态?
发表评论
-
java.lang.ClassCastException: java.lang.Integer
2010-01-09 12:55 1387java.lang.ClassCastException: j ... -
Error:org.springframework.web.context.ContextLoaderListener
2010-01-06 21:17 8688Error con ... -
Error configuring application listener of class org.springframework.web.context.
2010-01-06 21:11 20119急!!tomcat启动报错:Error configuring ... -
Cannot find bean org.apache.struts.taglib.html.BEAN
2009-12-29 14:29 1305Cannot find bean org.apache.str ... -
attempt to create delete event with null entity
2009-12-29 11:07 4688attempt to create delete event ... -
懒加载异常org.hibernate.LazyInitializationException: could not initialize proxy - no
2009-12-28 20:44 20208错误页面提示 could n ... -
getHibernateTemplate.load() 和get()之间的区别
2009-12-28 20:16 18741. getHibernateTemplate.load() ... -
使用Hibernate持久层 --- 2 出现的问题与解决方法总结
2009-12-28 15:04 1208使用Hibernate持久层 --- 2 出现的问题与解决方法 ... -
java.lang.NullPointerException DAO
2009-12-28 15:02 1857~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ... -
JSTL1.1中要用的jar--standard.jar jstl.jar
2009-12-09 00:35 4077gg -
Jsessionid
2009-12-07 16:22 1288(1) 这是一个 ... -
spring有三种启动方式,
2009-12-07 15:21 2472spring有三种启动方式,使用 ... -
ContextLoaderListener VS. ContextLoaderServlet
2009-12-07 15:20 3555一旦ContextLoaderServlet或Cont ... -
ERRORcheck whether you have multiple ContextLoader* definitions in your web.xml!
2009-12-07 15:17 6273ERROR:check whether you have mu ... -
从tomcat 迁移到 WebSphere 经验总结(修改)
2009-12-07 15:08 2456从tomcat 迁移到 WebSphere ... -
CGlib & asm
2009-12-07 15:01 2722缺少包出现的错误信息:cglib-2.1.3.jar CGL ... -
Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTup
2009-12-07 14:57 5441Unable to instantiate default t ... -
asm.jar的冲突问题
2009-12-07 14:53 1493No configuration found. Confi ... -
异常:ERROR [org.hibernate.proxy.BasicLazyInitializer] - CGLIB Enhancement failed..
2009-12-07 14:25 1814用MyEclipse6.0写了一个spri ... -
ssh 整合时报错java.lang.reflect.InvocationTargetException... 但是能运行起[
2009-12-07 14:17 11851内容太长(多次发): [Tomcat]2007-09-0 ...
相关推荐
与直接使用`getSession()`方法相比,`getHibernateTemplate()`具有以下显著特点: 1. **事务管理**:`getHibernateTemplate()`是Spring封装后的接口,它支持声明式事务管理。这意味着你无需手动开启和关闭事务,...
Query query = getHibernateTemplate().getSession().createQuery(queryString); // 设置起始位置 query.setFirstResult(position); // 设置每页显示的数量 query.setMaxResults(length); List list = query...
Query query = getHibernateTemplate().getSession().createQuery(hql); query.setFirstResult((currentPage - 1) * lineSize); query.setMaxResults(lineSize); List<Person> personList = query.list(); ``` 总的...
为了简化Hibernate与Spring的整合,Spring提供了`HibernateTemplate`类,它是一个封装了Hibernate Session的工具类,使得在处理数据库操作时更加方便。`HibernateTemplate`在事务管理、异常转换等方面提供了很多便利...
它主要用于简化Hibernate与Spring集成过程中的编码工作,使得开发人员能够更加专注于业务逻辑的编写而非框架间的耦合问题。本文将详细介绍`hibernateDaoSupport`的使用方法,并通过一个具体的示例来说明其在项目中的...
这里的`setString(0, "小李想")`用于设置参数,`0`表示参数的位置,与`?`在HQL中的位置相对应。 2. **HQL删除**: 删除操作则是从数据库中移除特定的对象。例如,删除`PhUser`中userId为2的用户: ```java ...
这种方式是通过`getHibernateTemplate().getSessionFactory().openSession()`来获得一个新的Session,然后通过该Session获取连接。 ```java // 方式一 Session session = this.getHibernateTemplate()....
3. `getSession()`: 提供对当前事务上下文中的Session的访问,这对于执行HQL或SQL查询非常有用。 接下来,我们谈谈`@Autowired`。这是Spring框架的一个关键注解,用于实现依赖注入(Dependency Injection, DI)。DI...
- 通过`this.getHibernateTemplate().getSessionFactory().openSession();` - 通过`this.getSession();` 这两种方式获取Session后,同样需要使用`releaseSession(session)`释放资源。务必记住,多次查询而未释放...
this.getHibernateTemplate().save(user); } @Override public PageModel findAllUser(int offset, int pageSize) { // 获取总记录数 String queryCountHql = "select count(*) from User"; Query query = ...
在Java企业级应用开发中,Struts、Hibernate、Spring与Pager Taglib经常被联合使用,以构建高性能、高灵活性的应用系统。本文将详细介绍如何通过Struts+Hibernate+Spring+Pager Taglib实现一个完整的分页功能。 ###...
为了进行数据库操作,通常会创建一个继承自`HibernateDaoSupport`的DAO类,这样可以直接使用`getSession()`方法进行操作。例如: ```java public class Dao extends HibernateDaoSupport { public List selectList...
Session session = this.getHibernateTemplate().getSessionFactory().openSession(); Transaction tran = session.beginTransaction(); try { session.save(userManager); tran.commit(); } catch ...