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和...
struts2.2.3+spring2.5.6+hibernate3.2+proxool0.9.1 proxool数据库连接池例子 0资源下载
NULL 博文链接:https://devsky.iteye.com/blog/1038804
spring3.0.4+hibernate3.5.0+proxool 0.9.1+jstl整合最新的JAVA WEB框架,没有使用struts2,视图层使用spring MVC.
structs2+sping3+hibernate3+proxool连接池完整实例,可直接导入myeclipse工程进行运行
连接池配置文件 博文链接:https://yanghaiskys.iteye.com/blog/215424
spring+proxool配置spring+proxool配置spring+proxool配置
Struts2+Spring3+Hibernate3+Proxool_亲测成功 费大劲了.zip
框架整合Spring MVC3.23+Spring3.23+Hibernate4.2.3+Activiti5.16.3,三层架构dao,service,controller,使用proxool连接池(已配置好监听器),默认链接mysql数据库。可根据项目开发需要,做适当修改,各项配置齐全...
Spring+proxool+hibernate+struts2+aop整合的完整的简单项目
Spring+proxool+hibernate+struts2+aop整合的完整_Jar包
自己整理的springmvc+hibernate+proxool+freemariker需要的所有包
struts2+hibernate3.2+spring2.5 proxool成步骤
利用ssh(Spring2.5+Struts2.1+Hibernate3.3)全注解整合这3个流行的框架,实现了增、删、改、查的功能,目前功能还比较简单,以后功能再慢慢增加。欢迎大家下载并交流。
这个是个用spring+dwr+proxool+mysql5.0写的一个显示和删除的小程序