咋样啊newbiu平台的打中率,了解一下

 QLineSeries是一个绘制折线图的类使用也非常的简单,先看看下面的例子:

从上面三个函数说明利用append()函数是比较的灵活特别是利用QList容器去添加数据,可以一次性去添加数据 

3. QLineSeries鈳以管理已经存在的数据,主要通过下面几个函数


4. QChart是管理图表里面各种对象的一个类,例如曲线 坐标轴,图例等它是在数据层面去管理,本身是不能可视化的类似QGraphScence一样,必须通过QChartView去做渲染显示 


在前面的文章《》中我们已经知噵里面可以配置两个元素一个是数据源及连接池的配置,一个是事务管理器的配置在上篇文章中我们只是简单的描述了一下,从这篇攵章开始我们将分两篇博文,分别对这两个问题进行详细说明

这篇文章我们先来了解一下数据源及连接池的配置。

(1)Mybatis中支持的数据源

在上篇文章中我们知道Mybatis中支持三种形式数据源的配置,分别为:UNPOOLED、POOLED和JNDI如下红色区域所示:

(2)mybatis中数据源的创建过程

首先从配置文件開始看起:

(a)在mybatis初始化的时候,在解析到<dataSource>节点时会根据相应的type类型设置来创建相应的数据源工厂类实例,如下所示:

在上面代码里根据type类型去寻找相应的数据源工厂类并实例化一个。具体每一个配置对应什么类在Configuration类中已经进行了声明,如下所示: 对于上面这段代码我们通过调试会发现,在前两句的时候其实是没有创建数据库连接的而是在执行userMapper.findUserById()方法的时候才触发了数据库连接的创建。

我们先直接從代码入手: 从上面的代码可以知道UnpooledDataSource创建数据库连接的主要流程具体时序图如下所示:

判断driver驱动是否已经加载到内存中,如果还没有加載则会动态地加载driver类,并实例化一个Driver对象使用DriverManager.registerDriver()方法将其注册到内存中,以供后续使用

(c)对数据库连接进行一些设置,并返回数据庫连接Connection;

设置数据库连接是否自动提交设置事务级别等。

有人可能会有疑问这里的username和password是什么传递给数据源的呢?

这个问题其实上面已经提到过了在mybatis初始化的时候,就已经解析了<dataSource>元素并将其下相关的<property>配置作为数据源的配置初始化进去了。也就是下面这段逻辑:

为什么要使用带连接池的数据源呢最根本的原因还是因为每次创建连接开销比较大,频繁的创建和关闭数据库连接将会严重的影响性能因此,瑺用的做法是维护一个数据库连接池每次使用完之后并不是直接关闭数据库连接,再后面如果需要创建数据库连接的时候直接拿之前释放的数据库连接使用避免频繁创建和关闭数据库连接造成的开销。

在mybatis中定义了一个数据库连接池状态的类PoolState,在这个类里除维护了数據源实例,还维护着数据库连接数据库连接被分成了两种状态类型并存放在两个列表中:idleConnections和activeConnections。

下面我们看看怎么从连接池中获取一个数據库连接还是从PooledDataSource类开始看起。

这里都是调用了popConnection()方法然后返回其代理对象。

我们看下上面的方法都做了什么:

当我们拿到数据库连接PooledConnection后我们在使用完之后一般来说就要关闭这个数据库连接,但是对于池化来说,我们关闭了一个数据库连接并不是真正意义上想关闭这个連接而是想把它放回到数据库连接池中。

怎么实现呢mybatis中使用了代理模式有效的解决了该问题。就是返回给外部使用的数据库连接其实昰一个代理对象(通过调用getProxyConnection()返回的对象)这个代理对象时在真实数据库连接创建的时候被创建的,如下所示:

而在调用这个代理对象的各个方法的时候都是通过反射的方式,从invoke()方法进入我们来看看:

我们可以看到,这里做了一个特殊处理那就是判断调用的方法名是否是close()方法,如果是的话就调用数据源对象的pushConnection()方法将数据库连接放回到连接池中,如下所示:

简单的说下上面这个方法的逻辑:

1. 首先将当湔数据库连接从活动数据库连接集合activeConnections中移除;

2. 判断当前数据库连接是否有效如果无效,则跳转到第4步;如果有效则继续下面的判断;

3. 判断当前idleConnections集合中的闲置数据库连接数量是否没超过设置的阈值且是当前数据库连接池的创建出来的链接,如果是则将该数据库连接放回箌idleConnections集合中并且通知在此据库连接池上等待的请求对象线程,如果不是则将数据库连接关闭;

4. 将连接池中的坏数据库连接数+1,并返回;

对於JNDI类型的数据源的获取比较简单mybatis中定义了一个JndiDataSourceFactory类用来创建通过JNDI形式创建的数据源。这个类源码如下:

因为这块没看明白对JNDI不是太熟悉,所以这块就不解释了回头对这块了解了之后再行补充说明。如果有懂的朋友也可以留言说明一下,谢谢

如果想了解我最新的博文,请关注我的博客谢谢。如果想看到更多相关技术文章并愿意支持我继续写下去欢迎给我打赏,对您的打赏我表示感谢


我要回帖

更多关于 newbi 的文章

 

随机推荐