JDBC连接池原理

python音频信号分析 声音以具有诸如频率、带宽、分贝等参数的音频信号的形式表示,典型的音频信号可以表示为幅度和时间的函数 阅读详情

这里是修真院后端小课堂,每篇分享文从

八个方面深度解析后端知识/技能,本篇分享的是:

【JDBC连接池原理】

大家好,我是IT修真院西安分院第4期的JAVA学员,一枚正直纯洁善良的JAVA程序员。今天给大家分享一下,修真院官网Java任务1,深度思考中的知识点JDBC连接池原理

一、.背景介绍

  mybatis是什么? 说起用JDBC访问数据库,除了需要自己写SQL之外,还要操作Connection, Statment, ResultSet 这些手辅助性质的代码; 访问不同的表,还会写很多雷同的代码,繁琐和枯燥。 而用Mybatis,只需要提供关键性的SQL语句,其他的工作,像加载驱动,建立连接,Statement, JDBC相关的一些动作交给Mybatis,减少重复性的工作,更多的关注在增删改查等操作层面上, 把技术细节封装在底层

    MyBatis在实际开发中,数据库的查询很难一蹴而就, 我们往往要根据各种不同的场景拼接出不同的SQL语句,这无疑是一项复杂的工作,我们在使用mybatis时, mybatis给我们提供了动态SQL,可以让我们根据具体的业务逻辑来拼接不同的SQL语句。 OK,那么我们今天就来看看如何使用mybatis中的动态SQL。

二、知识剖析

2.知识剖析

mybatis中的动态SQL中的主要元素

1、 if 是mybatis动态SQL中的判断元素,这个有点类似于Java中的if语句,不同的是这里的if一般常常和test配合使用。

当用户传入的address不为null或者空字符串的时候,我就加上一个where条件,否则就什么条件都不加入。

2、 choose有点类似于Java中的switch,常常配合when和otherwise一起来使用。在查询条件中,如果用户传来了id,那么我就查询该id的数据,如果用户传来了address,那么我就我们添加address的查询条件,如果用户传来了username, 那么我就添加username的查询条件,最后如果用户任何一个查询条件都没有添加进来,那么默认查询条件就是查询id小于10的所有数据。

3 、在上面的案例中小伙伴们可能都发现了一个问题,就是我们在添加查询条件的时候,在查询条件之前都先添加了where 1=1, 然后后面直接在这之后再追加and什么什么的,那么每次这样来写显然有点麻烦,有没有简单一点的方案呢?当然有,我们可以通过where元素,只有where元素中有条件成立,才会将where关键字组装到SQL中,这样就比前一种方式简单许多

4、 trim有点元素替换的意思,还是上面的案例,我们可以将and替换为where,

set是我们在更新表的时候使用的元素,通过set元素,我们可以逐字段的修改一条数据 在set元素中,如果遇到了逗号,系统会自动将之去除

5、foreach元素用来遍历集合,比如我想查询多个城市的人,我的sql语句可能是这样SELECT * FROM user2 WHERE address IN(‘西安’,‘北京’),我在查询的时候可能只是传入了一个list集合,该集合中有西安和北京两个查询条件,那我如何将这个集合组装成一个sql语句呢?

6、collection表示传入的参数中集合的名称,index表示是当前元素在集合中的下标,open和close则表示如何将集合中的数据包装起来,separator表示分隔符,item则表示循环时的当前元素。这样一段配置最终组合成的sql就是SELECT * FROM user2 WHERE address IN(‘西安’,‘北京’)。

7、bind使用bind元素我们可以预先定义一些变量,然后在查询语句中使用

三、常见问题

1、在使用MyBatis的动态SQL功能时,可能会出现单参数方法不执行或者抛出该属性没有get、set方法的异常

2 、choose标签 没有else标签.

3 、使用set标签 if语句中id=null时系统出现异常 UPDATE TABLE SET id= #{id,jdbcType=INTEGER} ,name = #{name,jdbcType=VARCHAR} where id = #{id,jdbcType=INTEGER}

四、解决方案解决方案

1 在Mapper接口中通过 @Param 来标记该参数即可

2 可以使用when otherwise标签来达到类似于if … else…foreach标签 select * from tables where id in(3,6,…);要么3,要么6,…

3 节点标签:trim主要功能是可以在Trim包含的内容前加上某些前缀(prefix),也可以在Trim包含的内容之后加上某些后缀(suffix)还可以把Trim包含内容的首部的某些内容忽略掉(prefixOverrides) ,也可以把Trim包含的内容的尾部的某些内容忽略掉(suffixOverrides)utm_source=copy方法2:把更新条件标签内的内容,放在标签中

五、编码实战


public class Man implements Human { 

private QQCar car; public Man() { 

this.car = new QQCar(); } 

@Override public void xiabibi() { } 

public void driveCar(){ car.drive(); } }

接口Car暂有两个实现:奔驰车和QQ车,在以上Man类和QQCar类高度耦合的代码中,老司机通过构造器只创建了QQ车对象,所以只能开QQ车,那么老司机想开奔驰怎么办呢,你让他重新创建奔驰车的对象吗?这样高度耦合的代码似乎是毫无办法的,那么,我们通过注入对象的方式对上述代码做一番改进:


public class Man implements Human {

 private Car car; public Man(Car car) { this.car = car; }

  @Override public void xiabibi() { } public void driveCar() { car.drive(); }

   }

以上代码根据多态特性,通过构造器接口注入的方式屏蔽掉了具体的对象实现,这样,老司机就能想开什么车就开什么车了。这就是依赖注入带来的好处。

六、扩展思考

1 动态SQL还有哪种实现方式?

2 不同版本mybaits使用动态SQL时的差别?

七、参考文献

http://blog.youkuaiyun.com/jpzhu16/article/details/52810747

https://www.cnblogs.com/dongying/p/4092662.html

https://www.cnblogs.com/zkongbai/p/5336015.html

http://how2j.cn/k/mybatis/mybatis-tutorial/1087.html?p=13495

八、更多讨论

1 动态SQL还有哪种实现方式?

还可以使用注解的方式去实现动态SQL、脚本sql、在方法中构建sql、结构化SQL

2 动态SQL中,List传值错误,有时要对批量数据进行处理,难免会使用list做为参数


@SelectProvider(type = UserDaoProvider.class, method = "find")  

    public List<Map> find(List list);      

    class UserDaoProvider {  

        public String find(List list) {  

这是一个最简单的list传参,但是在运行时会报传参错误。这是mybatis内部机制造成的,其参数需要是key/value结构,当遇到这里不是key/value结构的list时,mybatis会自己把它转换成key/value结构,key就是他的名字"list",value就是他的值List,要正确传参需要使用key/value结构的map,如下


@SelectProvider(type = UserDaoProvider.class, method = "find")  

    public List<Map> find(List list);      

    class UserDaoProvider {  

        public String find(Map map) {  

            List list = (List) map.get("list");  

3mybatis对动态sql语句的解析过程?

推荐这篇文章,讲的很详细,通过解析源码来分析的

http://www.importnew.com/24160.html

九 鸣谢:

感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。

十 结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

(王道计算机组成原理)第二章数据的表示和运算-第三节:运算方法和运算电路 1(基本运算部件) 本文主要介绍了计算机组成原理中的加法器和算术逻辑单元(ALU)的基本概念与实现原理。首先,文章详细讲解了一位全加器的工作原理,包括其输入输出、逻辑表达式及真值表。接着,介绍了并行加法器的两种类型:串行进位和并行进位的加法器,分析了它们的优缺点。随后,文章探讨了带标志位的加法器,说明了如何通过标志位生成逻辑来判断加法结果的状态。最后,文章阐述了ALU的功能及其实现原理,包括ALU的基本结构、控制信号的作用以及在实际考试中的图示表示。通过这些内容,读者可以全面了解加法器和ALU在计算机中的重要作用及其工作原理。 阅读详情

相关推荐

xilinx 暑期学校项目(二) 通过HLS实现二维傅里叶变换(2Dfft)及图像数据读入读出方法

要进行维纳滤波,首先就是要将图像矩阵通过二维fft变换到频域。 但是hls_fft.h中只有一维fft的函数,因此我们采用对行逐行进行一维fft,再对列逐行进行一维fft来实现二维fft的效果。 文章目录自带的fft例程二维fft的实现数据的读入和读出读入读出维纳滤波操作 自带的fft例程 自带的fft例程中包括有如下四个函数 void dummy_proc_fe( bool direction, config_t* config, cmpxData in[FFT_LENGTH],

战斗果冻的训练中心 2328

mybatis动态查询语句FIND_IN_SET()方法

mybatis动态查询语句FIND_IN_SET()方法

weixin_44326073的博客 3046

S32K344 Flash Driver实战:手把手教你实现任意字节写入与扇区解锁(含C40_Ip避坑指南)

本文深入解析S32K344微控制器的Flash驱动开发,重点解决C40_Ip驱动库的8字节对齐限制和扇区保护锁问题。通过实战案例和代码示例,详细介绍了如何实现任意字节写入、扇区解锁及性能优化策略,为Bootloader和OTA升级等应用提供可靠解决方案。

weixin_33713707的博客 430

mybatis常用标签

一.定义sql语句 1.select 标签 属性介绍: (1)id :唯一的标识符. (2)parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User或user (3)resultType :语句返回值类型或别名。注意,如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType 与resultMap 不能并用) <select id="selectByPrimaryKey" resultMap="BaseResultMap" parame.

weixin_42408447的博客 1万+

一觉醒后ChatGPT 被淘汰了

近日,AI 界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

Rocky006的博客 13万+

allegro转AD-(附工具)

本文介绍了将Allegro的.brd文件转换为Altium Designer可用的.alg文件的操作流程。首先需要下载专用转换工具,然后通过运行.bat脚本将.brd文件转换为.alg格式。最后在Altium Designer中使用导入向导完成文件转换,生成可用的PCB设计文件。整个过程简单快捷,只需三个步骤即可实现Allegro到Altium Designer的工程文件转换。

weixin_50120208的博客 1713

【mybatis】-- FIND_IN_SET

<if test="entity.quarterId != null and entity.quarterId != ''"> and FIND_IN_SET(#{entity.quarterId},quarter_id) </if> 判断传入的值,是否在数据库字段中存在,比较类似于like 以上判断传入的quarterId是否在数据库字段quarter_id(此字段多个id以逗号分隔)中存在 ...

杜 2233

ANSYS Workbench接触分析实战:从算法选择到收敛难题破解

本文深入解析ANSYS Workbench接触分析的核心技术与实战技巧,涵盖四大接触算法选择、收敛难题破解秘籍及典型场景参数设置。通过实际案例演示如何优化接触刚度、pinball区域和非对称行为等关键参数,帮助工程师有效解决结构非线性问题,提升仿真效率和精度。

weixin_28705087的博客 358

【MySQL实践】使用FIND_IN_SET查询逗号隔开的数据&Mybatis-Plus的实现方式

项目中有一张表中有这么一个字段,这个字段的值是通过逗号隔开的数据,例如:`1,2,3,4,5`,并且在存储的时候这些数字并不是有序的,有可能是:`2,3,5,1,4`等等,当然也可能不完全是5个数字,也可能是:`1,5`,`2,3,5`等等。 对于逗号隔开的数据,可以通过函数来进行匹配,其他符号隔开的数据可以通过like函数来进行拼接。

积木成林,聚沙成塔 8271

VLA数据采集以及训练

直到15s计时结束,弹出下面的内容,这个时候不会录制视频了,这里就是需要复位物体到初始位置,尽量保证物体的初始位置放在一样的位置,计时3s,同样根据自己的复位时间来修改(--dataset.reset_time_s=3),这里和前面录制数据的区别就是fps后面多了一个nment,可以作为一个标记,知道什么时候开始去复位而不会拍到自己的手臂。复制网址,在浏览器打开,会出现下面的窗口,依次检查每一轮是否存在问题,例如是否出现录制不完整,是否存在除了机械臂以外的其他移动物体,这些都可能会影响最终训练的效果。

weixin_45303602的博客 496

压缩包密码破解工具ZIP Cracker2.0.1.2 正式版

一款多功能文件密码破解工具,支持ZIP、RAR、Office等主流加密格式,提供CPU/GPU双模式破解。该软件采用黑客风格界面,具备环境自检修复功能,支持实时监控硬件使用率。内置hashcat等专业破解工具,通过拖拽文件即可快速破解,GPU模式速度可达CPU的10-100倍。最新版本优化了中文路径支持,并提升了启动速度。

bfq05234214的博客 480

mybatis中 find_in_set 与in的使用

mybatis中 find_in_set 与in的使用 1. find_in_set: FIND_IN_SET(str,strlist) ;      假设,字符串str在strlist的列表中,其中strlist 的字符串是被“,”分开的,那么在mybatis中的查询语句为    “find_in_set(id,#{id})”,这样在传递到mysql中的时候,就会默认的为字符串

flqxing的博客 1万+

第7次CCF PTA编程培训师资认证-T1 真题解析(2024下)

B。

lan_in的博客 513

JDBC连接池原理及分析

大家好,我是IT修真院西安分院第4期的JAVA学员,一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,修真院官网Java任务1,深度思考中的知识点JDBC连接池原理 一、.背景介绍 什么是连接池 1)连接池,首先从字面意思理解,这是一个偏正短语,左偏右正,重点在池这个字上。 池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的...

weixin_43124134的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JDBC 连接池原理

本文介绍了 JDBC 连接池原理的相关内容。。。

Regino的博客 573

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

jdbc数据库连接池的原理及应用

JDBC)是一种用于执行SQL语句的Java API,可以连接数据库并执行各种数据库操作。在使用JDBC连接数据库时,通常需要频繁地打开和关闭数据库连接,这样会导致资源的浪费和性能的下降。为了解决这个问题,可以使用数据库连接池来管理数据库连接,提高数据库访问的性能和效率。数据库连接池可以有效地管理数据库连接,提高数据库访问的性能和效率。通过预先创建一定数量的连接,并将这些连接保存在连接池中,应用程序可以随时获取连接并执行数据库操作。

互联网知识分享 444

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JDBC 连接池工作原理以及开源连接池 DBCP、C3P0、Druid

一、JDBC 连接池的工作原理 二、JDBC 开源连接池——DBCP 三、JDBC 开源连接池——C3P0 四、JDBC 开源连接池——Druid

Lemon 1196

JDBC 及连接池底层原理

一:     1.JDBC是数据库驱动:数据库厂商 提供的  用来操作数据库的  jar包     2.因为每个数据库的驱动都不一样,导致学习成本高,sun为了简化数据库操作,提供了的一套规范,本质是一大堆接口。(要求数据库常桑在提供驱动时都实现jdbc接口)         jdbc由两个包组成:java.sql   javax.sql    已经被集成到了javase中(jdbc中是一个...

weixin_40728293的博客 2049

JDBC 数据库连接池 工作原理

JDBC 数据库连接池 工作原理 JDBC连接池技术,是通过在客户之间共享一组连接,而不是在它们需要的时候再为它们生成,这样就可以改善资源使用,提高应用程序的响应能力。 1.1 连接池的建立 应用程序中建立的连接池其实是一个静态的。所谓静态连接池是指连接池中的连接在系统初始化时就已分配好,且不能随意关闭连接。Java中提供了很多容器类可以方便的构建连接池,如:Vector、Stack、Servlet、Bean等,通过读取连接属性文件Connections.properties与数据库实例建立连接。在系统初始

qq_45926448的博客 1134

JDBC的数据库连接池的工作原理

随着信息技术的高速发展与广泛应用,数据库技术在信息技术领域中的位置越来越重要,尤其是网络应用和电子商务的迅速发展,都需要数据库技术支持动态Web站点的运行,而传统的开发模式是:首先在主程序(如Servlet、Beans)中建立数据库连接;然后进行SQL操作,对数据库中的对象进行查询、修改和删除等操作;最后断开数据库连接。使用这种开发模式,对于一个简单的数据库应用,由于数据库的访问不是很频繁,只需要

wukecocoa的专栏 464

JDBC与连接池的区别、原理和连接池的有点

是连接数据库的基本方式,是一种用于执行SQL语句的java API ,可以为多种关系数据库提供统一访问,它由一组java编写的类和接口组成。1、首先加载jdbc 驱动程序,2、然后建立数据库连接Connection,3、创建执行SQL的语句Statenment,4、处理结果集ResultSet,并返回5、最后释放资源。这种方式每次和数据库连接时,都需要实例一下连接数据的方法和类。

ls18802694089的博客 385

JDBC原理和连接池技术

JDBC原理: Java Datebase Connectivity:java访问数据库的解决方案 .希望用相同的方式访问不同的数据库,以实现与具体数据库无关的java操作页面 .JDBC定义了一套标准接口,即访问数据库通用的API,不同的数据库厂商根据各自的 数据库的特点去实现这些接口 具体实现是由数据库厂商去实现的. JDBC接口以及数据库厂商实现 .DriverManager       ...

CXY_ZPH的博客 256

jdbc连接池原理及分析

1.背景 数据库连接”是一种稀缺的资源,建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。为了保障网站的正常使用,应该对其进行妥善管理。其实我们查询完数据库后,不是关闭连接,而是暂时存放起来,当别人使用时

bike666222的博客 251
上一篇: 什么是序列化和反序列化,在RMI中是否要实现 SERIALIZABLE 接口, SERIALVERSIONUID的用处是什么?
下一篇: 什么是RMI,为什么要使用RMI框架?
learning__java
博客等级 码龄8年 87粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值