ibatis源码探究

1、iBATIS准备工作:

     1.1 首先从官网获取iBATIS_2.3.4版本的src资源包,解压导入Eclipse中

     1.2  iBATIS依赖的包有

           dbcp(连接池包http://jakarta.apache.org/commons/dbcp/

           common-logging(日志包http://jakarta.apache.org/commons/

           log4j(日志包http://logging.apache.org/log4j/docs

           oscache(系统缓存包http://www.opensymphony.com/oscache/

           cglib(字节延迟加载包http://cglib.sf.net

2、iBATIS目录结构: 

     ------common(公共通用包)

            -----------beans(解析POJO、反射注入值)

            -----------io(资源文件读取)

            -----------jdbc(底层数据库操作运行SQL脚本、数据源和连接池)

                         ------exception(数据库层操作异常预处理)

                        -------logging(jdbc层连接、编译语句、处理结果集的代理工具)

            -----------logging(封装各种类型的日志输出,有log4j、commons-log、jdk、Jakarta多种类型的实现)

            -----------resources(资源文件的读取)

           ------------util(分页工具的实现)

           ------------xml(配置文件的解析处理工具)

     ------sqlmap

            ---------client(客户端调用入口)

            ---------engine(引擎入口处,主要工作实现map映射、xml解析、数据转换、事务管理、缓存等)

                       --------accessplan(各种访问规则的设置处理)

                       --------builder.xml(解析处理sqlMapConfig.xml和XXXSqlMap.xml)

                       --------cache(框架中缓存机制)

                       --------config(配置文件的预定义及解析处理)

                       --------datasource(数据源集中管理,包含jdbc、jndi、dbcp等)

                       --------exchange(数据转换)

                       --------execution(SQL的单一处理和批量执行处理)

                       --------impl(对client中接口的实现,符合面向接口的思想)

                      ---------mapping(映射文件sqlmap中参数、SQL、结果集、预处理语句的解析)

                      ---------scope(请求的作用域,有sessionscope--一次请求的上下文、statementscope--一次数据库操作的上下文)

                      ---------transaction(事务的实现)

                      ---------type(POJO属性与数据库字段类型的对应转换)

3、iBATIS工作流程:

     3.1 读取配置文件sqlMapConfig.xml 获取sqlMap标签对应的bean.xml,解析获取Java bean

     3.2  缓存sqlMap信息到缓存机制中

     3.3  SqlMapClient 读取sqlMap信息执行CRUD

     3.4 client包中的设计 (面向接口编程思想的体现)

      3.5 核心类:

       3.5.1 com.ibatis.sqlmap.client (接口设计)

            SqlMapExecutor.java——>     sqlMap中statement和batches语句的执行接口

            SqlMapTransactionManager.java——> 事务管理接口

            SqlMapClient.java——>sqlMap处理入口接口

            SqlMapClientBuilder.java——>创建SqlMapClient对象的构造类

           

4、设计思想:

     4.1  接口设计,操作的灵活性,实现类中可以添加自己业务需要功能

     4.2  设计模式

     4.3  多线程、反射

5、总结:

     5.1 万变不离其尊,每一种框架的诞生都是将一些公用的经过封装,形成一种流行的处理模式。iBATIS的诞生缘由,将不变的流程固化到代码,将变化的信息封装到配置中。

先看一段经典的jdbc代码:
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/learnworld";
        Connection con = DriverManager.getConnection(url, "root","root");
        String sql = "select * from uer";
        PreparedStatement ps = con.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        User use = new User();
        while(rs.next()){
                user.setUserName(rs.getString("username"));   
                user.setPassword(rs.getString("password"));
        }
        return user;

这段代码在任何的数据库操作中都离不开。

iBATIS就是基于这个基础之上诞生的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值