`
xhy0422
  • 浏览: 281125 次
社区版块
存档分类
最新评论

spring+hibernate+proxool错误总结 HibernateTemplate 常用函数(附件)

阅读更多
xml 代码
1 hibernate映射 
java 代码
  1. <class name="hibernatePojo.Chapter" table="chapter" catalog="teachflat">  
使得sql语句中数据库表名为teachflat_chapter从而导致数据库表不存在的异常,应去掉 catalog="teachflat"
2  添加Hibernate Libraries...时,加入Hibernate 3.0 Core Libraries是使用Hibernate的需要,加入Spring 1.2 ORM/DAO/Hibernate3 Libraries是使用HibernateTemplate的需要即DAO extends HibernateDaoSupport,并且一定要选择Copy Checked Library Jars to project folder and add to build path,否则注入时会找不到org/hibernate/session,为使用spring注入管理数据库操作,选择创建spring configfile 到WEB-INF目录,如果用proxool连接池可以不创建DataSource,也不用创建factory.
proxool的配置文件Proxool.xml放在src目录或其子目录下,通过spring的配置文件去找
3 tomcat在启动的时候就报错了。错误日志如下
严重: org.apache.catalina.core.StandardContext start
xml 代码
  1. <listener>  
  2.   <listener-class>org.springframework.web.util.Log4jConfigListenerlistener-class>  
  3. listener>  
  4. <listener>  
  5.   <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>  
  6. listener>  
  7. 写成如下形式就ok了   
  8. <servlet>  
  9.   <servlet-name>SpringContextServletservlet-name>  
  10.   <servlet-class>org.springframework.web.context.ContextLoaderServletservlet-class>  
  11.   <load-on-startup>1load-on-startup>  
  12. servlet>  
  13. <servlet>  
  14.   <servlet-name>SpringLog4jConfigServletservlet-name>  
  15.   <servlet-class>org.springframework.web.util.Log4jConfigServletservlet-class>  
  16. servlet>   
像BaseDAO里的原有三个接口
  1. find(String hql);
  2. find(String hql,Object arg);
  3. find(String hql,Object[] arg);

可精简为一个

  1. find(String hql,Object... args);

用户用如下四种方式调用该接口都是合法的

  1. find(hql);
  2. find(hql,arg0);
1,使Spring的getHibernateTemplate() 多条件的查询时使find(String hql Object b[])方法其中hql中的的?在 b中一次列出,这样就返回一个符合条件的List对象.


     
java 代码
  1. public List searchAll(){   
  2.     List list=null;   
  3.     try{   
  4.      Ceshi cs=new Ceshi();   
  5.      cs.setPassword("123");//必须 符合的条件但是这两个条件时并列的(象当于sql中的and)   
  6.      cs.setName("bb");   
  7.      list=this.getHibernateTemplate().findByExample(cs,start,max);   
  8.  }catch(RuntimeException re){   
  9.   throw re;   
  10.  }   
  11.  return list;   
  12.    }    我觉得start max是取结果集的一部分

findByNamedParam的使用

数据库中有一表Member(id,email),已经有一条记录('123','sdf@sfd.com');

使
以下语句查询:

String hql = "select count(*) from Member where email=:email and id!=:id";

List list = this.support.getHibernateTemplate().
findByNamedParam(hql,new String[] { "email", "id" },new Object[] { "sdf@sfd.com", null });

System.out.println(list.get(0));

打印结果为0

把其中的new Object[] { "sdf@sfd.com", null });
改为new Object[] { "sdf@sfd.com", "" });
,,结果就为1

我使p6spy看执行的语句,发现这两句生成的SQL是一模一样的,都是 select count(*) ..... and id<>''

为什么一个能查得出来,一个查不出来???真是奇怪。请各位大哥帮忙

对于这个问题,其实生成的两个语句并不一样的,在MYSQL的LOG中,可以看到为""的那个为select ... and id<>'',为null的那个为select ... and id<>NULL

这一点,p6spy结果的日志记录是错误的

NULL值在MYSQL是一个非常特殊的,它表示“不确定”,任何东西与它比较(包括NULL本身)都返回的是NULL,是查不出结果的  
select ... and id<>NULL 在HQL中 判断是否为null 都是 is null or is not null

findByNamedQuery的使用

java 代码
  1. 定义并使用更多的查询以展示可以完成的操作。Hibernate 可以用预定义查询将查询存储到源代码之外,如清单 4 所示。   
  2.   
  3.   清单 4. 预定义查询   
  4.   [User.java]   
  5.   
  6. /**  
  7.  * @author Richard Hightower  
  8.  * ArcMind Inc. http://www.arc-mind.com  
  9.  * @hibernate.class table="TBL_USER" discriminator-value="2"  
  10.  * @hibernate.discriminator column="USER_TYPE"  
  11.  *  
  12.  * @hibernate.query name="AllUsers" query="from User user order by user.email asc"  
  13.  *  
  14.  * @hibernate.query name="OverheadStaff"  
  15.  * query="from Employee employee join employee.group g where g.name not in ('ENGINEERING','IT')"  
  16.  *  
  17.  * @hibernate.query name="CriticalStaff"  
  18.  * query="from Employee employee join employee.group g where g.name in ('ENGINEERING','IT')"  
  19.  *  
  20.  * @hibernate.query name="GetUsersInAGroup"  
  21.  * query="select user from Group g join g.users user"  
  22.  *  
  23.  * @hibernate.query name="GetUsersNotInAGroup"  
  24.  * query="select user from User user where user.group is null"  
  25.  *  
  26.  * @hibernate.query name="UsersBySalaryGreaterThan"  
  27.  * query="from User user inner join user.contactInfo info where info.salary > ?1"  
  28.  *  
  29.  * @hibernate.query name="UsersBySalaryBetween"  
  30.  * query="from User user join user.contactInfo info where info.salary between ?1 AND ?2"  
  31.  *  
  32.  * @hibernate.query name="UsersByLastNameLike"  
  33.  * query="from User user join user.contactInfo info where info.lastName like ?1"  
  34.  *  
  35.  * @hibernate.query name="GetEmailsOfUsers"  
  36.  * query="select user.email from Group g join g.users as user where g.name = ?1"  
  37.  *  
  38.  */  
  39. public class User {   
  40.    .   
  41.    .   
  42.    .      
  43.   
  44.   上述代码定义了几个预定义查询。预定义查询 是存储在 *.hbm.xml 文件中的查询。在清单 5 中,可以看到如何执行预定义查询。   
  45.   
  46.   清单 5. 使用预定义查询   
  47.   [UserDAO.java]   
  48.   
  49.  /**  
  50.   * Demonstrates a query that returns a String.  
  51.   */                  
  52.  public String[] getUserEmailsInGroup(String groupName){   
  53.   List emailList =   
  54.   getHibernateTemplate().findByNamedQuery("GetEmailsOfUsers");   
  55.   return (String [])   
  56.    emailList.toArray(new String[emailList.size()]);   
  57.  }   
  58.   
  59.  /**  
  60.   * Demonstrates a query that returns a list of Users  
  61.   *  
  62.   * @return A list of emails of all of the users in the authentication system.  
  63.   *  
  64.   */                  
  65.  public List getUsers(){   
  66.   return getHibernateTemplate().findByNamedQuery("AllUsers");   
  67.  }   
  68.   
  69.       /**  
  70.  * Demonstrates passing a single argument to a query.  
  71.  *  
  72.  * @return A list of UserValue objects.  
  73.  *  
  74.  */                      
  75.  public List getUsersBySalary(float salary){   
  76.     return getHibernateTemplate()   
  77.         .findByNamedQuery("UsersBySalaryGreaterThan",   
  78.              new Float(salary));   
  79.  }   
  80.   
  81.  /**  
  82.   * Demonstrates passing multiple arguments to a query  
  83.   *  
  84.   * @return A list of UserValue objects.  
  85.   *  
  86.   */                      
  87.  public List getUsersBySalaryRange(float start, float stop){   
  88.                 return getHibernateTemplate()   
  89.    .findByNamedQuery("UsersBySalaryBetween",   
  90.    new Object[] {new Float(start), new Float(stop)});   
  91.  }   

                         

findByNamedQueryAndNamedParam的使用
    public User loadByName(String account)  throws DAOException{
         List result = getHibernateTemplate().findByNamedQueryAndNamedParam("loadUserByName", "userAccount", account);
         if (result != null ) {
            return (User)result;
        } else {
            return null;
        }
    }
    这是在user.hbm.xml中的代码:
    <query name="loadUserByName">
                    <![CDATA[select user from user as user where user.name=:userAccount]]>
            </query>
  • 描述: HibernateTemplate 常用函数
  • 大小: 64.8 KB
分享到:
评论
1 楼 xiaofengtoo 2007-08-25  
好文章 ! 学习中!谢谢!

相关推荐

    spring3+hibernate3+proxool+mysql 超级企业J2EE DEMO(jar在下一个文件中,jar太大了)

    本项目采用当前主流的MVC和IOC框架spring 3、优秀的ORM框架hibernate和超级厉害的proxool数据库连接池。这个工程demo,是本人在企业应用中的项目缩影,绝对实用于企业的应用。 适合朋友: 1.一直用单独的servlet和...

    Spring+Hibernate+Proxool连接池

    标题 "Spring+Hibernate+Proxool连接池" 涉及到的是在Java Web开发中,如何使用Spring框架集成Hibernate ORM框架,并结合Proxool作为数据库连接池的技术实践。这通常是为了提高应用性能,有效管理和复用数据库连接,...

    Struts2+spring+hibernate中的proxool连接池配置

    本文将详细介绍如何在Struts2+Spring+Hibernate的环境中配置Proxool连接池。 首先,理解Proxool的工作原理。Proxool是一个基于池化的JDBC代理,它维护着一个数据库连接池,当应用需要访问数据库时,可以从池中获取...

    spring3+hibernate3+proxool+jstl+oracle整合示例代码

    《Spring3+Hibernate3+Proxool+jstl+Oracle整合详解》 在现代Java Web开发中,集成各种框架以实现高效、灵活的应用程序已成为常态。本示例代码结合了Spring 3.0.4、Hibernate 3.5.0、Proxool 0.9.1、jstl,并利用...

    struts2.2.3+spring2.5.6+hibernate3.2+proxool0.9.1

    Struts2.2.3、Spring2.5.6、Hibernate3.2和Proxool0.9.1是四个重要的Java技术组件,它们在Web应用程序开发中扮演着关键角色。这个压缩包文件包含了这些技术的集成示例,旨在帮助开发者理解和实践如何将它们有效地...

    框架整合Spring MVC3.23+Spring3.23+Hibernate4.2.3+Activiti5.16.3+Proxool连接池

    框架整合Spring MVC3.23+Spring3.23+Hibernate4.2.3+Activiti5.16.3,三层架构dao,service,controller,使用proxool连接池(已配置好监听器),默认链接mysql数据库。可根据项目开发需要,做适当修改,各项配置齐全...

    PureMVC+Flex+BlazeDS+Spring+Hibernate.doc

    标题中的“PureMVC+Flex+BlazeDS+Spring+Hibernate.doc”指的是一项整合了多种技术的Web应用开发方案,这些技术包括PureMVC、Flex、BlazeDS、Spring和Hibernate。这篇文档可能是指导读者如何将这些技术结合在一起...

    structs2+sping3+hibernate3+proxool完整实例

    `Structs2`、`Spring3`、`Hibernate3`以及`Proxool`这四个技术组件是Java Web开发中的核心工具,它们分别承担着不同的职责。在这个"sshp"压缩包中,你将找到一个完整的实例,演示了如何整合这些技术来构建一个实际的...

    SSH (Struts2+Spring3+Hibernate3) +Proxool_亲测成功 费大劲了.zip

    文件`Spring3+Hibernate+Proxool_lj配置试验成功.txt`表明Spring3和Hibernate已经成功地集成了Proxool,这可能涉及到了Spring的`DataSource`配置,通过`&lt;bean&gt;`标签定义一个数据源,然后在Hibernate配置中引用它。...

    Spring+proxool+hibernate+struts2+aop整合的完整的简单项目

    **Spring+Proxool+Hibernate+Struts2+AOP整合详解** 在Java Web开发中,Spring、Proxool、Hibernate、Struts2和AOP(面向切面编程)是常用的框架和技术,它们各自承担着不同的职责,组合使用可以构建出高效、可维护...

    springmvc+hibernate+freemarker+proxool需要的所有包

    "spring+hibernate包"可能包含了Spring MVC和Hibernate的相关依赖,如Spring的核心库、Spring MVC模块、Hibernate ORM库以及相关的JDBC驱动等,它们是搭建和运行一个基于Spring MVC、Hibernate的Java Web应用的基础...

    hibernate3+ proxool-0.9.1配置 和proxool-0.9.1.jar

    标题中的“hibernate3+ proxool-0.9.1配置”涉及到的是在Java开发中,使用Hibernate3 ORM框架与Proxool连接池的整合配置。Hibernate3是一款流行的持久层框架,它允许开发者用面向对象的方式来操作数据库,而Proxool...

    Spring+proxool+hibernate+struts2+aop_Jar包

    在"Spring+proxool+hibernate+struts2+aop"的整合中,Spring负责整体的依赖管理和事务控制,Struts2处理请求转发和视图展示,Hibernate处理数据库操作,而AOP则用来实现跨切面的关注点。 在提供的"Spring+proxool+...

    SSH2全注解整合(spring2.5+hibernate3.3+struts2.1+泛型DAO+proxool连接池)

    SSH2全注解整合是Java Web开发中一种高效且现代化的方法,它将Spring 2.5、Struts 2.1和Hibernate 3.3这三个流行框架的优势结合起来,以简化开发流程并提高代码的可维护性。在这个项目中,开发者通过使用注解,避免...

    jsf+spring+hibernate.pdf

    本文将探讨如何集成Java...综上所述,JSF+Spring+Hibernate的集成提供了一种强大且灵活的开发模式,能够有效地管理用户界面、业务逻辑和持久化层。通过合理的配置和设计,可以构建出高性能、易于维护的企业级Web应用。

Global site tag (gtag.js) - Google Analytics