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;已经去掉
数据库方言也该过来了
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上下文的。
只能取得在配置文件中自动生成的实例
转载于:https://www.cnblogs.com/Struts-pring/p/3937779.html
getHibernateTemplate()为NUll相关推荐
- Hibernate二级缓存的使用
1启用Hibernate二级缓存 Hibernate二级缓存分为两部分,class缓存和查询缓存,其获取对象的方式有所不同,但两者也有联系,查询缓存必须以class缓存为基础才能起作用,否则只会使效率 ...
- Hibernate 二级缓存使用
1启用Hibernate二级缓存 Hibernate二级缓存分为两部分,class缓存和查询缓存,其获取对象的方式有所不同,但两者也有联系,查询缓存必须以class缓存为基础才能起作用,否则只会使效率 ...
- 中国最新行政地区表(mysql)
在网上找了很多行政地区表,但是都没有最新的mysql版本,我自己整理了一份,供xdjm们参考: DROP TABLE IF EXISTS `region`; CREATE TABLE `region` ...
- 2019年全国省市区代码Oracle数据库脚本
delete from DM_GB_B_ZHRMGHGXZQHDM; insert into DM_GB_B_ZHRMGHGXZQHDM (DM, MC, SM, ZT, ZHGXSJ) values ...
- 关于HibernateDaoSupport中的getHibernateTemplate().execute及executeFind方法
转自:https://blog.csdn.net/angus_17/article/details/8501668 1. 这两个方法都是为了Spring在接管Hibernate之后,可以对Hibern ...
- hql Hibernate.gethibernatetemplate()
1. find(String hql); //普通查询 示例:this.gethibernateTemplate().find("from User"); 2. find(Str ...
- Hibernate hql getHibernateTemplate()常用方法汇总
getHibernateTemplate()常用方法 一.find(String queryString); 示例: Java代码 this.getHibernateTemp ...
- getHibernateTemplate()的find用法大全
一.find(String queryString); 示例:this.getHibernateTemplate().find("from bean.User"); 返回所有Use ...
- Access to XMLHttpRequest at file from origin ‘null‘ has been blocked by CORS policy谷歌浏览器本地打开项目js文件报错
Access to XMLHttpRequest at 'file:///xxxxx/PQ.BaseInfo.proto' from origin 'null' has been blocked by ...
最新文章
- java paint 怎么用_java如何使用paint方法画图
- 思科交换机VTP配置
- php mssql及php mysql_Linux下PHP支持MSSql的配置
- 为什么电脑CPU这么贵?
- ObjectiveC: 变量和数据类型:初始化方法、外部/静态变量、枚举类型、typedef、类型转换、位运算符...
- sql server 2008 r2 打开ssms管理工具,提示“值不能为空”问题
- hadoop启动mysql服务_Hadoop MySQL 服务自启动配置
- 强弱类型,动态静态语言比较(JAVA,C,C++,Python,Ruby,PHP,Perl)
- java for循环打印平行四边形,正三角形,菱形和空心菱形
- matlab 零速检测,一种基于车辆零速检测的惯性导航误差修正方法与流程
- 图像的仿射变换:cv2.warpAffine()
- IBM MQ部署实施过程详解
- 小米android手机密码忘了怎么解锁,小米手机锁屏密码忘了该如何解决?教你多种办法...
- 怎么用计算机算出一个人的生日,怎样才能在网上查到一个人的生日
- node,core,CPU和GPU的关系
- ctfshow baby杯 六一快乐 部分MISC WriteUp
- 如何采集 APP 上的数据
- 基于B/S架构、可替代付费商业软件的一站式量化交易平台
- MATLAB算法实战应用案例精讲-【自动驾驶】SAE分级
- 比锂效率高 9 倍的未来燃料
热门文章
- mysql 协议测试_mysqlslap压力测试mysql
- python中pd.read_Windows下Python的pd.read_excel()报错
- 迁移学习SSD深度网络模型,实现文本行检测
- 常用CNN网络(AlexNet,GoogleNet,VGG,ResNet,DenseNet,inceptionV4)适合初学者
- 卫星影像的AI分类与识别 线上Top1
- 百度深度学习图像识别决赛代码分享(OCR)
- 昔年浅谈做害虫消杀防护的用什么推广效果好?
- linux中sed和find,Linux运维知识之Linux 之 sed 与 find 命令结合使用
- mysql条件变量单引号_mysql语法
- 【HTML5游戏开发小技巧】RPG情景对话中,令文本逐字输出