1. 代码结构
在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().
<transactionManager type="SQLMAP">
<property name="SqlMapConfigResource"
value="com/ibatis/jpetstore/persistence/sqlmapdao/sql/sql-map-config.xml"/>
</transactionManager>
<dao interface="com.ibatis.jpetstore.persistence.iface.ItemDao"
implementation="com.ibatis.jpetstore.persistence.sqlmapdao.ItemSqlMapDao"/>
具体的配置估计还得参考一些东西,唉,这个配置的东西是越来越繁杂了。
不能给一点简单的方式么?
Service层就是直接调用这些dao的方法,返回domain当中定义的领域对象:)
这里的领域对象不是简单的一一映射的关系,也不是完全的get/set方法,可以说是一个稍微rich一点的领域对象。也不能说是很rich吧,和我做BUG管理系统是一样的,不过比我做得好,因为这里的所有领域对象都实现了Serializable接口,而我当年没有实现这个接口。使得领域对象和持久层对象相互转换,sigh。
在给表示层用的BEAN中,具体还没有仔细看,不过居然有那么多的方法,改天得好好看一下。(TODO)