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就是基于这个基础之上诞生的。