在persistence下面有iface, sqlmapdao package以及DaoConfig.java, dao.xml文件。
iface就是定义dao的接口;sqlmapdao中定义dao的实现,sqlmapdao/sql包下是每个sqlmap所对应的xml文件,该文件就定义了每个mapped statement or 动态的statement; sql-map-config.xml就是定义iBatis的一些设置信息;到此为止,和以前都是一样的,没有什么特别的地方。
但是dao的实现有一些不同。所有的dao都继承于BaseSqlMapDao类
public class BaseSqlMapDao extends SqlMapDaoTemplate { protected static final int PAGE_SIZE = 4; public BaseSqlMapDao(DaoManager daoManager) { super(daoManager); } }
可以看到SqlMapDaoTemplate和sping中的dao***Template比较相似,都是定义Dao的一些常用方法,具体的dao可以调用这个Template的方法完成具体的DAO操作。
public SqlMapDaoTemplate(DaoManager daoManager); public int update(java.lang.String id, java.lang.Object parameterObject); queryForObject, queryForList, queryForMap queryForPaginatedList
等等操作方法。
todo:DaoManager具体还不知道是干什么用的,看名字应该能猜出点东西来。
哦,DaoManager是根据后面的dao.xml来生成的Dao的管理类,主要是:
getDao(),getTransaction(), startTransaction(), endTransaction(), commitTransaction().
具体的配置估计还得参考一些东西,唉,这个配置的东西是越来越繁杂了。
不能给一点简单的方式么?
Service层就是直接调用这些dao的方法,返回domain当中定义的领域对象:)
这里的领域对象不是简单的一一映射的关系,也不是完全的get/set方法,可以说是一个稍微rich一点的领域对象。也不能说是很rich吧,和我做BUG管理系统是一样的,不过比我做得好,因为这里的所有领域对象都实现了Serializable接口,而我当年没有实现这个接口。使得领域对象和持久层对象相互转换,sigh。
在给表示层用的BEAN中,具体还没有仔细看,不过居然有那么多的方法,改天得好好看一下。(TODO)