首页 > 其他 > 详细

德鲁伊+内省+泛型重构封装之前的代码(映射)

时间:2019-09-29 18:40:41      阅读:124      评论:0      收藏:0      [点我收藏+]

没有连接池的情况

每次CRUD操作都要使用数据库的时候,都要创建一个数据库连接对象

普通的JDBC数据库连接使用 DriverManager 来获取

每次向数据库建立连接的时候都要将 Connection 加载到内存中

然后再验证用户名和密码花费时间0.05s~1s左右

每次CRUD操作就向数据库要要一个连接

执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。

数据库的连接资源并没有得到很好的重复利用

 

若同时有几百人甚至几千人在线,

频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。

 

数据库连接池

作用

1.初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,

2.用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。

3.池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。

 

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。

预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,

只需从“缓冲池”中取出一个,使用完毕之后再放回去。

我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接

可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。

连接对象是以链表形式存放,已释放的连接,放到最后,从最前面获取连接对象。

连接池中的属性

合理的设置连接池的属性,会提高连接池的性能

1.连接数据库时需要的4个要素

驱动名称,数据库地址,用户名,密码

2.初始化连接数

初始化时,连接池当中创建多少个Connection对象

3.最大连接数

连接池当中最多存储多少个Connection对象

4.最小连接数

连接池当中最少得存多个少Connection对象

5.最大的空闲时间

如果一个获取了连接对象,在指定时间内没有任何动作,就会自动释放链接

6.最大等待时间

在指定时间内,尝试获取连接,如果超出了指定时间,就会提示获取失败

连接池是使用javax.sql.DataSource接口来表示连接池

DataSource和jdbc一样,也是只提供一个接口,由第三方组织来提供

 

常见连接池

DBCP Spring推荐,Tomcat的数据源使用的就是DBCP

C3P0 C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,从2007年就没有更新了,性能比较差。

Druid 阿里巴巴提供的连接池-德鲁伊-号称最好的连接池,它里面除了这些, 还有更多的功能。

 

DataSource数据源和连接池Connection Pool是同一个东西,只是叫法不一样而已。

 

使用连接池与不使用连接池区别

1.获取方式不同

传统:Connection conn = DriverManager.getConnection(url.userName,pwd);

连接池:Conneciton conn = DataSource对象.getConnection();

2.释放资源不同

传统:和数据库断开conn.close();

连接池:把数据库连接对象还给连接池,还可以给下一个人来使用

 这里我介绍下阿里的德鲁伊连接池

它是开源的,https://github.com/alibaba/druid 。就目前来说,号称是最好的连接池。

 技术分享图片

 

 技术分享图片

 

 

什么是内省

用于查看和操作JavaBean中的属性,其实就是反射。

类 Introspector

Introspector.getBeanInfo(A.class,B.class);

1.获取指定类当中的字节码属性信息

2.获取A类及A类父类当中的属性,但是不包括指定的类。

3.返回值BeanInfo

 

BeanInfo

getPropertyDescriptors()

1.获取JavaBean中的属性描述器

2.返回的是一个数组(PropertyDescriptor[])

每一个属性都有描述器,JavaBean中有多个属性,所以返回了一个数组

 

获取属性名 pd.getName();

获取get方法 pd.getReadMethod();

获取set方法 pd.getWriteMethod

动态调用方法 方法名.invoke(对象名称,“值”)

下面是代码重构,使用泛型+内省,使类更通用(注释较齐全)。可以导出作为一个小框架使用了。

增删改查都通过对象的方式来完成,有新的需求仅需事先给的处理接口即可。

 技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 

老九学堂会员社群出品

德鲁伊+内省+泛型重构封装之前的代码(映射)

原文:https://www.cnblogs.com/ljxt/p/11609013.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!