Java 模拟数据库连接池 + 模拟ORM框架

环境

  • 编程语言:Java 14.0.1
  • 数据库:MySQL 8.0(用户名与密码都是root,ip及端口是localhost:3306
  • JDBC:mysql-connector-java-8.0.20.jar
  • IDE:intelliJ IDEA 2020.1.2

数据库初始化

创建一个数据库并填入数据,给下面两个demo使用:

# 如果没有创建该数据库
create database study;

use study;

create table student(
    id int(4),
    name varchar(20),
    sex varchar(10),
    birth int,
    ctime date
);

insert into student values(1,'ahri','female',1998,'2020-7-23');
insert into student values(2,'lux','female',1997,'2020-7-23');
insert into student values(3,'garen','male',1996,'2020-7-23');
insert into student values(4,'akali','female',2000,'2020-7-23');

模拟数据库连接池

JDBC六部曲中,获取连接的步骤是最为耗时的,最慢的;所以,数据库连接池就是为了解决这个很慢的问题

先想一下下面的问题:

  • 一个连接Connection不能被多个用户同时共用(以防产生数据紊乱)【锁】
  • 对于某一个连接,用户如何知道当前这个连接是否可用?【标记:给连接标记一个状态】
  • 但是怎么把连接和标记放在一起呢?
    第一个方案:创建一个类(有Connection属性和状态属性)
    第二个方案:创建一个数组Connection[],在创建一个数组byte[],两者分别存放连接和状态,并且互相对应(下面代码中我用的这个方案)

这是我在idea编辑器中写的项目的结构:
在这里插入图片描述

模拟ORM框架

...
V:View视图层String html jsp
C:Controller控制层Servlet 控制的是相应信息
M:Model模型层数据模型(数据处理、数据读写、数据存储)
.Service数据处理
.Dao数据读写里面的代码都是JDBC+SQL+domain
.domain数据存储
DB数据库

所有的Dao层做的事情都是存粹的JDBC+SQL+domain
JDBC流程比较相似
增删改都是对数据库的写操作,流程相似,就SQL不同(还有:SQL+?拼接的过程)

如果能将SQL和拼接的过程抽取出来(放在SqlSessionFactory这个类中),其余的就可以复用了

  • Service层调用Dao层时,Dao层调用SqlSessionFactory去做事情
  • 再进一步封装,给Dao层找一个动态代理,是最终的效果是,SqlSessionFactory主动去帮Dao层干活

最后,Dao层只负责配置SQL语句和参数的设定,底层有一个代理,主动帮他调用SqlSessionFactory去做事情
所以,Dao被抽象出来了(接口)

在这里插入图片描述

编辑器的编码设置

idea编辑器 --> File --> Settings --> Editor --> File Encodings
在这里插入图片描述
这个 Java demo 中涉及到使用 idea 编辑器创建文件、读取文件;有关编码问题,请参考上图。

完整代码获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值