spring+ibatis开发实践

 半年前一个原型统计系统使用的是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完成测试后的报告,结果一目了然.

测试报告

发表于 @ 2007年02月08日 16:48:00|评论(0 <script type=text/javascript>AddFeedbackCountStack("1505534")</script> )|编辑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值