1.详解主配置文件解析:
2.运行主配置文件
Environments可以多个?环境
项目在测试阶段是mysql.但在以后是oracle
1)<transactionManager type="JDBC" />
该标签用于指定事务管理器。type的取值有两个:
JDBC:使用JDBC事务管理器
MANAGED:使用第三方事务管理器,例如使用Spring的事务管理器
2)<dataSource type="POOLED">
该标签用于指定数据源类型。type的取值有三个:
POOLED:使用连接池技术(默认使用的是Mybatis内置连接池)
UNPOOLED:不使用连接池技术
JNDI:Java Naming-Directory In
3.映射文件的注册
mapper URL=“environment.xml” (mapper文件的位置)
下面的这种方式可以映射文件放到本地文件系统,但是这种方式不常用。
比如:mapper 文件可以存放在E盘根目录
“file:///e:mapper.xml”
在此语句中“file"windows中是默认的地址协议,
而“///”是表示访问的是本机localhost
<mapper class="~~">
运用这个需要满足三个条件要求:
1)映射文件要与Dao接口文件在同一包下
2)映射文件名要Dao接口的简单类名相同
3)映射文件<mapper>标签的namespace属性值为Dao的权限定类名
4.映射文件的详解
1)这里的 paramterType属性可以省略
2)SQL语句中的values中内容,要求必须是#{}其中name,age,score指的是参数对象的属性,底层是反射机制,从参数对象中获取其相应的get()方法。
5.API详解:
0).线程安全问题出现的条件
1)只有单例对象才可能出现线程安全问题
2)多线程环境,即多个线程会共享这个单例对象
3)单例对象中具有可修改的成员变量
1). SqlSession接口
SqlSession接口的实现类是org.apache.ibatis.session.defaults.DefaultSqlSession。该对象是多例的。
2). SqlSessionFactory接口
SqlSessionFactory接口的实现类是org.apache.ibatis.session.defaults.DefaultSqlSessionFactory。
这个对象的作用就是为了创建SqlSession对象,而由于SqlSession对象是多例的,每创建一次SqlSession对象,都
需要一个SqlSessionFacotry对象去创建。
但SqlSessionFacotry对象是重量级组件,且DefaultSqlSessionFactory类中不存在可修改的成员变量。所以
SqlSessionFacotry对象可以定义为单例的。其生命周期与整个应用的相同。
3). SqlSessionFactoryBuilder类
该类对象的作用仅仅就是为了创建SqlSessionFactory对象。由于SqlSessionFacotry是单例对象,一旦创建完毕,
SqlSessionFactoryBuilder对象就可以定义为一个局部变量。SqlSessionFacotry创建完毕,就可以销毁了。
6.源码分析
1) inputstream为什么不用我们手动关闭?
因为在sqlsessionfactory的内部,有一个sqlsession。close(),所以不用我们手动的关闭。
2)为什么opensession关闭了就等于自动提交了?因为opensession里有一个dirty值默认为FALSE;
3)我们创建的Sqlsession实际就是初始化了一堆变量值,其中(automaticcomit)dirty值=false,指的是内存中数据就是数据库中的数据一致
不一致就是TRUE;
4)insert到底执行的是什么 ?只要增删操作后,就会有一个dirty=true,提交后就是false,代表的是是否内存中的数据与数据库中的数据一致;
5)提交和回滚不管哪一个都会使dirty值变为false,因为都会导致内存中得数据和数据库中 的数据一致;