SSH插入数据,报空指针???

时间:2021-06-21 22:19:02
SSH做了一个小例子,save的时候报空指针,主要是hibernate封装jdbc时报空指针,代码如下:
ACTION:UserService userService = new UserService();
UserDao userDao = new UserDao();
User user = new User();
user.setName(name);
user.setPassword(password);
user.setEmail(email);
user.setPhone(phone);
user.setCompany(company);
user.setAddress(address);
user.setCreateTime(new Date());
user.setModificationTime(new Date());
37行------------- userDao.save(user)-------------------------------------------
暂时没调用service, dao的代码:
@Repository
public class UserDao extends HibernateDao<User> {
}
-------------------------------------------
HibernateDao里面的save部分代码:
public void save(T o) {
getHibernateTemplate().saveOrUpdate(o);
}
--------------------------------------------
spring.xml:
<context:annotation-config />
<context:component-scan base-package="com.shop.dao" />
<context:component-scan base-package="com.shop.service" />
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>

       <property name="minPoolSize" value="5"/>
       <property name="maxPoolSize" value="30"/>
       <property name="acquireIncrement" value="5"/>
       <property name="maxIdleTime" value="120"/>
       <property name="maxStatements" value="100"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.shop.entity" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.current_session_context_class">thread</prop>
                
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.bytecode.use_reflection_optimizer">true</prop>
<prop key="hibernate.hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.jdbc.use_streams_for_binary">true</prop>
<prop key="hibernate.jdbc.fetch_size">50</prop>
<prop key="hibernate.jdbc.batch_size">50</prop>
<prop key="hibernate.autoReconnect">true</prop>
</props>
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"><ref bean="sessionFactory"/></property>
</bean>
<!-- 支持@Transactional -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>    

<!-- 支持@AspectJ -->
<aop:aspectj-autoproxy />
--------------------------------------------------------------------------
报错的代码就是空指针,没头绪啊:
java.lang.NullPointerException 
    com.shop.dao.base.HibernateDao.save(HibernateDao.java:672)
    com.shop.action.RegisterAction.execute(RegisterAction.java:37)


前辈们帮帮忙看看。。。愁死我了

22 个解决方案

#1


com.shop.dao.base.HibernateDao.save(HibernateDao.java:672)

这个文件的 672 行是啥?

#2


public void save(T o) {
 getHibernateTemplate().saveOrUpdate(o);
 }
引用 1 楼  的回复:
com.shop.dao.base.HibernateDao.save(HibernateDao.java:672)

这个文件的 672 行是啥?

#3


UserDao userDao = new UserDao();
dao能这样初始化?

#4


那个HibernateDao中是否注入了dataSource ? 

#5


自动装配也不行,我就暂时这样new一下,也不行吗?貌似可以的,System.out.println在dao里面可以输出值
引用 3 楼  的回复:
UserDao userDao = new UserDao();
dao能这样初始化?

#6


在spring.xml配了datasource,在HibernateDao怎么注入?求详细?,
引用 4 楼  的回复:
那个HibernateDao中是否注入了dataSource ?

#7


在线求助啊~

#8


单测试一下dao吧 先

#9


T对象那里传过去的。T对象是空的!

#10


HibernateDao.java:672    
672行!  

#11


672行调用的事这个方法
  public void save(T o) {
  getHibernateTemplate().saveOrUpdate(o);
  }
引用 10 楼  的回复:
HibernateDao.java:672    
672行!

#12


userDao.save(user)调用的事UserDao里面的,继承于hibernateDao里面的save()方法
引用 9 楼  的回复:
T对象那里传过去的。T对象是空的!

#13


一般楼主出现的是空指针由于某某实例没有注入导致在保存的时候无法得到操作数据库的实例变量

可能是dao层 也可能是service层未注入 希望仔细检查

#14


dao save方法里看看o有没有值?

#15


用了Spring 后, 你的dao 还能new 吗? 都是有容器注入的。
首先在你检查了配置无误后,是这样的到dao
如果你的是个例子试一试下面的。

BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext.xml");

IUserDao udao= (也许这里是你的接口)bf.getBean("dao的名字");

#16


嗯就是因为没有注入进来报空指针,service暂时没有调用,不知问题出在哪里?
引用 13 楼  的回复:
一般楼主出现的是空指针由于某某实例没有注入导致在保存的时候无法得到操作数据库的实例变量

可能是dao层 也可能是service层未注入 希望仔细检查

#17


有值的
引用 14 楼  的回复:
dao save方法里看看o有没有值?

#18


debug你的程序 看那个对象是空。。

#19


sessionFactory没有注入。。。

#20


spring已经注入了啊!Quote=引用 19 楼  的回复:]

sessionFactory没有注入。。。
[/Quote]

#21


用了它的框架以后,不能用new来实例化,只能靠框架来提供

#22


用在action里面用这样注入dao就可以:
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");  
UserDao userDao = ctx.getBean("userDao",UserDao.class); 
但是这样太麻烦了,哎...

#1


com.shop.dao.base.HibernateDao.save(HibernateDao.java:672)

这个文件的 672 行是啥?

#2


public void save(T o) {
 getHibernateTemplate().saveOrUpdate(o);
 }
引用 1 楼  的回复:
com.shop.dao.base.HibernateDao.save(HibernateDao.java:672)

这个文件的 672 行是啥?

#3


UserDao userDao = new UserDao();
dao能这样初始化?

#4


那个HibernateDao中是否注入了dataSource ? 

#5


自动装配也不行,我就暂时这样new一下,也不行吗?貌似可以的,System.out.println在dao里面可以输出值
引用 3 楼  的回复:
UserDao userDao = new UserDao();
dao能这样初始化?

#6


在spring.xml配了datasource,在HibernateDao怎么注入?求详细?,
引用 4 楼  的回复:
那个HibernateDao中是否注入了dataSource ?

#7


在线求助啊~

#8


单测试一下dao吧 先

#9


T对象那里传过去的。T对象是空的!

#10


HibernateDao.java:672    
672行!  

#11


672行调用的事这个方法
  public void save(T o) {
  getHibernateTemplate().saveOrUpdate(o);
  }
引用 10 楼  的回复:
HibernateDao.java:672    
672行!

#12


userDao.save(user)调用的事UserDao里面的,继承于hibernateDao里面的save()方法
引用 9 楼  的回复:
T对象那里传过去的。T对象是空的!

#13


一般楼主出现的是空指针由于某某实例没有注入导致在保存的时候无法得到操作数据库的实例变量

可能是dao层 也可能是service层未注入 希望仔细检查

#14


dao save方法里看看o有没有值?

#15


用了Spring 后, 你的dao 还能new 吗? 都是有容器注入的。
首先在你检查了配置无误后,是这样的到dao
如果你的是个例子试一试下面的。

BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext.xml");

IUserDao udao= (也许这里是你的接口)bf.getBean("dao的名字");

#16


嗯就是因为没有注入进来报空指针,service暂时没有调用,不知问题出在哪里?
引用 13 楼  的回复:
一般楼主出现的是空指针由于某某实例没有注入导致在保存的时候无法得到操作数据库的实例变量

可能是dao层 也可能是service层未注入 希望仔细检查

#17


有值的
引用 14 楼  的回复:
dao save方法里看看o有没有值?

#18


debug你的程序 看那个对象是空。。

#19


sessionFactory没有注入。。。

#20


spring已经注入了啊!Quote=引用 19 楼  的回复:]

sessionFactory没有注入。。。
[/Quote]

#21


用了它的框架以后,不能用new来实例化,只能靠框架来提供

#22


用在action里面用这样注入dao就可以:
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");  
UserDao userDao = ctx.getBean("userDao",UserDao.class); 
但是这样太麻烦了,哎...