ibatis现在用的人估计很少了,但是一些比较老的项目还是会在用,今天就iBatis和Spring的整合说一说。
一、首先我们需要在spring的配置文件里面添加
1.数据源
<bean id="userDataSource" parent="dataSource">
<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:mysql://db.taobao.com:3306/tbtx_user</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>12345678</value>
</property>
</bean>
2.Spring提供的用于构建ibatis的客户端sqlmapclient对象工厂
<bean id="userSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sqlmap-config-user.xml" />
<property name="dataSource" ref="userDataSource" />
</bean>
3.事务
<bean id="userTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="userDataSource" />
</bean>
<bean id="userTransactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="userTransactionManager" />
</bean>
添加这些配置后我们就将iBatis和Spring基本整合了,此整合提供了数据库的数据源,iBatis的操作数据库客户端的对象工厂,可以获取对象,事务控制
二、我们在添加DAO来操作数据库,创建一个IBasicDAO 接口,提供基本的CURD,而DAO还需要一个SqlMapClientTemplate 对象来操作数据库,而SqlMapClientDaoSupport 类里面有getSqlMapClientTemplate ()方法,我们可以将一个基础的DAO继承SqlMapClientDaoSupport ,例如
public interface IBasicDAO {
public abstract Object insertObject(String sqlId, Object obj);
//还可以定义其他的方法,这里不一一列举了
}
public class BasicDAOIbatis extends SqlMapClientDaoSupport implements IBasicDAO {
/**
* 保存对象
*
* @param sqlId
* @param object
* @return
*/
public Object insertObject(String sqlId, Object obj) {
Assert.notNull(obj, "要保存的对象类型不能为空");
return this.getSqlMapClientTemplate().insert(sqlId, obj);
}
}
基础的功能和DAO定义好了,我们可以根据不同的业务逻辑来定义自己的DAO,例如
public class ContentDAOI{
public List<ContentRelateItem> queryContentItems(List<Integer> itemIds);public
}
DAO的实现类ContentDAOImpl
public class ContentDAOImpl extends BasicDAOIbatis implements IContentDAO {
@Override
public List<ContentRelateItem> queryContentItems(List<Integer> itemIds) {
return (List<ContentRelateItem>) this.getSqlMapClientTemplate().queryForList("findContentItemsByIds", itemIds);
}
}
这里最关的一步还是获取SqlMapClientTemplate对象,使DAO能有操作数据库的能力。
这其实就是MVC中的M了,其他的VC可以根据不同的框架在自行去创建了。