程序分层 与 数据库连接池

一、程序分层

我们最终的开发目的是让客户操从浏览器端或者APP操作数据,实现这个功能大致需要访问数据库、业务算法处理、请求的分发处理,这三个功能的代码我们其实上可以放到一起是能实现的,但是存在一个问题,如果放到一起了代码变得臃肿,不方便维护,于是就出现了代码分层的概念,把代码按照功能分为三层,这种代码的组织架构形式叫做MVC模式。

什么是MVC模式就是按照程序的功能将他们分成三个层。

分别是Model层(模型层)、View层(显示层)、Controller层(控制层)。

程序分层 与 数据库连接池

.Modle层: Modle层又可以细分为两层,分别是dao层、service层,这两层的主岁功能:

service层:主要负责,些业务处理,比如取得连接、关闭数据库连接、事务同滚或者,些复杂的逻辑业务处理就放到service

dao层:负责访问数据库进行数据的操作,取得结果集,之后将结果集中的,数据取出封装到vo类对象之后返回给service层。

Controller层:叫做控制层,主要的功能是处理用户发送的请求。

View层:叫做显示层,主要是负责现实数据。

分层的直接体现是将不同功能的代码保存到不同的包中

代码的调用顺序, view->Controller->Service–dao,不能上层代码对下层代码复过高,就需要为每一层定义标准(接口)。

适配器模式的使用

在dao层开发中发现了所有的实现类都要覆写父接口中的所有方法,但是父接口中的某些方法对于当前的实现类无用的(并不需要这个方法的功能),此时就可以使用适配器设计模式让实现子类可以选择性的覆写父接口中的方法。

程序分层 与 数据库连接池

数据库连接池

对于一个简单的项目应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的降低系统的性能,因次对连接的使用造成了系统性能的瓶颈。

此时可以在程序启动的时候创建出指定数量的连接保存到池(容器)里面,之后要使用连!接的时候直接从池中取得,不需要要用的时候再创建,使用完毕之后就回收到池中,说白了就是把连接交给连接池去管理了,保证了需要使用连接的时候不再重新去创建,也保证了连接可以重复使用。

连接池有很多种,常见的连接池dbcp, C3Po,尤其是和Spring整合使用,现在又出现了一个性能更高的连接池,是阿里巴巴开发的Druid连接池,也是和Spring整合使用比较常见, Druid比如果可以实现慢查询的观测。

数据库连接池原理:

1.当系统启动【初始化的时候】会创建5【可设置】个数据库初始连接

2.当客户请求到来的时候【用户要获取Connection对象的时候】

2.1 连接池中有空闲连接,直接将空闲的连接中的一个赋给客户使用
2.2 如果连接池中没有空闲连接了,而且连接的数据量没有超过最大数量,
那么连接池会向数据库申请创建新的连接【5 可设置】,然后交给客户使用
2.3 在2.2的情况下超过了最大连接数据,等待

3.当客户数据库操作完成后,这个连接怎么处理
3.1连接池中的空闲连接数已经超过了初始连接数,那么直接销毁
3.2连接池中的空闲连接数没有超过初始连接数据,那么进入空闲状态
3.3如果有等待的用户,那么这个连接直接交给等待的用户使用