Mybatis学习之自定义持久层框架(四) 自定义持久层框架:生产sqlSession
前言
上一回我们完成了数据库配置文件的读取和解析工作,有了这些准备工作,我们就可以与数据库创建连接和会话了,所谓sqlSession就是数据库的会话,一切增删查改操作都是在与数据库的会话中完成,下面我们来讲一些这方面的知识。
生产sqlSession、与数据库进行会话
这里我们会使用工厂模式,我们会用到三个类:SqlSessionFactoryBuilder(用于创建工厂对象)、SqlSessionFactory(sqlSession的工厂接口)和DefaultSqlSessionFactory(sqlSession的实现类,负责生产sqlSession),这几个类都创建与“sqlSession”包下,相关的代码如下所示:
1 package com.hardy.sqlSession;
2
3 public interface SqlSessionFactory {
4
5 public SqlSession openSession();
6 }
1 package com.hardy.sqlSession;
2
3 import com.hardy.pojo.Configuration;
4
5 public class DefaultSqlSessionFactory implements SqlSessionFactory {
6
7 private Configuration configuration;
8
9 public DefaultSqlSessionFactory(Configuration configuration) {
10 this.configuration = configuration;
11 }
12
13 @Override
14 public SqlSession openSession() {
15 return new DefaultSqlSession(configuration);
16 }
17
18 }
1 package com.hardy.sqlSession;
2
3 import com.hardy.config.XMLConfigBuilder;
4 import com.hardy.pojo.Configuration;
5 import org.dom4j.DocumentException;
6
7 import java.beans.PropertyVetoException;
8 import java.io.InputStream;
9
10 public class SqlSessionFactoryBuilder {
11
12 private Configuration configuration;
13
14 public SqlSessionFactoryBuilder() {
15 this.configuration = new Configuration();
16 }
17
18 public SqlSessionFactory builder(InputStream in) throws ClassNotFoundException, PropertyVetoException, DocumentException {
19 // 1、使用dom4j解析配置文件,讲解析出来的内容封装到Configuration中
20 XMLConfigBuilder xmlConfigBuilder = new XMLConfigBuilder(configuration);
21 Configuration configuration = xmlConfigBuilder.parseConfiguration(in);
22
23 // 2、创建SqlSessionFactory对象:工厂类(生产sqlSession)
24 DefaultSqlSessionFactory defaultSqlSessionFactory = new DefaultSqlSessionFactory(configuration);
25
26 return defaultSqlSessionFactory;
27
28 }
29
30 }
总结
今天我们完成了生产sqlSession的工作,到这里,我们已经可以连接数据库并与数据库进行会话了,那么接下来就是要制定会话的内容了。与数据库的会话,无非是增删查改,下一篇文章,我们会对CRUD操作的增删查改等方法进行封装。
Mybatis学习之自定义持久层框架(四) 自定义持久层框架:生产sqlSession的更多相关文章
- 【MyBatis学习笔记】
[MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习 ...
- Mybatis学习之自定义持久层框架(七) 自定义持久层框架优化
前言 接上文,这里只是出于强迫症,凭借着半年前的笔记来把之前没写完的文章写完,这里是最后一篇了. 前面自定义的持久层框架存在的问题 Dao层若使用实现类,会存在代码重复,整个操作的过程模版重复(加载配 ...
- Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路
前言 上一篇文章讲到了JDBC的基本用法及其问题所在,并提出了使用Mybatis的好处,那么今天这篇文章就来说一下该如何设计一个类似Mybatis这样的持久层框架(暂时只讲思路,具体的代码编写工作从下 ...
- Mybatis学习之自定义持久层框架(五) 自定义持久层框架:封装CRUD操作
前言 上一篇文章我们完成了生产sqlSession的工作,与数据库的连接和创建会话的工作都已完成,今天我们可以来决定会话的内容了. 封装CRUD操作 首先我们需要创建一个SqlSession接口类,在 ...
- Mybatis(一):手写一套持久层框架
作者 : 潘潘 未来半年,有幸与导师们一起学习交流,趁这个机会,把所学所感记录下来. 「封面图」 自毕业以后,自己先创业后上班,浮沉了近8年,内心着实焦躁,虽一直是走科班路线,但在技术道路上却始终没静 ...
- mybatis 学习笔记(四):mybatis 和 spring 的整合
mybatis 学习笔记(四):mybatis 和 spring 的整合 尝试一下整合 mybatis 和 spring. 思路 spring通过单例方式管理SqlSessionFactory. sp ...
- mybatis学习笔记之基础框架(2)
mybatis学习笔记之基础框架(2) mybatis是一个持久层的框架,是apache下的顶级项目. mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足s ...
- 【MyBatis学习01】宏观上把握MyBatis框架
今天开始学习mybatis框架,博客主要记录学习过程中的一些总结,如有错误之处,欢迎留言指正~先用mybatis的鸟鸟来镇个楼,咳咳~~ mybatis框架是一个持久层框架,是Apache下的顶级项目 ...
- MyBatis学习 之 四、MyBatis配置文件
目录(?)[-] 四MyBatis主配置文件 properties属性 settings设置 typeAliases类型别名 typeHandlers类型句柄 ObjectFactory对象工厂 pl ...
- 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
[转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...
随机推荐
- 想了很久,一道Microsoft的笔试题目 —— Reversing Linked List
Reversing Linked List Given a constant K and a singly linked list L, you are supposed to reverse the ...
- 攻防世界 reverse seven
seven hctf2018 这是一个驱动文件 ida载入,查找字符串 根据字符串来到函数:sub_1400012F0 __int64 __fastcall sub_1400012F0(__int6 ...
- 【vue开发】watch中的immediate与deep的使用
下面是我对于immediate与deep的理解 1.immediate 设置immediate为true后,监听会在被监听值初始化的时候就开始,也就页面上的数据还未变化的时候. 经过测试发现,如果监听 ...
- 【linux】驱动-6-总线-设备-驱动
目录 前言 6. 总线-设备-驱动 6.1 概念 6.2 工作原理 6.3 总线 6.3.1 总线介绍 6.3.2 注册总线 6.4 设备 6.4.1 设备介绍 6.4.2 设备注册.注销 6.5 驱 ...
- vmstat-观察进程上线文切换
vmstat 是一款指定采样周期和次数的功能性监测工具,我们可以看到,它不仅可以统计内存的使用情况,还可以观测到 CPU 的使用率.swap 的使用情况.但 vmstat 一般很少用来查看内存的使用情 ...
- Python基础(七):字符串的使用(上)
什么是字符串? 字符串该如何定义呢?通俗的说:字符串就是一系列的字符. 创建字符串的3种方式 单引号创建 >>> a = 'I am a student' >>> ...
- 机器学习--如何理解Accuracy, Precision, Recall, F1 score
当我们在谈论一个模型好坏的时候,我们常常会听到准确率(Accuracy)这个词,我们也会听到"如何才能使模型的Accurcy更高".那么是不是准确率最高的模型就一定是最好的模型? 这篇博文会向大家解释 ...
- vue 快速入门 系列 —— vue 的基础应用(下)
其他章节请看: vue 快速入门 系列 vue 的基础应用(下) 上篇聚焦于基础知识的介绍:本篇聚焦于基础知识的应用. 递归组件 组件是可以在它们自己的模板中调用自身的.不过它们只能通过 name 选 ...
- 告别DNS劫持,一文读懂DoH
如果评选一个差评服务器榜单,除去育碧高居榜首外,一定也少不了 Nintendo Switch 让人头秃的联网服务.尽管任天堂已经架设了香港 CDN 服务器用于加速,但是更新安装的速度也没有什么大幅改变 ...
- Pytorch系列:(三)模型构建
nn.Module 函数详解 nn.Module是所有网络模型结构的基类,无论是pytorch自带的模型,还是要自定义模型,都需要继承这个类.这个模块包含了很多子模块,如下所示,_parameters ...