getHibernateTemplate()为NUll
2014-08-26 17:28
330 查看
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;已经去掉
数据库方言也该过来了
Spring
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
楼主试下一楼的解决方法,个人觉得也是这样
2009年11月13日 16:02
satanest
137
0 0 0
添加评论
00
楼主介个配置错误实在是太多了哦~
1楼2楼3楼说的都对~
你按照1楼说的做吧,分给1楼吧.
2009年11月13日 15:57
energykey
919
0 0 0
添加评论
00
用
Java代码
org.hibernate.dialect.SQLServerDialect
看来也是可以的,整个运行都没问题,没出现楼主说的问题
2009年11月13日 14:25
myali88
3108
0 0 0
添加评论
00
Java代码
<property name="url" value="jdbc:mysql://localhost:3306/jjufriend">
为什么你数据库用的是MySQL,而sessionFactory里的方言设置是
Java代码
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
,用的是SQLServer的,这肯定不行吧?!
2009年11月13日 14:04
myali88
3108
0 0 0
添加评论
00
Java代码
private ApplicationContext cxt = this.getApplicationContext();
private StudentDao studentDao = (StudentDaoHibernate)cxt.getBean("studentDao");
studentDao 对象直接 new 的话里面是没有Hibernate上下文的。
只能取得在配置文件中自动生成的实例
相关文章推荐
- 解决this.getHibernateTemplate()==null的问题
- spring getHibernateTemplate() 返回null的问题
- getHibernateTemplate()中的方法报java.lang.NullPointerException的解决办法
- getHibernateTemplate() 一直报NullPointerException 错误
- getHibernateTemplate().find java.lang.NullPointerException
- this.getHibernateTemplate()为null
- 关于使用super.getHibernateTemplate()中的方法报java.lang.NullPointerException的解决办法
- getHibernateTemplate().execute(new HibernateCallback())方法
- Spring 中常用的hql查询方法(getHibernateTemplate())
- getHibernateTemplate()
- getHibernateTemplate().find方法详解
- Spring中常用的hql查询方法(getHibernateTemplate())(转)
- SSH利用getHibernateTemplate().update更新所需要更新的部分字段
- Hibernate hql getHibernateTemplate()常用方法汇总
- gethibernatetemplate find条件查询方法
- getHibernateTemplate().find()方法
- Hibernate的getHibernateTemplate()的使用
- getHibernateTemplate.find 有多个参数的用法
- Spring 中常用的hql查询方法(getHibernateTemplate())
- Spring中常用的hql查询方法 (getHibernateTemplate())