mysql-connector-java和spring-boot-starter-jdbc和mybatis-spring-boot-start

mysql-connector-java和spring-boot-starter-jdbc和mybatis-spring-boot-start

JDBC是什么意思?

JDBC是使用java语言操作mysql数据库的规范,java语言必须按照这个规范写才可以操作mysql数据库。

mysql-connector-java

在最开始的时候 程序中是不允许使用java语言操作mysql数据库的 但是mysql-connector-java打破了这个局面。简单来说就是mysql-connector-java允许了可以通过java去操作mysql数据库。mysql-connector-java相当于是mysql数据库的客户端。

mysql-connector-java是Mysql提供的实现了JDBC定义的驱动,什么是JDBC呢?JDBC是一种规范,定义了Java语言该如何去操作数据库,也就是实现相关的API,是一种java语言操作数据库的接口规范。

相关代码

Connection connection = null;
Statement statement = null;
ResultSet rs = null;
int count;try {connection = dataSource.getConnection();statement = connection.createStatement();rs = statement.executeQuery("select count(*) from foo");if(rs.next()) {count = rs.getInt(0);}
} catch (SQLException exp) {throw new RuntimeException(exp);
} finally {if(connection != null) {try { connection.close(); } catch (SQLException exp) {}}if(statement != null) {try { statement.close(); } catch (SQLException exp) {}}if(rs != null) {try { rs.close(); } catch (SQLException exp) {}}
}

上面的代码是最原始的java操作mysql数据库的结构,可以说很麻烦,因此才有了后面的spring-boot-starter-jdbc。

spring-boot-starter-jdbc

spring-boot-starter-jdbc是Spring提供的,它基于mysql-connector-java又进行了封装,使得java操作mysql的方法更加的简单化了。
其实最主要的还是spring-boot-starter-jdbc中引入了操作mysql数据库的模板JdbcTemplate。我们上面已经说了JDBC其实就是表示一种规范,一种Java操作Mysql的规范 包括怎么连接mysql 怎么接收返回值 这个过程要怎么写?
所以JdbcTemplate类其实就是提供了一种新的JDBC模板,让我们之前的java操作mysql的规范更加的简单化了。

相关代码如下:

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
int count = jdbcTemplate.queryForObject("select count(*) from foo", Integer.class);
// 稍微复杂些的,代码来自下面提到的链接
public Book findBookInfo(String id) {String sql = "select * from tb_book where id=?";Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);return book;
}

也就是mysql-connector-java提供的是JDBC,而spring-boot-starter-jdbc提供的是更加简化版的JDBC-----JdbcTemplate。

mybatis-spring-boot-starter

mybatis-spring-boot-start是更加简化版的JDBC,它比起spring-boot-starter-jdbc提供的JDBC规范更加的简化。最大的特点就是SQL书写更加的舒服了,可以放到mapper.xml文件里面。而且sql书写可以和接口分开,什么意思呢?比方说mysql-connector-java提供的JDBC,写完sql语句之后 下面就要写调用接口了 如下图:
在这里插入图片描述
而spring-boot-starter-jdbc提供的JDBCTemplate新的规范,也是需要把sql语句和接口写在一块的 如下图:
在这里插入图片描述
但是如果是mybatis-spring-boot-starter的话,我们就可以把sql语句写到mapper.xml映射文件中,然后接口单独写到动态代理接口中,想要操作数据库的时候,直接调用动态代理接口就可以了 无需再在动态代理接口中传入sql语句,这样是不是方便了很多。
如下:

@Mapper
@Repository
public interface LoginDao {void insertUser(@Param("ID") String ID, @Param("password") String password, @Param("phone") String phone);
}
<mapper namespace="com.dao.LoginDao"><insert id="insertUser">INSERT INTO user(ID,phone,password)VALUES(#{ID},#{phone},#{password});</insert><select id="selectEquipment" resultType="Equipment">SELECT *FROM equipmentWHERE username = #{username}</select>
</mapper>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2981989.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

游泳耳机怎么选?这四款游泳耳机一定要看!综合实力遥遥领先!

如今&#xff0c;在健康生活的风潮推动下&#xff0c;游泳作为一种全身性的有氧运动&#xff0c;不仅深受广大健身爱好者的青睐&#xff0c;更是许多人夏季消暑、塑形和放松心情的首选方式。而随着科技的不断进步&#xff0c;传统的游泳体验也逐渐与现代科技产品相结合&#xf…

2024.04.24记录所解决的问题

一解决了使用VM虚拟机作为dubbo-admin服务器提供者在浏览器访问失败问题 一开始在服务器上面即使运行了zookeeper和dubbo-admin容器都没有访问出dubbo-admin的界面管理器。查看了其他映射端口以及注册中心的地址等等其他参数&#xff0c;都不行&#xff0c;然后就一直没有去处…

JetBrains RubyMine v2024.1 安装教程 (Rails/Ruby集成开发环境)

前言 JetBrains RubyMine是一款杰出而全面的Ruby代码编辑器&#xff0c;能够深入识别动态语言的细节&#xff0c;为用户提供智能编码辅助功能。它能够自动检测错误代码段&#xff0c;并提供智能的编写和修复代码的建议&#xff0c;帮助用户进行代码重构。此外&#xff0c;Ruby…

前端css中filter(滤镜)的使用

前端css中filter的使用 一、前言二、补充内容说明三、模糊&#xff08;一&#xff09;、模糊效果&#xff0c;源码1&#xff08;二&#xff09;、源码1运行效果1.视频演示2.截图演示 四、阴影&#xff08;一&#xff09;、阴影效果&#xff0c;源码2&#xff08;二&#xff09;…

SS26A-ASEMI超低VF值肖特基SS26A

编辑&#xff1a;ll SS26A-ASEMI超低VF值肖特基SS26A 型号&#xff1a;SS26A 品牌&#xff1a;ASEMI 封装&#xff1a;SMA 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;2A 最大循环峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;60V 最大正向电压&a…

社交媒体数据恢复:Facebook

在使用Facebook的过程中&#xff0c;可能会出现数据丢失的情况&#xff0c;如误删了重要的帖子、照片或其他文件。在这种情况下&#xff0c;你可以尝试以下方法来恢复Facebook的数据。 首先&#xff0c;确保你备份了Facebook的数据。如果你定期备份数据&#xff0c;那么恢复起…

探索SmartEDA:电路仿真的教学新境界

在电子工程的教学领域&#xff0c;随着技术的飞速发展&#xff0c;传统的教学方法已经难以满足现代学生的学习需求。近年来&#xff0c;电路仿真软件在教学中的应用逐渐受到关注&#xff0c;而SmartEDA作为一款功能强大的电路仿真软件&#xff0c;为电子工程教学带来了革命性的…

GaussDB数据库SQL系列-聚合函数

背景 在这篇文章中&#xff0c;我们将深入探讨GaussDB数据库中聚合函数的使用和优化。聚合函数是数据库查询中非常重要的工具&#xff0c;它们可以对一组值执行计算并返回单个值。例如&#xff0c;聚合函数可以用来计算平均值、总和、最大值和最小值。 这些功能在数据分析和报…

梦境绘师:揭秘生成对抗网络(GAN)的魔法

梦境绘师&#xff1a;揭秘生成对抗网络&#xff08;GAN&#xff09;的魔法 1 引言 在今日的深度学习领域&#xff0c;生成对抗网络&#xff08;GAN&#xff09;已成为一项无人能外的技术&#xff0c;以其独特的数据生成能力俘获了无数研究者和工程师的心。这项技术不仅在理论上…

JS----前端将列表数据转树型数据

前端将列表数据转树型数据 场景&#xff1a;后端返回列表数据&#xff0c;由前端根据业务需求完成树型数据转换&#xff0c; 常用于侧边导航菜单&#xff0c;下拉树型数据项等 export function listToTree(data: []) {var map: any {},tree: any []data.forEach((item: any…

【缓存服务】⭐️自定义实现一个简易的数据缓存

目录 &#x1f378;前言 &#x1f37b;手写缓存服务 &#xff08;1&#xff09;缓存实体类 &#xff08;2&#xff09;缓存工具类 &#xff08;3&#xff09;测试缓存服务 &#x1f377;已有的缓存工具 &#x1f379;章末 &#x1f378;前言 俗话说 有轮子不用 就是玩 开个…

Qt 菜单栏上手教程:QMenuBar QMenu QToolbar

引言 在Qt框架中&#xff0c;QMenuBar、QMenu、QToolbar和QAction都是用于构建应用程序界面中的用户交互元素。 QMenuBar 是什么&#xff1a;QMenuBar是一个用于创建横向菜单栏的类。在桌面应用程序中&#xff0c;它通常位于窗口的顶部。应用场景&#xff1a;当您需要一个包含…

vue快速入门(四十)非父子组件通信

注释很详细&#xff0c;直接上代码 上一篇 新增内容 媒介js的创建发送组件发送事件示例接收组件接收事件示例 源码 App.vue <template><div id"app"><TessFirst></TessFirst><TestSecond></TestSecond></div> </templ…

音视频直播原理解析

直播原理就是一个推流和拉取流的过程&#xff1b; 直播端将直播流推送至服务器&#xff0c;用户端发起请求从服务器拉取直播流然后解码播放 第一部分就是视频直播端的操作&#xff1a;视频采集处理后推流到流媒体服务器。 首先从前端采集设备中获得原始的音频、视频数据&…

车载系统的 加减串器应用示意

overview 车载系统上使用加减串器来实现camera&#xff0c; lcd屏等 图像数据的远距离传输&#xff0c;将原先在短距离传输视频信号的mipi csi&#xff0c;dsi 等的TX&#xff0c;RX中间&#xff0c;插入加减串器&#xff0c;实现长距离的可靠传输。 示意图如下 往往一路视频…

蓝海创意云亮相第二节南京大学苏州文化周系列活动

4月19日-22日&#xff0c;“AI苏州 XIU青春”南京大学苏州文化周系列活动在南京大学鼓楼校区隆重举行&#xff0c;蓝海创意云作为苏州高新区XR领域的佼佼者&#xff0c;携vLive虚拟直播亮相活动现场&#xff0c;为本次活动打造了一个极具科技感、想象力、技术力的虚拟直播体验点…

卡尔曼滤波器(一):卡尔曼滤波器简介

观看MATLAB技术讲座笔记&#xff0c;该技术讲座视频来自bilibili账号&#xff1a;MATLAB中国。 一、什么是卡尔曼滤波器 卡尔曼滤波器是一种优化估计算法&#xff0c;是一种设计最优状态观测器的方法&#xff0c;其功能为&#xff1a; 估算只能被间接测量的变量&#xff1b;通…

条件生成对抗网络(cGAN)在AI去衣技术中的应用探索

随着深度学习技术的飞速发展&#xff0c;生成对抗网络&#xff08;GAN&#xff09;作为其中的一个重要分支&#xff0c;在图像生成、图像修复等领域展现出了强大的能力。其中&#xff0c;条件生成对抗网络&#xff08;cGAN&#xff09;通过引入条件变量来控制生成模型的输出&am…

CountDownLatch使用错误+未最终断开连接导致线程池资源耗尽

错误描述&#xff1a; 我设置了CountDownLatch对线程的协作做出了一些限制&#xff0c;但是我发现运行一段时间以后便发现定时任务不运行了。 具体代码&#xff1a; public void sendToCertainWeb() throws IOException, InterruptedException {List<String> urlList …

C++ 虚表起源

本文会让看不见 摸不着的虚表(Vtable),虚指针(Vptr)彻底现行 本文涉及思想: C 面向对象 封装 继承 多态 中的 多态 概念解释: 虚表指针&#xff1a; 这是指向虚表&#xff08;vtable&#xff09;的指针&#xff0c;虚表中包含了该类的所有虚函数对应的地址。 虚表&#x…