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 equipment
        WHERE username = #{username}
    </select>
</mapper>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

省级客运、货运量及周转量数据(1990-2022年)

1、数据介绍 客运量和货运量是衡量交通运输行业发展状况的重要指标&#xff0c;可以反映一个地区或国家的经济发展水平和人民生活水平。而周转量则是反映运输行业效率的指标&#xff0c;即货物或旅客被运输的总距离。 省级客运、货运量及周转量是衡量一个地区交通运输行业发展…

第⑮讲:Ceph集群管理与监控操作指南

文章目录 1.查看集群的状态信息2.动态的查看集群的状态信息3.查看集群的利用率4.查看OSD的资源利用率5.查看OSD的列表6.查看各组件的状态7.查看集群的仲裁信息8.查看/修改集群组件sock的配置参数 1.查看集群的状态信息 通过集群状态信息可以看到集群的健康状态、各个组件的运行…

uniapp app权限说明弹框2024.4.23更新

华为上架被拒绝 用uni-app开发的app&#xff0c;上架华为被拒&#xff0c;问题如下&#xff1a; 您的应用在运行时&#xff0c;未见向用户告知权限申请的目的&#xff0c;向用户索取&#xff08;电话、相机、存储&#xff09;等权限&#xff0c;不符合华为应用市场审核标准。…

Bingbong的回文路径

Here 利用回文串&#xff0c;从左往右与从右往左的hash值相同来判断从左往右&#xff0c;例&#xff1a;从右往左&#xff0c;例&#xff1a;由于在树上&#xff0c;考虑建两颗树&#xff0c;一颗根为最高位&#xff08;up&#xff09;&#xff0c;一棵根为最低位&#xff08;…

0 transformers入门,HuggingFace!

目录 1 了解 2 文本分类 1 了解 1 依赖安装 !pip install transformers -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 2 了解transformers 能做什么 from transformers.pipelines import SUPPORTED_TASKS SUPPORTED_TASKS.items()2 文本分类 我没外网所以…

微信小程序 讯飞录音 点击按钮录音内容转文字

<page-meta page-style"{{ showPolish ? overflow: hidden; : }}" /> <view class"wrap"> <view class"header-tab" style"justify-content: {{typeList.length > 2 ? start : center}}"><view class&quo…

promise笔记

1.介绍 之前的异步编程都是回调函数&#xff08;数据库操作、ajax、定时器、fs读取文件 &#xff09; promise是es6异步编程新的解决方案&#xff0c;是一个构造函数 优点&#xff1a;支持链式调用&#xff0c;可以解决回调地狱&#xff0c;可以指定回调函数 2.使用 functio…

UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd7

安装mamba时报错 检查报错原因&#xff1a; file -i ~/.bashrc file -i ~/.profile发现bashrc的编码不正确 对编码格式进行修改 iconv -f ISO-8859-1 -t UTF-8 ~/.bashrc > ~/.bashrc.utf8 mv ~/.bashrc.utf8 ~/.bashrc cp ~/.bashrc ~/.bashrc.backup执行完指令之后再安…

SAM5916B 法国追梦DREAM 音频DSP芯片

法国追梦/DERAM SAM5504/5704/5716/5808音频DSP芯片,开发板&#xff0c;方案 可用于电子鼓、电子琴、电吉他、效果器、均衡器、啸叫抑制器等电声产品领域 一、全系列芯片&#xff1a; SAM2634 SAM2695 SAM5504B SAM5704B SAM5708B SAM5808B SAM5716B SAM5916B... 二、原厂开发套…

在matplotlib中控制colorbar的长度

在matplotlib中控制colorbar的长度 使用matplotlib绘制带颜色的箭头图&#xff0c;有时想直接把颜色条拿来当比例尺条&#xff0c;就需要控制颜色条的长度。 1. pyplot.colorbar()参数说明 pyplot.colorbar(mappable, ax, cax, **kwargs) mappable是一个ScalarMappble类型的…

【黑马头条】-day12项目部署和发布-jenkins

文章目录 1 持续集成2 软件开发模式2.1 瀑布模式2.2 敏捷开发2.2.1 迭代开发2.2.2 增量开发 3 Jenkins3.1 Jenkins安装3.1.1 导入镜像3.1.2 配置3.1.3 初始化设置 3.2 插件安装3.3 服务器环境准备3.3.1 Docker安装配置3.3.2 Git安装配置3.3.3 Maven安装配置 3.4 Jenkins工具配置…

YoloV8改进策略:卷积改进|DOConv轻量卷积,即插即用|适用各种场景

摘要 本文使用DOConv卷积&#xff0c;替换YoloV8的常规卷积&#xff0c;轻量高效&#xff0c;即插即用&#xff01;改进方法非常简单。 DO-Conv&#xff08;Depthwise Over-parameterized Convolutional Layer&#xff09;是一种深度过参数化的卷积层&#xff0c;用于提高卷…

Win10 搭建 YOLOv8 运行环境(20240423)

一、环境要求 1、Python&#xff0c;版本要求>3.7 2、PyTorch&#xff0c;版本要求>1.7。PyTorch 是一个开源的深度学习平台&#xff0c;为人工智能研究提供了一个灵活的、易于使用的工具集。YOLOv8 是基于 PyTorch 框架实现的&#xff0c;所以需要安装 PyTorch。 3、CUD…

【nginx】nginx启动显示80端口占用问题的解决方案

目录 &#x1f305;1. 问题描述 &#x1f30a;2. 解决方案 &#x1f305;1. 问题描述 在启动nginx服务的时候显示内容如下&#xff1a; sudo systemctl status nginx 问题出现原因&#xff1a; 根据日志显示&#xff0c;Nginx 服务启动失败&#xff0c;主要原因是无法绑定…

Ultralytics YOLOv8 英伟达™ Jetson®处理器部署

系列文章目录 前言 本综合指南提供了在英伟达 Jetson设备上部署Ultralytics YOLOv8 的详细攻略。此外&#xff0c;它还展示了性能基准&#xff0c;以证明YOLOv8 在这些小巧而功能强大的设备上的性能。 备注 本指南使用Seeed Studio reComputer J4012进行测试&#xff0c;它基于…

[Vue warn]: useModel() called with prop “xxx“ which is not declared

我们在使用vue3里面的defineModel的时候可能会出现这个问题&#xff0c;原因是我们使用的 kebab-case 形式的属性名&#xff0c;我也不知道是不是vue3设定这个api的时候设置的不支持&#xff0c;我没找到相关文档&#xff0c;不过我们把 kebab-case 的形式改为 驼峰命名法 或者…

【WEB前端2024】开源元宇宙:乔布斯3D纪念馆-第9课-摆件美化

【WEB前端2024】开源元宇宙&#xff1a;乔布斯3D纪念馆-第9课-摆件美化 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&#…

架构师系列-MYSQL调优(七)- 索引单表优化案例

索引单表优化案例 1. 建表 创建表 插入数据 下面是一张用户通讯表的表结构信息,这张表来源于真实企业的实际项目中,有接近500万条数据. CREATE TABLE user_contacts (id INT(11) NOT NULL AUTO_INCREMENT,user_id INT(11) DEFAULT NULL COMMENT 用户标识,mobile VARCHAR(50…

李沐53_语言模型——自学笔记

语言模型 1.预测文本序列出现的概率 2.应用在做预训练模型 3.生成文本&#xff0c;给定前面几个词&#xff0c;不断生成后续文本 4.判断多个序列中哪个更常见 真实数据集的统计 《时光机器》数据集构建词表&#xff0c; 并打印前10个最常用的&#xff08;频率最高的&…

Zabbix监控系统:基础配置及部署代理服务器

目录 前言 一、自定义监控内容 1、在客户端创建自定义key 2、在服务端验证新建的监控项 3、在web界面创建自定义监控项模版 3.1 创建模版 3.2 创建应用集&#xff08;用于管理监控项&#xff09; 3.3 创建监控项 3.4 创建触发器 3.5 创建图形 3.6 将主机与模板关联…