5.API详解

2021-09-17 03:12

阅读:972

标签:dao   let   工厂   线程   持久化   uil   改变   数据   builder   Dao 中需要通过 SqlSession 对象来操作 DB。而 SqlSession 对象的创建, 需要其工厂对象 SqlSessionFactory。SqlSessionFactory 对象, 需要通过其构建器对象 SqlSessionFactoryBuilder 的 build()方法,在加载了主配置文件的输入流对象后创建   a)Resource类     Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通过加载并解析 资源文件,返回不同类型的 IO 流对象。     b)SqlSessionFactoryBuilder     SqlSessionFactory 的创建,需要使用 SqlSessionFactoryBuilder 对象的 build()方法。由于     SqlSessionFactoryBuilder 对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。   所以,一般会将该 SqlSessionFactoryBuilder 对象创建为一个方法内的局部对象,方法结束,对象销毁。     c)SqlSessionFactoy接口   SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是线程安全的,所 以一个应用只需要一个该对象即可。创建 SqlSession 需要使用 SqlSessionFactory 接口的的 openSession()方法。   openSession(true):创建一个有自动提交功能的 SqlSession openSession(false):创建一个非自动提交功能的 SqlSession,需手动提交 openSession():同 openSession(false)     d)SqlSession接口     SqlSession 接口对象用于执行持久化操作。一个 SqlSession 对应着一次数据库会话,   一次会话以 SqlSession 对象的创建开始,以 SqlSession 对象的关闭结束。     SqlSession 接口对象是线程不安全的,所以每次数据库会话结束前,需要马上调用其 close()方法,将其关闭。   再次需要会话,再次创建。而在关闭时会判断当前的 SqlSession 是 否被提交:若没有被提交,则会执行回滚后关闭;   若已被提交,则直接将 SqlSession 关闭。 所以,SqlSession 无需手工回滚。     SqlSession 封装了 各种 CRUD方法,当调用这些方法时,会去mapper.xml映射文件中去找相应标签下的SQL语句     e)源码分析 A、输入流的关闭   在输入流对象使用完毕后,不用手工进行流的关闭。因为在输入流被使用完毕后,   SqlSessionFactoryBuilder 对象的build() 方法会自动将输入流关闭 B、SqlSession的创建   无参的openSession()方法,将事务的自动提交直接赋值为false。   而所谓创建SqlSession,就是加载了主配置文件,创建了一个执行器对象(将来用于执行映射文件中的SQL语句)   初始化了一个DB数据被修改的标志变量dirty,关闭了事务的自动提交功能   C、增删改的执行   对于SqlSession的insert()、delete()、uodate()方法,其底层均是调用了update方法   从源码可知,无论执行增、删还是改,均是对数据进行修改,均将dirty变量设置为true   且在获取到映射文件中指定id的SQL语句后,由执行器executor执行   D、SqlSession的提交 commit()   执行了SqlSession的更新,dirty变量的值发生了变化,表示数据被修改了,此时进行SqlSeesion的提交,   才会顺利的让事务进行提交,在没有更新的情况下,是不会提交的    执行SqlSession的无参commit()方法,最终会将事务进行提交 E、SqlSession的关闭   执行了SqlSession的更新,dirty变量的值发生了变化,表示数据被修改了,此时进行SqlSeesion的关闭,   才会进行事务的回滚,恢复数据   若没有执行SqlSession的更新,dirty的值没有改变,   在SqlSession进行关闭时,会将事务回滚后关闭。所以,对于MyBatis程序,无需通过显示地对SqlSession进行回滚   所以:dirty变量是一个很关键的变量,它决定了 事务是否进行提交和回滚  5.API详解标签:dao   let   工厂   线程   持久化   uil   改变   数据   builder   原文地址:http://www.cnblogs.com/xuzekun/p/7419559.html


评论


亲,登录后才可以留言!