当前位置: 首页 > news >正文

MyBatis 操作数据库(⼊⻔)--JDBC 操作

JDBC 操作⽰例

我们先来回顾⼀下JDBC的操作流程:

1. 创建数据库连接池DataSource 2. 通过DataSource获取数据库连接Connection

3. 编写要执⾏带?占位符的SQL语句

4. 通过Connection及SQL创建操作命令对象Statement

5. 替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值

6. 使⽤Statement执⾏SQL语句

7. 查询操作:返回结果集ResultSet,更新操作:返回更新的数量

8. 处理结果集

9. 释放资源 下⾯的⼀个完整案例,展⽰了通过JDBC的API向数据库中添加⼀条记录,修改⼀条记录,查询⼀条 记录的操作。

-- 创建数据库 create database if not exists library default character set utf8mb4; -- 使⽤数据库 use library; -- 创建表 create table if not exists soft_bookrack ( book_name varchar(32) NOT NULL, book_author varchar(32) NOT NULL, book_isbn varchar(32) NOT NULL primary key );

以下是JDBC操作的具体实现代码:

package com.example.demo.mapper; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class SimpleJdbcOperation { private final DataSource dataSource; public SimpleJdbcOperation(DataSource dataSource) { this.dataSource = dataSource; } /** * 添加⼀本书 */ public void addBook() { Connection connection = null; PreparedStatement stmt = null; try { //获取数据库连接 connection = dataSource.getConnection(); //创建语句 stmt = connection.prepareStatement( "insert into soft_bookrack (book_name, book_author, book_isbn) values (?,?,?);" ); //参数绑定 stmt.setString(1, "Spring in Action"); stmt.setString(2, "Craig Walls"); stmt.setString(3, "9787115417305"); //执⾏语句 stmt.execute(); } catch (SQLException e) { //处理异常信息 } finally { //清理资源 try { if (stmt != null) { stmt.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { // } } } /** * 更新⼀本书 */ public void updateBook() { Connection connection = null; PreparedStatement stmt = null; try { //获取数据库连接 connection = dataSource.getConnection(); //创建语句 stmt = connection.prepareStatement( "update soft_bookrack set book_author=? where book_isbn=?;" ); //参数绑定 stmt.setString(1, "张卫滨"); stmt.setString(2, "9787115417305"); //执⾏语句 stmt.execute(); } catch (SQLException e) { //处理异常信息 } finally { //清理资源 try { if (stmt != null) { stmt.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { // } } } /** * 查询⼀本书 */ public void queryBook() { Connection connection = null; PreparedStatement stmt = null; ResultSet rs = null; Book book = null; try { //获取数据库连接 connection = dataSource.getConnection(); //创建语句 stmt = connection.prepareStatement( "select book_name, book_author, book_isbn from soft_bookrack where book_isbn =?" ); //参数绑定 stmt.setString(1, "9787115417305"); //执⾏语句 rs = stmt.executeQuery(); if (rs.next()) { book = new Book(); book.setName(rs.getString("book_name")); book.setAuthor(rs.getString("book_author")); book.setIsbn(rs.getString("book_isbn")); } System.out.println(book); } catch (SQLException e) { //处理异常信息 } finally { //清理资源 try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { // } } } public static class Book { private String name; private String author; private String isbn; //省略 setter getter ⽅法 } }

从上述代码和操作流程可以看出,对于JDBC来说,整个操作⾮常的繁琐,我们不但要拼接每⼀个参 数,⽽且还要按照模板代码的⽅式,⼀步步的操作数据库,并且在每次操作完,还要⼿动关闭连接 等,⽽所有的这些操作步骤都需要在每个⽅法中重复书写.那有没有⼀种⽅法,可以更简单、更⽅便的 操作数据库呢?

答案是肯定的,这就是我们要学习MyBatis的真正原因,它可以帮助我们更⽅便、更快速的操作数据 库.

http://www.jsqmd.com/news/1205010/

相关文章:

  • AU-60 模组实战,四档拾音距离如何一键切换
  • 开源AI CRM系统:架构解析与智能应用实践
  • 钉钉AI Pro vs 企微AI:一场关于「谁更懂中国企业」的再验证
  • FPGA开发入门:盘古1K按键控制LED实验详解
  • 深入解析blender_mmd_tools:5个核心模块实现MMD模型高效导入
  • 嵌入式DSP实验:AD7606与AD5724数据采集与输出配置详解
  • Cursor实战案例-运维监控-100-全自动镜像清理:利用Shell脚本定时检测并清除Docker无用挂起镜像与策略数据
  • Longan Pi 3H开发板图像采集与AI物体识别实践
  • 智能家居中高端产品技术路线对比分析(2026)
  • 阿里云秒悟Meoo:自然语言生成应用的AI开发平台解析
  • Cocos2d-x中文乱码问题解决方案与优化
  • 智谱清言导出对话全方案盘点,依靠 AI 导出鸭实测各类导出工具,优选高效文档导出路径
  • Mac环境变量配置与Shell加载机制详解
  • Kimi 转 Word 工具推荐?高效便捷的 AI 导出鸭,轻松完成 Kimi 内容转 Word
  • 大模型与知识库结合的Code Review优化实践
  • RAG系列之——Rerank到底解决了什么问题?
  • AI镜像站深度评测:ChatGPT与图像生成服务的免费替代方案
  • CentOS 7 Linux命令实战与系统管理指南
  • RMBG-2.0:AI图像背景分离技术的突破与应用
  • Ubuntu配置XRDP远程桌面与XFCE环境指南
  • 雷神之锤3源码解析:从经典引擎架构到现代游戏开发基石
  • AI编程在规格驱动开发中的实践与效能提升
  • I/O 多路复用完全指南 —— select、poll、epoll
  • Windows下Pexpect实现SSH自动化的兼容性解决方案
  • Java单元测试实战:JUnit核心注解、断言与Maven依赖配置详解
  • AI模型在论文润色与学术翻译中的应用探索
  • 5分钟掌握Loop:macOS窗口管理的终极优雅解决方案
  • Cursor实战案例-运维监控-98-内存泄漏深度排查:使用memlab诊断长连接WebSocket中的堆栈内存溢出
  • 深入解析Android权限保护等级:从XML配置到系统安全实现
  • Hello-Agents:从零手搓AI Native Agent的开源实战教程