我目前采用spring+struts+ibatis 准备在dao中使用泛型,然后定义了如下类,//定义dao的接口用了泛型
public interface EntityDAO<T>//定义dao的ibatis实现
public class IbatisEntityDao<T> extends IbatisGenericDao implements EntityDAO<T>//ibatisdao的工具类
public class IbatisGenericDao extends SqlMapClientDaoSupport//定义了一个实际的dao接口
public interface UserAppsDetailsDao extends EntityDAO<UserAppsDetails>//定义了一个实际的dao接口的实现
public class UserAppsDetailsDaoImpl extends IbatisEntityDao<UserAppsDetails> implements UserAppsDetailsDao//model类
public class UserAppsDetails
//service类如下
public class UserAppsDetailsServiceImpl
//在这个类里面定义了属性如下
private UserAppsDetailsDao entityDao//action类
public class UserAppsDetailsAction
//这个action类里面定义了一个 service属性
private UserAppsDetailsService entityService;接着我在spring的配置文件里这么进行配置 <bean id="userAppsDetailsDao" class="com.longtop.sysnet.dao.ibatis.UserAppsDetailsDaoImpl" scope="prototype" >
<property name="sqlMapClient" ref="sqlMapClientPortal"></property>
</bean>
<bean id="userAppsDetailsService" class="com.longtop.sysnet.service.entityservice.UserAppsDetailsServiceImpl" >
<property name="entityDao" ref="userAppsDetailsDao"/>
</bean>
<bean id="userAppsDetailsAction_pageQuery" class="com.longtop.sysnet.controler.struts2.UserAppsDetailsAction" >
<property name="entityService" ref="userAppsDetailsService"/>
</bean>结果,
我通过http://localhost:7001/webroot/userAppsDetailsAction_pageQuery 访问的时候发现
在action类UserAppsDetailsAction 里的service属性 entityService 始终都是为空,怎么也注入不了不知怎么搞的
请问哪位高手能够告诉我,是不是我的配置文件写得不对
public interface EntityDAO<T>//定义dao的ibatis实现
public class IbatisEntityDao<T> extends IbatisGenericDao implements EntityDAO<T>//ibatisdao的工具类
public class IbatisGenericDao extends SqlMapClientDaoSupport//定义了一个实际的dao接口
public interface UserAppsDetailsDao extends EntityDAO<UserAppsDetails>//定义了一个实际的dao接口的实现
public class UserAppsDetailsDaoImpl extends IbatisEntityDao<UserAppsDetails> implements UserAppsDetailsDao//model类
public class UserAppsDetails
//service类如下
public class UserAppsDetailsServiceImpl
//在这个类里面定义了属性如下
private UserAppsDetailsDao entityDao//action类
public class UserAppsDetailsAction
//这个action类里面定义了一个 service属性
private UserAppsDetailsService entityService;接着我在spring的配置文件里这么进行配置 <bean id="userAppsDetailsDao" class="com.longtop.sysnet.dao.ibatis.UserAppsDetailsDaoImpl" scope="prototype" >
<property name="sqlMapClient" ref="sqlMapClientPortal"></property>
</bean>
<bean id="userAppsDetailsService" class="com.longtop.sysnet.service.entityservice.UserAppsDetailsServiceImpl" >
<property name="entityDao" ref="userAppsDetailsDao"/>
</bean>
<bean id="userAppsDetailsAction_pageQuery" class="com.longtop.sysnet.controler.struts2.UserAppsDetailsAction" >
<property name="entityService" ref="userAppsDetailsService"/>
</bean>结果,
我通过http://localhost:7001/webroot/userAppsDetailsAction_pageQuery 访问的时候发现
在action类UserAppsDetailsAction 里的service属性 entityService 始终都是为空,怎么也注入不了不知怎么搞的
请问哪位高手能够告诉我,是不是我的配置文件写得不对
解决方案 »
- jfreechart热点,map跑到页面头部了!
- quartz 定时任务 开启两次
- 求Spring IDE 2.0.6
- 面试题讨论~~:)
- json map 解析
- Linux系统中,Weblogic下发布程序发生Exception: java.lang.NoClassDefFoundError: sun/awt/motif/MToolkit
- 把一个原本提供EJB接口的JAVA系统改成提供WEB SERVICE供外部调用有多难?
- 装完weblogic7.0后,为什么进入console不能看到左边的树型目录?而就是一个图象不能显示的标志
- 谁能帮我解释一下J2EE,J2ME,J2SE,EJB,BEAN的区别,及都能做些什么?
- 谁做过xml加密?
- 请问EJB3和Hibernate的Annotation是否完全兼容
- 关于时间格式处理
package com.longtop.sysnet.dao;
import java.util.List;
import java.util.Map;import org.apache.commons.lang.StringUtils;import com.longtop.sysnet.utility.Page;public interface EntityDAO<T> {
/**
* 根据主键查找对象
*
* @param id
* 主键值
* @return 对象实体
*/
T selectOne(java.util.Map param); List<T> selectAll(Map param);
/**
* 新增对象到数据库
*
* @param o
* 对象实体
*/
Object insert(T o); /**
* 更新对象实体到数据库
*
* @param o
* 对象实体
*/
Integer update(T o); /**
* 根据主键删除对象
*
* @param id
* 主键值
*/
Integer delete(T o);
/**
* 分页查询.
*/
Page pagedQuery(Map parameterObject, int start, int limit); /**
* 分页查询.
*/
Page pagedQuery(Map parameterObject, int start, int limit,
String countSqlId, String pageQuerySqlId);
/**
* 更新对象信息
*
* @param statementId
* sql语句名称后缀
* @param parameters
* sql参数
*/
Integer update(String statementId, Map parameters); Integer delete(String statementId, Map parameters);
Object insert(String statementId, Map parameters);
/**
* sql查询单个对象
*
* @param statementId
* sql语句名称后缀
* @param parameters
* sql参数
* @return 查询结果
*/
T queryForObject(String statementId, Object parameters); /**
* sql查询列表
*
* @param statementId
* sql语句名称后缀
* @param parameters
* sql参数
* @return 查询结果
*/
List<T> queryForList(String statementId, Object parameters);
}
package com.longtop.sysnet.dao.ibatis;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.apache.commons.lang.StringUtils;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.util.Assert;import com.longtop.sysnet.dao.EntityDAO;
import com.longtop.sysnet.dao.GenericsUtils;
import com.longtop.sysnet.utility.Page;
public class IbatisEntityDao<T> extends SqlMapClientDaoSupport implements
EntityDAO<T> {
public static final String POSTFIX_INSERT = ".insert"; public static final String POSTFIX_UPDATE = ".update"; public static final String POSTFIX_DELETE = ".delete"; public static final String POSTFIX_SELECT_ONE = ".selectOne"; public static final String POSTFIX_GETALL = ".selectAll"; public static final String POSTFIX_COUNT = ".count"; public static final String POSTFIX_QUERY = ".pageQuery";
/**
* DAO所管理的Entity类型.
*/
protected Class<T> entityClass; protected String primaryKeyName; /**
* 在构造函数中将泛型T.class赋给entityClass.
*/ public IbatisEntityDao(Class<T> entityClass) {
entityClass =entityClass;// GenericsUtils.getSuperClassGenricType(getClass());
} public IbatisEntityDao() {
entityClass =GenericsUtils.getSuperClassGenricType(getClass());
}
/**
* 根据ID获取对象.
*/
public T selectOne(Map param) {
T o = (T) getSqlMapClientTemplate().queryForObject(
getStatementId(entityClass, IbatisGenericDao.POSTFIX_SELECT_ONE),
param);
return o;
} public List<T> selectAll(Map param) {
List<T> list = (List<T>) getSqlMapClientTemplate().queryForList(
getStatementId(entityClass, IbatisGenericDao.POSTFIX_GETALL),param);
return list;
} /**
* 取得entityClass. <p/> JDK1.4不支持泛型的子类可以抛开Class<T> entityClass,重载此函数达到相同效果。
*/
protected Class<T> getEntityClass() {
return entityClass;
}
/**
* 分页查询.
*/
public Page pagedQuery(Map parameterObject, int start, int limit) {
return pagedQuery(getEntityClass(), parameterObject, start, limit);
} /**
* 分页查询.
*/
public Page pagedQuery(Map parameterObject, int start, int limit,
String countSqlId, String pageQuerySqlId) {
if (StringUtils.isNotBlank(pageQuerySqlId))
return pagedQuery(getEntityClass(), parameterObject, start, limit,
countSqlId, pageQuerySqlId);
else {
return pagedQuery(getEntityClass(), parameterObject, start, limit);
}
} /**
* 分页查询函数,使用PaginatedList.
*
* @param start
*@param limit @return 含17117717记录数和当前页数据的Page对象.
*@param parameterObject 该参数包括:
*/
public Page pagedQuery(Class<T> entityClass, Map parameterObject, int start,
int limit) { Assert.isTrue(start >= 0, "pageNo should start from 0"); // 计算总数
Integer totalCount = (Integer) getSqlMapClientTemplate()
.queryForObject(getStatementId(entityClass,
IbatisGenericDao.POSTFIX_COUNT) ,
parameterObject); // 如果没有数据则返回Empty Page
Assert.notNull(totalCount, "totalCount Error"); if (totalCount.intValue() == 0) {
return new Page();
} List list;
int totalPageCount = 0;
int startIndex = 0; // 如果pageSize小于0,则返回所有数捄1177,等同于getAll
if (limit > 0) { // 计算页数
totalPageCount = (totalCount / limit);
totalPageCount += ((totalCount % limit) > 0) ? 1 : 0; // 计算skip数量
if (totalCount > start) {
startIndex = start;
} else {
startIndex = (totalPageCount - 1) * limit;
} if (parameterObject == null)
parameterObject = new HashMap(); parameterObject.put("startIndex", startIndex);
parameterObject.put("endIndex", startIndex+limit); list = getSqlMapClientTemplate()
.queryForList(
getStatementId(entityClass,
IbatisGenericDao.POSTFIX_QUERY),
parameterObject); } else {
list = getSqlMapClientTemplate()
.queryForList(
getStatementId(entityClass,
IbatisGenericDao.POSTFIX_QUERY),
parameterObject);
}
return new Page(parameterObject,startIndex, totalCount, limit, list);
} /**
* 分页查询函数,使用PaginatedList.
*
* @param start
*@param limit @return 含17117717记录数和当前页数据的Page对象.
*/
public Page pagedQuery(Class<T> entityClass, Map parameterObject, int start,
int limit, String countSqlId, String pageQuerySqlId) { Assert.isTrue(start >= 0, "pageNo should start from 0"); // 计算总数
Integer totalCount = (Integer) getSqlMapClientTemplate()
.queryForObject(
getStatementId(entityClass,
countSqlId),
parameterObject); // 如果没有数据则返回Empty Page
Assert.notNull(totalCount, "totalCount Error"); if (totalCount.intValue() == 0) {
return new Page();
} List list;
int totalPageCount = 0;
int startIndex = 0; // 如果pageSize小于0,则返回所有数捄1177,等同于getAll
if (limit > 0) { // 计算页数
totalPageCount = (totalCount / limit);
totalPageCount += ((totalCount % limit) > 0) ? 1 : 0; // 计算skip数量
if (totalCount >= start) {
startIndex = start;
} else {
startIndex = (totalPageCount - 1) * limit;
} if (parameterObject == null)
parameterObject = new HashMap(); parameterObject.put("startIndex", startIndex);
parameterObject.put("endIndex", startIndex+limit); list = getSqlMapClientTemplate()
.queryForList(
getStatementId(entityClass,
pageQuerySqlId),
parameterObject); } else {
list = getSqlMapClientTemplate()
.queryForList(
getStatementId(entityClass,
pageQuerySqlId),
parameterObject);
}
return new Page(parameterObject,startIndex, totalCount, limit, list);
} /**
* 根据ID移除对象.
*/
public Integer delete(T o) {
return getSqlMapClientTemplate().delete(
getStatementId(o.getClass(),
IbatisGenericDao.POSTFIX_DELETE), o);
} /**
* 保存对象. 为了实现IEntityDao 我在内部使用了insert和upate 2个方法.
*/
public Object insert(T o) {
return getSqlMapClientTemplate().insert(
getStatementId(o.getClass(), IbatisGenericDao.POSTFIX_INSERT),
o);
} public Integer update(T o) {
return getSqlMapClientTemplate().update(
getStatementId(o.getClass(), IbatisGenericDao.POSTFIX_UPDATE),
o);
}public List<T> queryForList(String statementId, Object parameters) {
return getSqlMapClientTemplate().queryForList(
getStatementId(entityClass, statementId), parameters);
} public T queryForObject(String statementId, Object parameters) {
return (T) getSqlMapClientTemplate().queryForObject(
getStatementId(entityClass, statementId), parameters);
} public Integer update(String statementId, Map parameters) {
return getSqlMapClientTemplate().update(
getStatementId(entityClass, statementId), parameters);
}
public Integer delete(String statementId, Map parameters) {
return getSqlMapClientTemplate().delete(
getStatementId(entityClass, statementId), parameters);
} public Object insert(String statementId, Map parameters) {
return getSqlMapClientTemplate().insert(
getStatementId(entityClass, statementId), parameters);
}public void setEntityClass(Class<T> entityClass) {
this.entityClass = entityClass;
}public String getPrimaryKeyName() {
return primaryKeyName;
}public void setPrimaryKeyName(String primaryKeyName) {
this.primaryKeyName = primaryKeyName;
}
/**
* get statement id in SQL Map file
*
* @param entityClass
* entity class
* @param suffix
* suffix
* @return statement id
*/
private String getStatementId(Class entityClass, String suffix) {
String className = entityClass.getName();
String shortName = className.replace(entityClass.getPackage().getName()
+ ".", "");
return shortName + suffix;
} }
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.longtop.sysnet.dao.UserAppsDetailsDao;
import com.longtop.sysnet.model.UserAppsDetails;public class UserAppsDetailsDaoImpl extends IbatisEntityDao<UserAppsDetails> implements UserAppsDetailsDao {
public UserAppsDetailsDaoImpl(Class persistentClass) {
super(persistentClass);
//logger.debug("child class constructor " + persistentClass);
} }package com.longtop.sysnet.service.entityservice;import java.util.Map;import com.longtop.sysnet.model.UserAppsDetails;
import com.longtop.sysnet.utility.Page;public interface EntityService<T> { Object insert(T paramModel);
Boolean update(T paramModel);
Boolean delete(T paramModel);
Page pageQuery(String pageName,Map param, int start, int limit);
T selectOne(Map param);
}
package com.longtop.sysnet.service.entityservice;import java.util.Map;import org.apache.poi.hssf.record.formula.functions.T;import com.longtop.sysnet.dao.EntityDAO;
import com.longtop.sysnet.dao.ExeSqlDAO;import com.longtop.sysnet.utility.Page;public class EntityServiceImpl<T> implements EntityService<T> {
private EntityDAO entityDao;
public EntityDAO getEntityDao() {
return entityDao;
}// public UserAppsDetailsDao getDaoObj(){
// return this.entityDao;
// }
// public ExeSqlDAO getSqlUtilObj(){
// return this.sqlUtil;
// }
public void setEntityDao(EntityDAO entityDao) {
this.entityDao = entityDao;
}
public Boolean delete(T paramModel) {
Boolean success=false;
if(this.entityDao.delete(paramModel)>0){
success=true;
}else{
success=false;
} return success;
} public Boolean update(T paramModel) {
Boolean success=false;
if(this.entityDao.update(paramModel)>0){
success=true;
}else{
success=false;
}
return success;
}
//插入操作返回主键
public Object insert(T paramModel) {
return this.entityDao.insert(paramModel);
} public Page pageQuery(String pageName, Map param, int start, int limit) { Page page= this.entityDao.pagedQuery(param, start, limit);
page.setPageName(pageName);
return page;
} public T selectOne(Map param) { return (T)this.entityDao.selectOne(param);
}}
package com.longtop.sysnet.service.entityservice;import java.util.Map;import com.longtop.sysnet.dao.ExeSqlDAO;
import com.longtop.sysnet.dao.UserAppsDetailsDao;
import com.longtop.sysnet.model.UserAppsDetails;
import com.longtop.sysnet.utility.Page;public interface UserAppsDetailsService extends EntityService<UserAppsDetails> {
}
package com.longtop.sysnet.service.entityservice;import java.util.Map;import com.longtop.sysnet.dao.ExeSqlDAO;
import com.longtop.sysnet.dao.UserAppsDetailsDao;
import com.longtop.sysnet.dao.ibatis.IbatisEntityDao;
import com.longtop.sysnet.model.UserAppsDetails;
import com.longtop.sysnet.utility.Page;public class UserAppsDetailsServiceImpl extends EntityServiceImpl<UserAppsDetails> implements UserAppsDetailsService { private UserAppsDetailsDao userAppsDetailsDao;
private ExeSqlDAO sqlUtil;
public UserAppsDetailsDao getUserAppsDetailsDao() {
return userAppsDetailsDao;
}
public void setUserAppsDetailsDao(UserAppsDetailsDao userAppsDetailsDao) {
this.userAppsDetailsDao = userAppsDetailsDao;
super.setEntityDao(userAppsDetailsDao);
} public ExeSqlDAO getSqlUtil() {
return sqlUtil;
} public void setSqlUtil(ExeSqlDAO sqlUtil) {
this.sqlUtil = sqlUtil;
}
} <bean id="userAppsDetailsDao" class="com.longtop.sysnet.dao.ibatis.UserAppsDetailsDaoImpl" >
<constructor-arg>
<value>com.longtop.sysnet.model.UserAppsDetails</value>
</constructor-arg>
</bean> <bean id="userAppsDetailsService" class="com.longtop.sysnet.service.entityservice.UserAppsDetailsServiceImpl" >
<property name="entityDao" ref="userAppsDetailsDao"/>
<property name="sqlUtil" ref="exeSqlDao"/>
</bean>
<bean id="userAppsDetailsPageQueryAction" class="com.longtop.sysnet.controler.struts2.UserAppsDetailsAction">
<property name="entityService" ref="userAppsDetailsService"/>
</bean>
请大家看看,我有哪些地方弄错了。试了n种办法都没成功,真是的