【发布时间】:2015-03-05 02:58:40
【问题描述】:
我访问了太多网站,并且还在 stackoverflow for reference 上提出了问题,但我无法在下面找到确切的答案。
我想为Generic DAO Pattern 设计一个架构,而不使用hibernate。
目前我在开发GenericSpringDAOImpl<DomainObject> java 文件时遇到了麻烦。如何在没有hibernate 或者我说使用jdbctemplate 的spring 的情况下制作通用getList() 方法(返回DomainObject 对象)?
我的代码如下:
GenericDAO.java
public interface GenericDAO<DomainObject extends Serializable, KeyType extends Serializable> extends Serializable{
/**
* Give list of all entities of underlying Domain Object.
* @return List of all entities.
*/
public List<DomainObject> getList();
/**
* Returns the total number of Entities that is affected by sql query,.
*
* @param query
* the query
* @return Number of Entities affected By SQL Query.
*/
public int getRecordBySQLQuery(String query);
/**
* Returns Domain object whose Key-value pair matched.
* @param keyName Column name
* @param keyValue any value that is being matched under Column name.
* @return DomainObject
*/
public DomainObject getRecordByKeyandValue(String keyName,Object keyValue);
public DomainObject getRecordByKeysAndValues(String[] keyName,Object[] keyValue);
/**
* Returns list of Domainobjects whose Key-value pair matched.
* @param colname Column name
* @param keyValue List of values.
* @return List<DomainObject> according to the Condition satisfied.
*/
public List<DomainObject> getListByKeyandValue(String colname,List<? extends Object> keyValue);
/**
* Returns the list of Entities according to the condition applied.
* @param condition Condition
* @return List<DomainObject> according to condition satisfied.
*/
public List<DomainObject> getListByCondition(String condition);
/**
* Find Object based on primary key.
* @param id Identifier value is passed.
* @return DomainObject i.e POJO which has the passed id value.
*/
public DomainObject getRecordByPrimaryKey(KeyType id);
/**
* get the list of primary keys based on the condition.
* @param condition Condition
* @return List<KeyType> of Primary Keys according to the Condition.
*/
public List<KeyType> getPrimaryKeyCollection(String condition);
/**
* get the list of primary keys based on the condition.
* @param condition Condition
* @return List<KeyType> of Primary Keys according to the Condition.
*/
public List<KeyType> getPrimaryKeyCollection(String condition,final Object... values);
/**
* Insert the Domain Object that is going to persist into the Database.
* @param object Domain Object which is going to persist into the Database
* @return KeyType Serializable value generated By Hibernate due to session.save().
*/
public KeyType insert(DomainObject object);
/**
* Update the Domain Object.
* @param object Domain Object that is being changed/updated.
* @return 1 if Domain Object is being successfully updated
* 0 if Exception Generation while updating the Object.
*/
public int update(DomainObject object);
/**
* Deleting Domain Object.
*
* @param object
* Domain Object that is going to be delete.
* @return the int
*/
public int delete(DomainObject object);
/**
* Delete Object whose oid(Object Identifier) matched with given Primary Key.
* @param id Identifier value.
*/
public void deleteById(KeyType id);
}
GenericSpringDAOImpl.java
public abstract class GenericDAOSpringImpl<DomainObject extends Serializable, KeyType extends Serializable> implements Serializable, GenericDAO<DomainObject, KeyType>{
@Autowired
private NamedParameterJdbcTemplate jdbcTemplate;
RowMapper<DomainObject> rowMapper;
public NamedParameterJdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(NamedParameterJdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public List<DomainObject> getList(){
/*Develop Code which return DomainObjects
* One way is pass query to getList() but not good approch
*/
return new ArrayList<DomainObject>();
}
/*
Other methods also required to implements.
*/
}
这里的域对象是学生、学校、教师等任何对象。
【问题讨论】:
-
getList() 应该返回什么?你必须给它一些参数来获取,比如创建像
getDomainObjectBySomeValue(int someValue)这样的方法。 -
@Kayaman
getList()方法返回DomainObject的所有对象假设我想获取所有学生然后DomainObject作为学生和getList()方法返回所有学生。 -
如果返回所有对象,则执行 SQL 查询并返回对象。为什么您认为需要将查询作为参数传递?
-
@Kayaman
List<DomainObject> getList(String query){ List<DomainObject> domainObjects = jdbcTemplate.query(query,rowMapper); return domainObjects; }这是我可以实现 getList() 方法的一种方式,但我想要其他方式 -
为了返回所有对象,您将创建一个类似
List<DomainObject> getList() { return jdbcTemplate.query("SELECT * FROM DOMAIN_OBJ", rowMapper); }的方法。但就像我说的,你可能想要限制你获取的内容,所以你需要创建像getDomainsBySize(int size)或getDomainsByLength(int length)这样的方法。
标签: java spring spring-mvc generics genericdao