xml 代码
1 hibernate映射
java 代码
- <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 代码
- <listener>
- <listener-class>org.springframework.web.util.Log4jConfigListenerlistener-class>
- listener>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
- listener>
- 写成如下形式就ok了
- <servlet>
- <servlet-name>SpringContextServletservlet-name>
- <servlet-class>org.springframework.web.context.ContextLoaderServletservlet-class>
- <load-on-startup>1load-on-startup>
- servlet>
- <servlet>
- <servlet-name>SpringLog4jConfigServletservlet-name>
- <servlet-class>org.springframework.web.util.Log4jConfigServletservlet-class>
- servlet>
像BaseDAO里的原有三个接口
find(String hql);
find(String hql,Object arg);
find(String hql,Object[] arg);
可精简为一个
find(String hql,Object... args);
用户用如下四种方式调用该接口都是合法的
find(hql);
find(hql,new Object[]{arg0,arg1});
1,使用Spring的getHibernateTemplate() 多条件的查询时使用find(String hql Object b[])方法其中hql中的的?在 b中一次列出,这样就返回一个符合条件的List对象.
2,使
用Spring的getHibernateTemplate()分页时使
用findByExample(Object obj,int start,int max)方法返回符合条件的List对象具体时
用如下:
java 代码
- public List searchAll(){
- List list=null;
- try{
- Ceshi cs=new Ceshi();
- cs.setPassword("123");
- cs.setName("bb");
- list=this.getHibernateTemplate().findByExample(cs,start,max);
- }catch(RuntimeException re){
- throw re;
- }
- return list;
- } 我觉得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 代码
- 定义并使用更多的查询以展示可以完成的操作。Hibernate 可以用预定义查询将查询存储到源代码之外,如清单 4 所示。
-
- 清单 4. 预定义查询
- [User.java]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- public class User {
- .
- .
- .
-
- 上述代码定义了几个预定义查询。预定义查询 是存储在 *.hbm.xml 文件中的查询。在清单 5 中,可以看到如何执行预定义查询。
-
- 清单 5. 使用预定义查询
- [UserDAO.java]
-
-
-
-
- public String[] getUserEmailsInGroup(String groupName){
- List emailList =
- getHibernateTemplate().findByNamedQuery("GetEmailsOfUsers");
- return (String [])
- emailList.toArray(new String[emailList.size()]);
- }
-
-
-
-
-
-
-
- public List getUsers(){
- return getHibernateTemplate().findByNamedQuery("AllUsers");
- }
-
-
-
-
-
-
-
- public List getUsersBySalary(float salary){
- return getHibernateTemplate()
- .findByNamedQuery("UsersBySalaryGreaterThan",
- new Float(salary));
- }
-
-
-
-
-
-
-
- public List getUsersBySalaryRange(float start, float stop){
- return getHibernateTemplate()
- .findByNamedQuery("UsersBySalaryBetween",
- new Object[] {new Float(start), new Float(stop)});
- }
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
分享到:
相关推荐
本项目采用当前主流的MVC和IOC框架spring 3、优秀的ORM框架hibernate和超级厉害的proxool数据库连接池。这个工程demo,是本人在企业应用中的项目缩影,绝对实用于企业的应用。 适合朋友: 1.一直用单独的servlet和...
标题 "Spring+Hibernate+Proxool连接池" 涉及到的是在Java Web开发中,如何使用Spring框架集成Hibernate ORM框架,并结合Proxool作为数据库连接池的技术实践。这通常是为了提高应用性能,有效管理和复用数据库连接,...
本文将详细介绍如何在Struts2+Spring+Hibernate的环境中配置Proxool连接池。 首先,理解Proxool的工作原理。Proxool是一个基于池化的JDBC代理,它维护着一个数据库连接池,当应用需要访问数据库时,可以从池中获取...
《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是四个重要的Java技术组件,它们在Web应用程序开发中扮演着关键角色。这个压缩包文件包含了这些技术的集成示例,旨在帮助开发者理解和实践如何将它们有效地...
框架整合Spring MVC3.23+Spring3.23+Hibernate4.2.3+Activiti5.16.3,三层架构dao,service,controller,使用proxool连接池(已配置好监听器),默认链接mysql数据库。可根据项目开发需要,做适当修改,各项配置齐全...
标题中的“PureMVC+Flex+BlazeDS+Spring+Hibernate.doc”指的是一项整合了多种技术的Web应用开发方案,这些技术包括PureMVC、Flex、BlazeDS、Spring和Hibernate。这篇文档可能是指导读者如何将这些技术结合在一起...
`Structs2`、`Spring3`、`Hibernate3`以及`Proxool`这四个技术组件是Java Web开发中的核心工具,它们分别承担着不同的职责。在这个"sshp"压缩包中,你将找到一个完整的实例,演示了如何整合这些技术来构建一个实际的...
文件`Spring3+Hibernate+Proxool_lj配置试验成功.txt`表明Spring3和Hibernate已经成功地集成了Proxool,这可能涉及到了Spring的`DataSource`配置,通过`<bean>`标签定义一个数据源,然后在Hibernate配置中引用它。...
**Spring+Proxool+Hibernate+Struts2+AOP整合详解** 在Java Web开发中,Spring、Proxool、Hibernate、Struts2和AOP(面向切面编程)是常用的框架和技术,它们各自承担着不同的职责,组合使用可以构建出高效、可维护...
"spring+hibernate包"可能包含了Spring MVC和Hibernate的相关依赖,如Spring的核心库、Spring MVC模块、Hibernate ORM库以及相关的JDBC驱动等,它们是搭建和运行一个基于Spring MVC、Hibernate的Java Web应用的基础...
标题中的“hibernate3+ proxool-0.9.1配置”涉及到的是在Java开发中,使用Hibernate3 ORM框架与Proxool连接池的整合配置。Hibernate3是一款流行的持久层框架,它允许开发者用面向对象的方式来操作数据库,而Proxool...
在"Spring+proxool+hibernate+struts2+aop"的整合中,Spring负责整体的依赖管理和事务控制,Struts2处理请求转发和视图展示,Hibernate处理数据库操作,而AOP则用来实现跨切面的关注点。 在提供的"Spring+proxool+...
SSH2全注解整合是Java Web开发中一种高效且现代化的方法,它将Spring 2.5、Struts 2.1和Hibernate 3.3这三个流行框架的优势结合起来,以简化开发流程并提高代码的可维护性。在这个项目中,开发者通过使用注解,避免...
本文将探讨如何集成Java...综上所述,JSF+Spring+Hibernate的集成提供了一种强大且灵活的开发模式,能够有效地管理用户界面、业务逻辑和持久化层。通过合理的配置和设计,可以构建出高性能、易于维护的企业级Web应用。