用ssh做的一个小东西,写了泛型dao,然后继承了hibernatedaosupport,然而
在方法里面用getHibnerateTemplate()时总是null。
我用main方法测试都是成功注入的,还有在其它地方自己new一个然后传入sessionFactory,输出sessionFactory和getHibneratemTemplate都是有值的,但是进入方法总是null,我试了一天都解决不了。
前提:我的所有包都引入好了,包括互相协调的包,由于太多,我就贴了一些相关的方法代码,请大家帮我看看。
另外,还有没有更好的写法?或者比hibernateDaoSupport更好用的模板,有的话,请指点一下,谢谢
这个是BaseDao
public interface BaseDao {
void save(T entity);
void update(T entity);
List findAll(Class entityClass);
这是BaseDaoImpl
public class BaseDaoImpl
extends HibernateDaoSupport implements BaseDao {
@Override
public void save(T entity) {
getHibernateTemplate().save(entity);
}
@Override
public void update(T entity) {
getHibernateTemplate().update(entity);
@Override
public List findAll(Class entityClass) {
String hql = "from " + entityClass;
System.out.println("template---"+getHibernateTemplate());
System.out.println("hql---"+hql);
System.out.println("sessionFactory---"+super.getSessionFactory());
return (List)getHibernateTemplate().find(hql);
}
这是BaseService
public interface BaseService {
void save(T entity);
void update(T entity);
List findAll(Class entityClass);
这是BaseServiceImpl
public class BaseServiceImpl
implements BaseService {
private BaseDao<T , ID> baseDao;
public void setBaseDao(BaseDao<T , ID> baseDao){
this.baseDao = baseDao;
}
@Override
public void save(T entity) {
baseDao.save(entity);
}
@Override
public void update(T entity) {
baseDao.update(entity);
}
@Override
public List<T> findAll(Class<T> entityClass) {
return baseDao.findAll(entityClass);
}
这是web.xml
Struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
Struts2
/*
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml
这是applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean>
<bean id="baseDaoImpl" class="com.lamp.dao.impl.BaseDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
```
scope="prototype">
这是action的代码
public class ShowAllContactAction extends ActionSupport{
private List<Contact> resultAllContactList;
private ContactServiceImpl contactServiceImpl;
public void setContactServiceImpl(ContactServiceImpl contactServiceImpl){
this.contactServiceImpl = contactServiceImpl;
}
public String execute(){
resultAllContactList = contactServiceImpl.findAll(Contact.class);
ActionContext.getContext().put("resultAllContactList" , resultAllContactList);
return "SUCCESS";
}
}
这是hibernate配置文件
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="connection.url">jdbc:mysql://localhost:3306/sanke_daily</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="driver_class">com.mysql.jdbc.Driver</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/lamp/entity/Contact.hbm.xml"/>
</session-factory>
</hibernate-configuration>
这是struts.xml
<action name="showAllContactAction" class="showAllContactAction">
<result name="SUCCESS">/jsp/contact/showAllContactSuccess.jsp</result>
</action>
另外,ContactBaseDao、ContactBaseDaoImpl和ContactService、ContactServiceImpl都没有新加的特别的方法,所以都是空的