1.iBatis框架主要的类层次结构
1.1.工作内容
1.1.1.根据JDBC规范建立与数据库的链接
1.1.2.通过反射打通Java对象与数据库参数交互之间相互转化的关系
1.2.交互式框架
1.3.层次结构主要由操作行为和执行环境组成
1.4.类SqlMapExecutorDelegate耦合了用户端的执行操作行为和执行的环境;它持有所需数据和管理着依赖环境,是一个执行代理类,也可以看成工具类
2.iBatis框架的设计策略
2.1.目的:方便地写出SQL和获取SQL执行结果
2.2.数据映射的过程
2.2.1.根据在statement中定义SQL语句,解析出其中的参数
2.2.2.按照参数出现的顺序保存在Map集合中
2.2.3.按照在Statement中定义的ParameterMap对象类型(int,string,model,java.util.Map)解析出参数的java类型
2.2.4.根据其数据类型构建TypeHandler对象
2.2.5.参数值的复制是通过DateExchange对象完成的
2.3.parameterClass代表参数类型,resultClass(只有查询操作才会有)代表返回结果类型
3.iBatis框架的运行原理
3.1.执行过程
3.1.1.创建SqlMapSession对象
3.1.2.从对象池里取出一个SessionScope对象
3.1.3.建立数据库连接
3.1.4.从对象池里取出一个RequestScope对象
3.1.5.执行SQL语句
3.1.6.映射Java对象参数到ParameterMap,映射数据库列名到ResultMap
3.1.7.归还RequestScope对象到对象池
3.1.8.释放数据库连接
3.1.9.归还SessionScope对象到对象池
3.1.10.销毁或共享SqlMapSession对象
3.2.参数用#参数:JDBC数据类型#
4.iBatis对SQL语句的解析
4.1.iBatis利用statement来解析SQL语句,将参数先替换成?
4.2.把传过来的对象数据结合ParameterMap中的信息提取出一个参数数组,然后调用preparedStatement,setXXX(i,parameter)方法提交参数
4.3.parameter的赋值是根据在parameterPlan(parameterClass创建)中保存的getter方法列表及传进来的对象利用反射机制得到最终的SQL语句,最后提交给数据库
5.数据库字段映射到Java对象
5.1.获取返回对象
5.2.根据返回对象的列名去匹配前面的属性数组,构成一个集合
5.3.选择DaraExchange类型、AccessPlan类型为后面真正的数据交换提供支持
5.4.根据resultMappingList集合从ResultSet中取出列对应的值,构成值数据
5.5.调用对象属性的setter方法将columnVlaues值设置到对象中
5.6.若参数为空或者同一个参数对应多个JDBC类型,就需要在参数后面加上JDBC类型,否则会引起多次编译,影响数据库性能
6.设计模式解析之简单工厂模式
6.1.核心思想:根据属性的不同,产生不同的产品
6.2.具体做法:根据逻辑判断来选择调用具体的接口
7.设计模式解析之工厂模式
7.1.核心思想:根据工厂的不同,产生不同的产品
7.2.具体做法:提出一个类来区分
Remark:
iBatis的流程:通过SQL MAP将Java对象映射成SQL语句,然后再将结果集转换成Java对象
iBatis完成的功能:数据库的数据源管理,iBatis通过配置文件来管理SQL及输入参数的映射,iBatis通过配置文件来获取返回结果到Java对象的映射
简单工厂模式
// 接口(抽象产品)
public interface Person{
public void motion();
}
// 实现类(具体产品)
public class Adult implements Person{
public void motion(){
System.out.println("breasketball");
}
}
public class kid implements Person{
public void motion(){
System.out.println("toy");
}
}
// 工厂类
public static Person person(String personType){
if(personType.equals("Audlt")){
return new Audlt();
}else if(personType.equals("Kid")){
return new Kid();
}
}
工厂模式
// 工厂接口
public interface Factory{
public Product create();
}
// 产品接口
public interface Product{}
// 产品接口实现类
public class Washer implements Product{
public Washer(){
System.out.println("洗衣机被制造了");
}
}
public class Icebox implements Product{
public Icebox(){
System.out.println("冰箱被制造了");
}
}
public class AirCondition implements Product{
public Icebox(){
System.out.println("空调被制造了");
}
}
//创建洗衣机的工厂
public class CreateWasher implements Factory{
public Product create(){
return new Washer();
}
}
//创建冰箱的工厂
public class CreateIcebox implements Factory{
public Product create(){
return new Icebox();
}
}
//创建空调的工厂
public class CreateAirCondition implements Factory{
public Product create(){
return new AirCondition();
}
}