getHibernateTemplate()为NUll
getHibernateTemplate()为NUll,困扰好几天了,网上也找了好些方法一直解决不掉15
小弟刚刚开始学SSH,是用的Struts2+Hibernate+Spring,运行的时候发现getHibernateTemplate()得到的模板类始终是nUll值,郁闷好几天了,一直在我网上试各种方法,迄今任为解决,恳请各位指教咯!
applicationContext.xml:(事务处理这儿没贴出来)
Java代码
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
- 10.
http://www.springframework.org/schema/aop - 11.
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> - 12.
<!-- 定义数据源 --> - 13.
<bean id="dataSource" - 14.
class="org.apache.commons.dbcp.BasicDataSource"> - 15.
<property name="driverClassName" - 16.
value="com.mysql.jdbc.Driver"> - 17.
</property> - 18.
<property name="url" value="jdbc:mysql://localhost:3306/jjufriend"></property> - 19.
<property name="username" value="root"></property> - 20.
<property name="password" value="root"></property> - 21.
</bean> - 22.
- 23.
<!-- 定义Hibernate的sessionFactory --> - 24.
<bean id="sessionFactory" - 25.
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> - 26.
<property name="dataSource"> - 27.
<ref bean="dataSource" /> - 28.
</property> - 29.
- 30.
<!-- Hibernate 的sessionFactory的属性 --> - 31.
- 32.
<property name="hibernateProperties"> - 33.
<props> - 34.
<!-- 数据库方言 --> - 35.
<prop key="hibernate.dialect"> - 36.
org.hibernate.dialect.SQLServerDialect - 37.
</prop> - 38.
<!-- 显示Hibernate持久化操作所生成的SQL语句 --> - 39.
<prop key="hibernate.show_sql">true</prop> - 40.
<!-- 将SQL脚本进行格式化后再输出 --> - 41.
<prop key="hibernate.format_sql">true</prop> - 42.
</props> - 43.
</property> - 44.
<!-- 列出全部的映射文件 --> - 45.
<property name="mappingResources"> - 46.
<list> - 47.
<value>com/jjufriend/student/model/Student.hbm.xml</value></list> - 48.
</property></bean> - 49.
- 50.
<!-- 配置dao组件 --> - 51.
<bean id="studentDao" - 52.
class="com.jjufriend.student.dao.impl.StudentDaoHibernate"> - 53.
<!-- 依赖注入DAO组件所必需的SessionFactory引用 --> - 54.
<property name="sessionFactory" ref="sessionFactory"> - 55.
</property> - 56.
</bean> - 57.
<!-- 配置业务逻辑组件 --> - 58.
<bean id="mgr" - 59.
class="com.jjufriend.student.service.impl.StudentManagerImpl"> - 60.
<property name="studentDao" ref="studentDao"></property> - 61.
</bean> - 62.
studentDao.java:
Java代码
- package com.jjufriend.student.dao;
- import java.util.List;
- import com.jjufriend.student.model.Student;
- public interface StudentDao {
- Student get(Integer id);
- 10.
- 11.
Integer save(Student student); - 12.
- 13.
void update(Student student); - 14.
- 15.
void delete(Student student); - 16.
- 17.
void delete(Integer id); - 18.
- 19.
List<Student> findAll(); - 20.
- 21.
Student findStudentByNameAndPass(String username,String password); - 22.
- 23.
Student findByName(String username); - 24.
25.
}
StudentDaoHibernate.java:
Java代码
- package com.jjufriend.student.dao.impl;
- import java.io.Serializable;
- import java.util.List;
- import org.hibernate.SessionFactory;
- import org.springframework.orm.hibernate3.HibernateTemplate;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
10.
import com.jjufriend.student.dao.StudentDao;
11.
import com.jjufriend.student.model.Student;
- 12.
13.
public class StudentDaoHibernate extends HibernateDaoSupport implements
- 14.
StudentDao,Serializable { - 15.
private SessionFactory sessionFactory; - 16.
HibernateTemplate ht = this.getHibernateTemplate() ; - 17.
- 18.
- 19.
- 20.
public void delete(Student student) { - 21.
// TODO Auto-generated method stub - 22.
getHibernateTemplate().delete(student); - 23.
- 24.
} - 25.
- 26.
public void delete(Integer id) { - 27.
// TODO Auto-generated method stub - 28.
getHibernateTemplate().delete(get(id)); - 29.
- 30.
} - 31.
- 32.
public List<Student> findAll() { - 33.
// TODO Auto-generated method stub - 34.
return (List<Student>)getHibernateTemplate().find("from Student"); - 35.
- 36.
} - 37.
- 38.
public Student findByName(String username) { - 39.
- 40.
List stu = getHibernateTemplate().find("from Student st where st.username = ?",username); - 41.
- 42.
if(stu != null && stu.size() >= 1){ - 43.
return (Student)stu.get(0); - 44.
} - 45.
- 46.
return null; - 47.
} - 48.
- 49.
public Student findStudentByNameAndPass(String username, String password) { - 50.
// TODO Auto-generated method stub - 51.
List students = null; - 52.
try{ - 53.
- 54.
// HibernateTemplate temple = this.getHibernateTemplate();
55.
System.out.println("模板类是否为NULL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+ht);
- 56.
57.
// 取出所有 students = temple.find("from student");
- 58.
students = ht.find("from student st where st.username = " + username + " and st.password = " + password); - 59.
- 60.
}catch(Exception e){ - 61.
System.out.println("查找过程中出现异常.............."); - 62.
e.printStackTrace(); - 63.
} - 64.
if(students != null && students.size() >= 1){ - 65.
return (Student)students.get(0); - 66.
} - 67.
return null; - 68.
} - 69.
- 70.
public Student get(Integer id) { - 71.
- 72.
return (Student)getHibernateTemplate().get(Student.class, id); - 73.
- 74.
} - 75.
- 76.
public Integer save(Student student) { - 77.
return (Integer)getHibernateTemplate().save(student); - 78.
} - 79.
- 80.
public void update(Student student) { - 81.
// TODO Auto-generated method stub - 82.
getHibernateTemplate().update(student); - 83.
- 84.
} - 85.
86.
}
StudentManager.java:
Java代码
- package com.jjufriend.student.service;
- import com.jjufriend.student.model.Student;
- public interface StudentManager {
- int addStudent(Student student) throws Exception;
- int loginValid(Student student) throws Exception;
- 10.
- 11.
boolean validateName(String username) throws Exception;
12.
}
StudentManagerImpl.java:
Java代码
- package com.jjufriend.student.service.impl;
- import com.jjufriend.student.dao.StudentDao;
- import com.jjufriend.student.dao.impl.StudentDaoHibernate;
- import com.jjufriend.student.model.Student;
- import com.jjufriend.student.service.StudentManager;
- public class StudentManagerImpl implements StudentManager {
- /*2009-11-12 22:44修改 出去new StudentDaoHibernate() */
- 10.
private StudentDao studentDao = new StudentDaoHibernate() ; - 11.
12.
// private ApplicationContext cxt =
13.
// new FileSystemXmlApplicationContext("../webapps/JJUFriend/WEB-INF/applicationContext.xml");
14.
// studentDao =(StudentDaoHibernate)cxt.getBean("studentDao");
- 15.
- 16.
public void setStudentDao(StudentDao studentDao){ - 17.
- 18.
this.studentDao = studentDao ; - 19.
} - 20.
- 21.
- 22.
public int addStudent(Student student) throws Exception { - 23.
// TODO Auto-generated method stub - 24.
try{ - 25.
studentDao.save(student); - 26.
return student.getId(); - 27.
- 28.
}catch(Exception e){ - 29.
e.printStackTrace(); - 30.
throw new Exception("新增用户时出现异常"); - 31.
} - 32.
- 33.
} - 34.
- 35.
public int loginValid(Student student) throws Exception { - 36.
try{ - 37.
38.
System.out.println(studentDao);
39.
System.out.println("是否取到页面提交的数据:Name="+student.getUsername());
- 40.
Student stu = studentDao.findStudentByNameAndPass(student.getUsername(), student.getPassword()); - 41.
if(stu != null ){ - 42.
return stu.getId(); - 43.
} - 44.
- 45.
}catch(Exception e){ - 46.
System.out.println("验证用户登录时出现异常"); - 47.
e.printStackTrace(); - 48.
} - 49.
- 50.
// TODO Auto-generated method stub - 51.
return -1; - 52.
} - 53.
- 54.
public boolean validateName(String username) throws Exception { - 55.
// TODO Auto-generated method stub - 56.
try{ - 57.
if (studentDao.findByName(username) != null){ - 58.
return true ; - 59.
} - 60.
- 61.
- 62.
}catch(Exception e){ - 63.
System.out.println("验证用户名是否用效时出错"); - 64.
e.printStackTrace(); - 65.
- 66.
} - 67.
return false ; - 68.
- 69.
} - 70.
71.
}
问题的关键是通过方法getHibernateTemplate()不能正确得到HibernateTemplate对象,始终的空值,网上有很多解决的办法,差不多我都试过了,
下面这种方法是说不能直接new StudentDao对象,用下面这种方法取得,可以启动服务器老是不停地跳动,一直不停,直到报错。
Java代码
- // private ApplicationContext cxt =
- // new FileSystemXmlApplicationContext("../webapps/JJUFriend/WEB-INF/applicationContext.xml");
- // private StudentDao studentDao =(StudentDaoHibernate)cxt.getBean("studentDao");
还有些方法是直接从applicationContext.xml中的bean取得HibernateTemplate对象,始终都搞不定,望大家指教了。
(顶格的System.out.println()语句均是测试用的语句)
问题补充:
谢谢大家的热心帮助!!
确实其中出了不少问题,主要是最近网上看到解决这个方法的帖子很多,尝试过很多方法,都有点儿改晕了。
一楼的方法我尝试了,还是不行,
Java代码
- private ApplicationContext cxt = this.getApplicationContext();
- private StudentDao studentDao = (StudentDaoHibernate)cxt.getBean("studentDao");
其中那个this.getApplicationContext(); 方法根本不存在啊,无法取得配置文件。
之前类似的方法我也用过就是用
Java代码
- private ApplicationContext cxt =
- ew FileSystemXmlApplicationContext("../webapps/JJUFriend/WEB-INF/applicationContext.xml");
- private StudentDao studentDao =(StudentDaoHibernate)cxt.getBean("studentDao");
取得,但是当启动服务器后,后台一直跑个不停,仿佛是个死循环似的。浏览器中通过http://localhost:8080访问都无效!
StudentDaoHibernate.java中的private SessionFactory
sessionFactory;已经去掉
数据库方言也该过来了
2009年11月13日 12:49
天心皓月
15
0 0 0
- 添加评论
- 关注(0)
9个答案按时间排序按投票排序
00
采纳的答案
我大至看了一下,个人感觉有两点不对:
1、StudentManagerImpl.java中的
private StudentDao studentDao = new
StudentDaoHibernate() ;
不应该new ,直接 = null 就可以。因为你已经使用了spring的注入。
2、StudentDaoHibernate.java中的
private SessionFactory sessionFactory;应该去掉。
HibernateTemplate ht = this.getHibernateTemplate() ;应该去掉。
这两个是父类的属性,不需要你重载,也不该重载。即使你非要重载,那你也应该写上setter吧,要不spring找不到setter不还是会注入到父类中去么,所以你总是获得null。
以上观点仅代表个人意见,如果说的不对,请批评和指正。
2009年11月13日 13:45
fucktianya
4
0 0 1
- 1条评论
00
Java代码
- public class StudentManagerImpl implements StudentManager {
- private StudentDao studentDao ;
- public static StudentManagerImpl smi;
- public StudentManagerImpl()
- {
- smi = this;
- System.out.println("我自动生成了");
- }
- 10.
- 11.
public void setStudentDao(StudentDao studentDao){ - 12.
System.out.println("我自动调用了set方法"); - 13.
this.studentDao = studentDao ; - 14.
}
Java代码
- public class StudentDaoHibernate extends HibernateDaoSupport implements
- StudentDao,Serializable {
- private SessionFactory sessionFactory;
- public static HibernateTemplate ht ;
- public static StudentDaoHibernate sdh;
- public StudentDaoHibernate()
- {
- System.out.println("自动调用");
- 10.
ht = this.getHibernateTemplate(); - 11.
sdh = this;
12.
}
- 13.
- 14.
通过这两节代码你看看spring在地下偷偷干了啥
StudentManagerImpl.smi 你看看是不是你要的东西
不要直接new
2009年11月13日 17:33
areha001
51
0 0 0
- 添加评论
00
Java代码
- public class StudentManagerImpl implements StudentManager {
- private StudentDao studentDao ;
- /**
- *这个方法是由 spring 自动调用的,只要定义了studentDao ,在类里放上
- *getter/setter就不用管了
- * <bean id="mgr"
- * class="com.jjufriend.student.service.impl.StudentManagerImpl">
10.
* <property name="studentDao" ref="studentDao"></property>
11.
* </bean>
12.
* 这里的property -name -ref 会帮你做好
- 13.
*/ - 14.
public void setStudentDao(StudentDao studentDao){ - 15.
- 16.
this.studentDao = studentDao ; - 17.
}
2009年11月13日 17:24
areha001
51
0 0 0
- 添加评论
00
楼主,两个建议:
1.仔细对照书籍,按照书上的例子做一遍。你的问题主要是SPRING相关的不熟悉,所以hibernate砍掉,直接spring加载普通的类。先把简单的配置成功,再把hibernate,struts加进来,一个一个来。
2.出现问题一定要看控制台的信息,错误在哪行,是什么错误。
从你上面的发言可以看出,有些基础的概念还没掌握比如
ApplicationContext是什么?
你可以通过new 指定xml文件地址,获得spring环境,也可以通过依赖注入,也可以使用getWebApplicationContext(),当然要使用这个需要继承Spring提供的ActionSupport。建议你找本专业点书籍看,SSH的东西,光在问答上还是说不清的。
建议找本实战的书,什么 “深入浅出spring" struts+spring+hibernate集成。
按照书上的例子走一遍。
依赖注入需要为bean的变量提供setter。OVER...
2009年11月13日 16:53
energykey
919
0 0 0
- 添加评论
00
- 添加评论
00
- 添加评论
00
用
Java代码
- org.hibernate.dialect.SQLServerDialect
- 添加评论
00
Java代码
- <property name="url" value="jdbc:mysql://localhost:3306/jjufriend">
为什么你数据库用的是MySQL,而sessionFactory里的方言设置是
Java代码
- <prop key="hibernate.dialect">
- org.hibernate.dialect.SQLServerDialect
- </prop>
- 添加评论
00
Java代码
- private ApplicationContext cxt = this.getApplicationContext();
- private StudentDao studentDao = (StudentDaoHibernate)cxt.getBean("studentDao");
studentDao 对象直接 new 的话里面是没有Hibernate上下文的。
只能取得在配置文件中自动生成的实例
getHibernateTemplate()为NUll的更多相关文章
- 《深入理解JAVA虚拟机》笔记1
java程序运行时的内存空间,按照虚拟机规范有下面几项: )程序计数器 指示下条命令执行地址.当然是线程私有,不然线程怎么能并行的起来. 不重要,占内存很小,忽略不计. )方法区 这个名字很让我迷惑. ...
- 【转】getHibernateTemplate出现的所有find方法的总结
一.find(String queryString); 示例:this.getHibernateTemplate().find("from bean.User"); 返回所有Use ...
- getHibernateTemplate().find()
find(String queryString, Object[] values); 这个方法后者的参数必须是一个数组,而不能是一个List. List ul=getHibernateTemplate ...
- getHibernateTemplate()
getHibernateTemplate 前提条件:你的类必须继承HibernateDaoSupport 一: 回调函数: public List getList(){ return (List ...
- hql Hibernate.gethibernatetemplate()
1. find(String hql); //普通查询 示例:this.gethibernateTemplate().find("from User"); 2. find(Str ...
- [转]getHibernateTemplate出现的所有find方法的总结
一.find(String queryString); 示例:this.getHibernateTemplate().find("from bean.User"); 返回所有Use ...
- hibernate中 criteria.setProjection(Projections.rowCount()).uniqueResult()为null的Bug
在hibernate中,在查询总数时,会使用如下方法; public Integer getCount(final DetachedCriteria detachedCriteria) { ...
- 关于HibernateDaoSupport中的getHibernateTemplate().execute及executeFind方法
转自:https://blog.csdn.net/angus_17/article/details/8501668 1. 这两个方法都是为了Spring在接管Hibernate之后,可以对Hibern ...
- Hibernate hql getHibernateTemplate()常用方法汇总
转自:https://www.iteye.com/blog/zwdsmileface-2191943 getHibernateTemplate()常用方法 一.find(String queryStr ...
随机推荐
- codeblocks 配置交叉编译和调试环境
我要用codeblocks交叉编译和调试arm开发板上的程序,宿主机是ubuntu12.04.开发板是嵌入式linux操作系统. 1.配置交叉编译环境 由上到下,1处直接选择即可.2处是你交叉编译器安 ...
- 理解JavaScript设计模式与开发应用中发布-订阅模式的最终版代码
最近拜读了曾探所著的<JavaScript设计模式与开发应用>一书,在读到发布-订阅模式一章时,作者不仅给出了基本模式的通用版本的发布-订阅模式的代码,最后还做出了扩展,给该模式增加了离线 ...
- POJ 2533
最长上升子序列裸题在网上看到有两种方法...一种复杂度O(N^2),一种O(NlogN).orz O(N^2): #include<cstdio> #define N 1001 int m ...
- C++模板实例化(1)
On-Demand实例化 当C++编译器遇到模板特化的时候,他会利用所给的实参替换对应的模板参数,从而产生该模板的特化.该过程是自动进行的.有时候也会被称为隐式实例化,或者是自动实例化. on-dem ...
- MD5加密方式
MD5加密是一种安全系数比较高的加密方式,具有不可逆的加密特征,就是很难进行破解,现在对MD5加密进行破解的方式还是采用跑数据库的方式,时间比较长,耗费性能比较大,所以一般的破解都是要收费的. C#中 ...
- 去除wordpress由代发
在服务器上安装好wordpress后,通过程序发送邮件却显示...由<www@hostname>代发,解决办法很简单:进入程序文件夹wp-includes修改pluggable.php文件 ...
- JavaScript ==和===
== : 值等 === :恒等(引用等) ref: http://blog.csdn.net/wang171838/article/details/8554305 JavaScript支持“=”.“ ...
- c# 刻度:毫米 英寸 像素转换
从目前所掌握的资料来看,c#程序中将毫米转换像素的方法无非两种: 第一种: 1: /// <summary> 2: /// 以毫米为单位的显示宽度 3: /// </summary& ...
- WPF自定义控件(二)——TextBox
和之前一样,先来看看效果: 这个TextBox可设置水印,可设置必填和正则表达式验证. 验证?没错,就是验证! 就是在输入完成后,控件一旦失去焦点就会自动验证!会根据我开放出来的“是否可以为空”属性进 ...
- CrossDomain.xml的作用及其简单用法
使用crossdomain.xml让Flash可以跨域传输数据 本文来自http://www.mzwu.com/article.asp?id=975 一.概述 位于www.mzwu.com域中的SWF ...