spring,ibatis的笔记

在上文中,我们把iface包下的DAO接口归为业务层,在这里不需要做修改。ibatis的sql配置文件也不需要改。要改的是DAO实现类,并在spring的配置文件中配置起来。

1、修改基类

所有的DAO实现类都继承于BaseSqlMapDao类。修改BaseSqlMapDao类如下:



public class BaseSqlMapDao extends SqlMapClientDaoSupport {  protected static final int PAGE_SIZE = 4;  protected SqlMapClientTemplate smcTemplate = this.getSqlMapClientTemplate();  public BaseSqlMapDao() { }}


使BaseSqlMapDao类改为继承于Spring提供的SqlMapClientDaoSupport类,并定义了一个保护属性 smcTemplate,其类型为SqlMapClientTemplate。关于SqlMapClientTemplate类的详细说明请参照附录中的 "Spring中文参考手册"

2、修改DAO实现类

所有的DAO实现类还是继承于BaseSqlMapDao类,实现相应的DAO接口,但其相应的DAO操作委托SqlMapClientTemplate来执行,以AccountSqlMapDao类为例,部分代码如下:



    public List getUsernameList() {    return smcTemplate.queryForList("getUsernameList", null);  }  public Account getAccount(String username, String password) {    Account account = new Account();    account.setUsername(username);    account.setPassword(password);    return (Account) smcTemplate.queryForObject("getAccountByUsernameAndPassword", account);  }  public void insertAccount(Account account) {  smcTemplate.update("insertAccount", account);  smcTemplate.update("insertProfile", account);  smcTemplate.update("insertSignon", account);  }  


就这么简单,所有函数的签名都是一样的,只需要查找替换就可以了!

3、除去工厂类以及相应的配置文件

除去DaoConfig.java这个DAO工厂类和相应的配置文件dao.xml,因为DAO的获取现在要用spring来管理。

4、DAO在Spring中的配置(applicationContext.xml)



    <bean id="dataSource"         class="org.springframework.jdbc.datasource.DriverManagerDataSource">        <property name="driverClassName">            <value>org.hsqldb.jdbcDriver</value>        </property>        <property name="url">            <value>jdbc:hsqldb:hsql://localhost/xdb</value>        </property>        <property name="username">            <value>sa</value>        </property>        <property name="password">            <value></value>        </property>    </bean>        <!-- ibatis sqlMapClient config -->    <bean id="sqlMapClient"         class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">        <property name="configLocation">            <value>                 classpath:com\ibatis\jpetstore\persistence\sqlmapdao\sql\sql-map-config.xml            </value>        </property>        <property name="dataSource">            <ref bean="dataSource"/>        </property>        </bean>    <!-- Transactions -->    <bean id="TransactionManager"         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource">            <ref bean="dataSource"/>        </property>    </bean>    <!-- persistence layer -->    <bean id="AccountDao"         class="com.ibatis.jpetstore.persistence.sqlmapdao.AccountSqlMapDao">        <property name="sqlMapClient">            <ref local="sqlMapClient"/>        </property>    </bean>    


具体的语法请参照附录中的"Spring中文参考手册"。在这里只简单解释一下:

1. 我们首先创建一个数据源dataSource,在这里配置的是hsqldb数据库。如果是ORACLE数据库,driverClassName的值是 "oracle.jdbc.driver.OracleDriver",URL的值类似于"jdbc:oracle:thin:@wugfMobile: 1521:cdcf"。数据源现在由spring来管理,那么现在我们就可以去掉properties目录下database.properties这个 配置文件了;还有不要忘记修改sql-map-config.xml,去掉<properties resource="properties/database.properties"/>对它的引用。

2. sqlMapClient节点。这个是针对ibatis SqlMap的SqlMapClientFactoryBean配置。实际上配置了一个sqlMapClient的创建工厂类。 configLocation属性配置了ibatis映射文件的名称。dataSource属性指向了使用的数据源,这样所有使用 sqlMapClient的DAO都默认使用了该数据源,除非在DAO的配置中另外显式指定。

3. TransactionManager节点。定义了事务,使用的是DataSourceTransactionManager。

4. 下面就可以定义DAO节点了,如AccountDao,它的实现类是 com.ibatis.jpetstore.persistence.sqlmapdao.AccountSqlMapDao,使用的SQL配置从 sqlMapClient中读取,数据库连接没有特别列出,那么就是默认使用sqlMapClient配置的数据源datasource。

这样,我们就把持久层改造完了,其他的DAO配置类似于AccountDao。怎么样?简单吧。这次有接口了:) AccountDao接口->AccountSqlMapDao实现。

你可能感兴趣的:(DAO,spring,oracle,ibatis,配置管理)