半年前一个原型统计系统使用的是spring+jdbc模板的组合,随着统计需求和数据量的变化,使用jdbc模板将SQL语句硬编码到JAVA源代码的方法带来的代码维护难度越来越大,扩展也不方便,在重新分析了需求和预期半年年的增长,决定将spring+jdbc模板的组合切换到spring+ibatis模板的组合.
ibatis模板对JDBC的封装非常薄,但是通过给查询"起名字"和声明结果集的字段/类型映射,就可以将SQL语句独立到JAVA源代码的外部(一般起名叫sqlmap的一个xml文件).这种工作方式非常适合一种对象映射到一张表的工作方式,简洁明了,但是其它映射方式ibatis并没有限制.升级中只采用了最简单的一种对象一张表的方式,少量的关联查询通过facade形式的Dao封装多个操作完成.
由于在spring中使用ibatis,数据库连接管理,事务处理都可以使用spring容器提供的注射来完成,这次升级就沿用了先前版本的c3p0连接池,但是撤销了事务保护,毕竟只是统计系统.
烦锁的工作主要是将已有的代码中的SQL提取出来,起名,编写到sqlmap的xml文件中,好在这个工作也是一次性的.建议也是一种对象一个映射文件,有点类似hibernate的做法.
最重要的类可能就是org.springframework.orm.ibatis.support.SqlMapClientDaoSupport这个类了,看包名和类名就可以大概的知道作用了.参考spring的样例jpetstore的ibatis实现,非常方便的用法是用该类的子类实现你的Dao接口,对于ibatis,又简化到用注射进来的sqlMapClient调用起好名字的SQL语句,传入相应的参数即可.
package com.tribe.voyager.serverside.dao.ibatis;
import java.util.List;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.tribe.voyager.serverside.dao.AdministratorDao;
import com.tribe.voyager.serverside.domain.Administrator;
public class SqlMapAdministratorDao extends SqlMapClientDaoSupport implements
AdministratorDao {
public void addAdministrator(Administrator admin) {
getSqlMapClientTemplate().insert("addAdministrator", admin);
}
public Administrator getAdministrator(String id) {
return (Administrator) getSqlMapClientTemplate().queryForObject("getAdministratorById", id);
}
@SuppressWarnings("unchecked")
public List<Administrator> getAllAdministrators() {
return (List<Administrator>) getSqlMapClientTemplate().queryForList("getAllAdministrators");
}
public void removeAdministrator(String id) {
getSqlMapClientTemplate().delete("removeAdministrator",id);
}
public void updateAdministrator(Administrator admin) {
getSqlMapClientTemplate().update("updateAdministrator", admin);
}
}
测试也是必不可少的,使用spring的test支持可以很方便的在spring context中进行集成测试.pop数据,还原数据库,都可以尽可能的做到自动化.下面是ant完成测试后的报告,结果一目了然.
ibatis模板对JDBC的封装非常薄,但是通过给查询"起名字"和声明结果集的字段/类型映射,就可以将SQL语句独立到JAVA源代码的外部(一般起名叫sqlmap的一个xml文件).这种工作方式非常适合一种对象映射到一张表的工作方式,简洁明了,但是其它映射方式ibatis并没有限制.升级中只采用了最简单的一种对象一张表的方式,少量的关联查询通过facade形式的Dao封装多个操作完成.
由于在spring中使用ibatis,数据库连接管理,事务处理都可以使用spring容器提供的注射来完成,这次升级就沿用了先前版本的c3p0连接池,但是撤销了事务保护,毕竟只是统计系统.
烦锁的工作主要是将已有的代码中的SQL提取出来,起名,编写到sqlmap的xml文件中,好在这个工作也是一次性的.建议也是一种对象一个映射文件,有点类似hibernate的做法.
最重要的类可能就是org.springframework.orm.ibatis.support.SqlMapClientDaoSupport这个类了,看包名和类名就可以大概的知道作用了.参考spring的样例jpetstore的ibatis实现,非常方便的用法是用该类的子类实现你的Dao接口,对于ibatis,又简化到用注射进来的sqlMapClient调用起好名字的SQL语句,传入相应的参数即可.
package com.tribe.voyager.serverside.dao.ibatis;
import java.util.List;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.tribe.voyager.serverside.dao.AdministratorDao;
import com.tribe.voyager.serverside.domain.Administrator;
public class SqlMapAdministratorDao extends SqlMapClientDaoSupport implements
AdministratorDao {
public void addAdministrator(Administrator admin) {
getSqlMapClientTemplate().insert("addAdministrator", admin);
}
public Administrator getAdministrator(String id) {
return (Administrator) getSqlMapClientTemplate().queryForObject("getAdministratorById", id);
}
@SuppressWarnings("unchecked")
public List<Administrator> getAllAdministrators() {
return (List<Administrator>) getSqlMapClientTemplate().queryForList("getAllAdministrators");
}
public void removeAdministrator(String id) {
getSqlMapClientTemplate().delete("removeAdministrator",id);
}
public void updateAdministrator(Administrator admin) {
getSqlMapClientTemplate().update("updateAdministrator", admin);
}
}
测试也是必不可少的,使用spring的test支持可以很方便的在spring context中进行集成测试.pop数据,还原数据库,都可以尽可能的做到自动化.下面是ant完成测试后的报告,结果一目了然.
![测试报告](https://p-blog.csdn.net/images/p_blog_csdn_net/jerryrt/278006/o_scr.png)
发表于 @ 2007年02月08日 16:48:00|评论(0 <script type=text/javascript>AddFeedbackCountStack("1505534")</script> )|编辑