体系结构
![](https://i-blog.csdnimg.cn/blog_migrate/54e275011d354c41245f7da0fb39d0c4.png)
工作原理:
![](https://i-blog.csdnimg.cn/blog_migrate/8e12467d18b6e1aaa84e75d2094a7a92.png)
配置mybatis.xml:
![](https://i-blog.csdnimg.cn/blog_migrate/af1b5530de8a124361abf9ac27f732e7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4f9c1925776a941c8c755c8d880eddf4.png)
mybatis.xml的改进:
![](https://i-blog.csdnimg.cn/blog_migrate/10a46ffb8c3278283cf438da021e676a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/023d766494c9845e2bd5f3512f2564c6.png)
配置mapper.xml:
![](https://i-blog.csdnimg.cn/blog_migrate/62a53b674ddb307300218c1f1ca54560.png)
增加student和dao:
![](https://i-blog.csdnimg.cn/blog_migrate/3cdc92382280bc3e72673d41076144cd.png)
Impl实现功能
(先增加一个配置工具类):
![](https://i-blog.csdnimg.cn/blog_migrate/3bfbd4ffb96863cd0be98a0f33b14fd8.png)
Impl实现功能:
![](https://i-blog.csdnimg.cn/blog_migrate/fbb022838cb04d8a701cdff300fe947a.png)
test测试:
![](https://i-blog.csdnimg.cn/blog_migrate/bc6c4ca2dc694ec103d429409100beff.png)
源码分析:
inputStream的关闭在sqlSessionFactory的build方法中已经对他进行了关闭。
![](https://i-blog.csdnimg.cn/blog_migrate/1a0e048abbe3660f79c5fc21e967c13b.png)
sqlSession的创建就是对成员变量进行赋初始值的操作。
![](https://i-blog.csdnimg.cn/blog_migrate/3f442417903c18f4f0aceff9016303a4.png)
增删改的执行:
![](https://i-blog.csdnimg.cn/blog_migrate/9c283b520da85fb947c1415a29c7cc6b.png)
sqlSession.commit()为什么也是事务的提交:(如下图,注:事务提交后,dirty变成了false)
![](https://i-blog.csdnimg.cn/blog_migrate/b80d6e8a6f64ad397e01fba0894dd05e.png)
sqlSession.close()方法内部实现为:如果提交成功则不执行不回滚,否则会执行回滚;
小的知识点:
起别名:
![](https://i-blog.csdnimg.cn/blog_migrate/972e9fe6b39c0f758503495268cfe041.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e5af5f194d3f531c4bc928ca722d6d6e.png)
$和#的区别:
$:是字符串拼接,使用的是Statement,会有sql注入的风险。
#{xxx}使用的是preparedStatement,可以防止sql注入的问题。
resultMap的作用:
![](https://i-blog.csdnimg.cn/blog_migrate/81ed997585a057f9298497372b1b5b16.png)