mybatis+druid+jdbc 原理介绍

mybatis+druid+jdbc 原理介绍,第1张

mybatis是警察

druid是武器库(有很多q)

jdbc是武器商(他们造q给武器库)

当你需要一次"除暴安良"时,你需要去找警察,警察从武器库拿q干活

以往的开发,是你使用jdbc直接造q,然后自己干活

jdbc整合了:加载数据库驱动,创建连接,写原生语句,执行,关闭这些东西

而mybatis是对jdbc的封装,他允许你通过配置的形式,配置数据库参数,并且允许你通过xml来写动态sql语句<if:test>让你可以把sql变得灵活起来并且还能将你的查询结果直接映射到你想要的实体上面

然后你就去配置你的用户名,密码,连接超时,等等

等你下次使用mybatis时,他后面会根据你的配置,帮你加载数据库驱动,创建连接,写原生语句,执行,关闭

但是mybatis发现,在你每次访问都要重新创建创建连接,写,关很麻烦,所以mybatis说,我可以接受你再配置一个连接池,比如druid

mybatis让你指定连接池是谁,如druid之后将原来自己需要搞的东西都交给druid什么账号了,密码了都给他,让druid帮你创建一批连接,在你需要用的时候,mybatis从druid里面拿一个就行

下面是一次简单的访问流程:

controller->service->dao->mapper

1首先项目启动时druid就已经使用jdbc创建好一堆连接了,留待后用

2当请求到mapper时,mybatis框架创建临时类

3然后将动态sql进行替换重写,变成原始的native sql

4从druid拿到一个连接

5将sql通过连接交给数据库执行

6然后获取执行结果

7mybatis进行将结果进行映射,返回数据

说的有点乱,希望能说清楚吧

1、背景及环境

这几天在捣鼓Struts2+Spring3+Hibernate4+Maven+EasyUI的整合,JDK17,数据库采用Oracle 11g R2,驱动采用ojdbc14,数据库连接池采用阿里巴巴的druid(完整的包名为comalibabadruidpoolDruidDataSource),但是在做用JUnit做单元测试的时候报如下错误:

Caused by: javasqlSQLException: not support oracle driver 10

2、网友问答

网上搜了很久,发现最初发表在开源中国上的一篇被转载多次的问答:

问:今天第一次使用druid,程序启动的时候报“druid –not support oracle driver 10”,换个各种版本驱动(包括ojdbc6),都不行。是因为连接的客户端的版本太低了吗?

答:温少说的对,是因为有多个驱动包造成的。在jre的ext目录下发现了class12jar。

3、本文方法

我检查了下,发现我的问题并不是这个原因造成的,不过这篇文章给了我点启示,就是数据库驱动的版本问题,后来换用Oracle 11g自带的驱动ojdbc6jar,问题得到解决。

4、本文相关链接

①druid介绍:阿里巴巴数据库连接池druid

②Maven下如何安装ojdbc6jar:MyEclipse环境下如何采用Maven导入ojdbc14jar和ojdbc6jar

③Oracle数据库驱动版本变迁:Oracle数据库驱动历代版本及其区别(classes12,ojdbc14,ojdbc5,ojdbc6等)

//---------------------------------------------------------------------------------------------------------------------------------------------------------

>

现针对数据库密码加密方面,利用druid进行数据库加密,实现项目配置文件中数据库密码密文存储,一定程度上保证了数据安全。

配置方法:

1、数据源配置[spring-mybatisxml文件]

<!-- 配置数据源 -->

<bean name="dataSource" class="comalibabadruidpoolDruidDataSource"

init-method="init" destroy-method="close">

<property name="driverClassName" value="${jdbcdriver}" />

<property name="url" value="${jdbcurl}" />

<property name="username" value="${jdbcusername}" />

<property name="password" value="${jdbcpassword}" />

<!-- 配置初始化大小、最小、最大 -->

<property name="initialSize" value="${jdbcpoolinit}" />

<property name="minIdle" value="${jdbcpoolminIdle}" />

<property name="maxActive" value="${jdbcpoolmaxActive}" />

<!-- 配置获取连接等待超时的时间 -->

<property name="maxWait" value="60000" />

<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->

<property name="timeBetweenEvictionRunsMillis" value="60000" />

<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->

<property name="minEvictableIdleTimeMillis" value="300000" />

<property name="validationQuery" value="${jdbcvalidationquery}" />

<property name="testWhileIdle" value="true" />

<property name="testOnBorrow" value="false" />

<property name="testOnReturn" value="false" />

<!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用)

<property name="poolPreparedStatements" value="true" />

<property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> -->

<!-- 配置监控统计拦截的filters -->

<!--<property name="filters" value="stat" /> -->

<property name="filters" value="${jdbcfilters}" />

<property name="connectionProperties"

value="${jdbcconnectionProperties}"/>

</bean>

画外音:目前Druid在开源中国举办的2019年度最受欢迎中国开源软件中排名第7名,支持Druid的朋友可以去投票哇。 2019年度最受欢迎中国开源软件

maxWait :从连接池中获取连接的最大等待时间,单位ms,默认-1,即会一直等待下去

笔者在使用Druid时都会设置这个参数,这样如果是获取连接超时,更容易从日志中获取调用失败的原因。

如果超时,Druid会抛出以下异常

在DruidDataSource中的getConnectionInternal方法使用到了maxWait

maxWait默认是不超时,即如果连接池没有空闲连接,则会一直等待下去,但是一般的接口都是有超时时间的,如果接口超时,不方便定位出来是获取不到连接导致的,最好设置maxWait,并且小于接口的超时时间。

以上就是关于mybatis+druid+jdbc 原理介绍全部的内容,包括:mybatis+druid+jdbc 原理介绍、如何给myeclipse的maven配置druid、druid数据库密码加密原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9468374.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存