初学 mybatis
前言
回顾之前 不使用 mybatis 框架,我们是怎么通过Java 操作数据库的= "jdbc"
前提:使用maven 构建的项目
1 添加 关于jdbc 的依赖,以及辅助操作数据库的 commons-dubli jar包
- 截取 前后端项目

2 添加配置文件里面内容有:数据库三件套: username,password,url 。数据库驱动
db.properties 配置文件
driverClass=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/arimethic?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
username=root
password=123456
3 添加 加载 配置文件的类,还包括 连接数据库,关闭 各个资源的方法
jdbcUtil 类【工具类】
package it.projiect3.util;import java.sql.*;
import java.util.Properties;public class jdbcUtil {//读取配置文件内容,使用 static 静态代码块private static Properties properties=new Properties();static {try {properties.load(jdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"));Class.forName(properties.getProperty("driverClass"));} catch (Exception e) {e.printStackTrace();}}public static Connection getCollection() throws SQLException {String jdbcUrl = properties.getProperty("jdbcUrl");String userName = properties.getProperty("username");String userPassword = properties.getProperty("password");return DriverManager.getConnection(jdbcUrl,userName,userPassword);}public static void close(Connection conn,Statement stmt, ResultSet rs) {try {if (rs != null) rs.close();if (stmt != null) stmt.close();if (conn != null) conn.close();} catch (SQLException e) {throw new RuntimeException(e);}}public static void close(Connection conn){close(conn,null,null);}
}
4举例: 查询所有数据
- 截取 前后端项目部分代码
StudentDaoImpl 类
@Overridepublic Student selectAll(Student student) {QueryRunner queryRunner = new QueryRunner();Connection conn=null;try {conn=getCollection();String sql="select id,student_name studentName ,student_password studentPassword from student where student_name=? and student_password=?";return queryRunner.query(conn, sql,new BeanHandler<>(Student.class) ,student.getStudentName(),student.getStudentPassword());} catch (SQLException e) {throw new RuntimeException(e);}finally {close(conn);}}
通过以上的了解,发现即使 使用 jdbc 操作数据库。其中还有 许多重复,且繁琐的操作。是否可以通过学习新的知识,节省部分代码和相关的操作呢?
Mybatis 框架介绍
MyBatis 是一款优秀的轻量级 Java 持久层框架,主要用于简化数据库操作。以下是关于 MyBatis 的基本介绍:
1. 核心功能
自定义 SQL 支持:MyBatis 允许开发者手动编写 SQL 语句,而不是完全依赖于 ORM 自动生成。这种方式提供了更高的灵活性和性能优化能力。
高级映射:通过 XML 或注解,MyBatis 可以将 Java 对象(POJO)与数据库表进行映射。
动态 SQL:MyBatis 提供了强大的动态 SQL 功能,可以根据业务逻辑动态生成 SQL 语句,减少冗余代码。
存储过程支持:支持调用数据库存储过程。
2. 工作原理
MyBatis 通过配置文件(XML 或注解)定义 SQL 映射关系,将 Java 方法与 SQL 语句关联起来。它封装了 JDBC 的繁琐操作,如资源管理、参数设置和结果集处理。
3. 优点
简化开发:减少了大量的 JDBC 代码,简化了异常处理和资源管理。
高性能:允许开发者直接优化 SQL,适合对性能要求较高的场景。
灵活性高:开发者可以自由编写 SQL,充分发挥数据库性能。
易于学习:配置简单,文档详尽,对熟悉 SQL 和 Java 的开发者非常友好。
轻量级:启动时间短,内存占用小,对现有项目侵入性低。
良好的缓存机制:支持一级缓存(SqlSession 级别)和二级缓存(命名空间级别),可显著提升性能。
相关文章:
初学 mybatis
前言 回顾之前 不使用 mybatis 框架,我们是怎么通过Java 操作数据库的 "jdbc" 前提:使用maven 构建的项目 1 添加 关于jdbc 的依赖,以及辅助操作数据库的 commons-dubli jar包 截取 前后端项目 2 添加配置文件里面内容有&…...
机器学习:k均值
所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com),欢迎查看。 在“无监督学习”中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律&…...
保姆级GitHub大文件(100mb-2gb)上传教程
GLF(Git Large File Storage)安装使用 使用GitHub desktop上传大于100mb的文件时报错 The following files are over 100MB. lf you commit these files, you will no longer beable to push this repository to GitHub.com.term.rarWe recommend you a…...
1.【BUUCTF】[SUCTF 2019]EasyWeb
进入题目页面如下 给出源码开始代码审计 <?php // 定义一个名为 get_the_flag 的函数,该函数主要处理文件上传逻辑 function get_the_flag(){// 构造用户上传文件的目录,目录名是 "upload/tmp_" 加上客户端 IP 地址的 MD5 哈希值$userdir…...
CloudberryDB(七)二级索引
在CloudberryDB中,二级索引的概念与PostgreSQL中的类似。但是,由于分布式特性,创建和使用二级索引需要考虑一些额外的因素。以下是关于二级索引的一些要点: 1. **创建索引**:在Greenplum中,可以使用CREATE…...
P1878 舞蹈课(详解)c++
题目链接:P1878 舞蹈课 - 洛谷 | 计算机科学教育新生态 1.题目解析 1:我们可以发现任意两个相邻的都是异性,所以他们的舞蹈技术差值我们都要考虑,4和2的差值是2,2和4的差值是2,4和3的差值是1,根…...
何须付费免费它不香吗
聊一聊 又是一年开学季。 开学了发一些应时期的小软件。 今天给大家分享一款学校班级课程表工具。 这款工具可以投放在学校电子大屏上。 支持学校的白板软件。 软件介绍 学校班级课程表 工具界面清爽,信息能一目了然。 虽然看感觉功能简单,但每个…...
ELK组成及实现原理
ELK是由三个主要组件组成的日志处理和搜索平台,分别是: Elasticsearch:Elasticsearch 是一个基于Lucene构建的开源搜索引擎,提供强大的搜索、分析功能。它负责存储和索引所有数据,并提供实时搜索能力。数据可以通过HTT…...
【Vue3源码解析】响应式原理
源码环境搭建 【Vue3源码解析】应用实例创建及页面渲染-CSDN博客 写文章时的Vue 版本: "version": "3.5.13",针对单个包进行开发环境打包、测试。 pnpm run dev reactivityreactive 创建响应式对象 packages/reactivity/src/reactive.ts …...
servlet中的ServletContext
设置、获取ServletContext配置信息 与ServletConfig不同的是,所有Servlet共享一份ServletContext 在web.xml中设置配置信息 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"https://jakarta.ee/xml/ns/jakartaee"x…...
第1825天 | 我的创作纪念日:缘起、成长经历、大方向
目录 缘起一、成为创作者的初心(一)好记性不如烂笔头(二)文档可以帮助多个人解决同一个问题(三)加深自己对问题的理解,对技术的研究 二、实战项目中的经验分享(一)项目背…...
如何在 Mac 上解决 Qt Creator 安装后应用程序无法找到的问题
在安装Qt时,遇到了一些问题,尤其是在Mac上安装Qt后,发现Qt Creator没有出现在应用程序中。通过一些搜索和操作,最终解决了问题。以下是详细的记录和解决方法。 1. 安装Qt后未显示Qt Creator 安装完成Qt后,启动应用程…...
Java 设计模式之迭代器模式
文章目录 Java 设计模式之迭代器模式概述UML代码实现Java的迭代器 Java 设计模式之迭代器模式 概述 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 UML Iterator:迭代器接口ÿ…...
登录演示和功能拆解
登录演示和功能拆解 表单基础校验实现 1. 基础双向绑定 <template><el-form><el-form-item label"账号"><el-input v-model"formData.username" /></el-form-item><el-form-item label"密码"><el-inpu…...
DeepSeek深度求索API多线程批量写原创文章软件-ai痕迹极低
DeepSeek是一款由国内人工智能公司研发的大型语言模型,拥有强大的自然语言处理能力,能够理解并回答问题,还能辅助写代码、整理资料和解决复杂的数学问题。 与OpenAI开发的ChatGPT相比,DeepSeek不仅率先实现了媲美OpenAI-o1模型的…...
Redis进阶使用
在日常工作中,使用Redis有什么需要注意的? 设置合适的过期时间。尽量避免大key问题,避免用字符串存储过大的数据;避免集合的数据量太大,要定期清除。 常用的数据结构有哪些?用在什么地方? 按…...
Python常见面试题的详解6
1. 按字典 value 值排序 要点:对于给定字典,使用 sorted() 函数结合 items() 方法,依据 value 进行排序,也可以定义一个通用函数,支持按 value 升序或降序排序。示例: python d {a: 1, b: 2, c: 3, d: …...
Linux基础之文件权限的八进制表示法
1. Linux 文件权限概述 在 Linux 中,每个文件或目录都有三种基本权限,分别是: 读权限 - r:允许查看文件内容。写权限 - w:允许修改文件内容。执行权限 - x:允许执行文件或进入目录。 每个文件或目录的权…...
数据结构与算法面试专题——堆排序
完全二叉树 完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 完全二叉树中如果每棵子树的最小值都在顶部就是小根堆 设计目标:完全二叉树的设计目标是高效地利用存储空间,同时便于进行层次遍历和数组存储。它的结构使得每个节点的子节点都可以通过简…...
《On Java进阶卷》阅读笔记(五)
第7章 IO系统 I/O流: IO有很多不同的来源和去处,如文件、控制台网络连接等,而且还涉及需求以很多种方式,如顺序读取、随机访问、缓冲、字符、按行读取、按字读取等。 Java8的函数式流相关的类和IO流之间并无关联。 IO流隐藏了…...
别再只用Swiper做普通轮播了!用Vue3+Vite+TS实现这个‘异形’轮播,让你的H5页面瞬间高级
突破常规:用Vue3Swiper打造高级异形轮播组件 在移动端H5页面设计中,轮播图几乎是标配元素。但你是否注意到,90%的轮播图都采用千篇一律的横向滑动效果?这种设计虽然实用,却难以在用户心中留下深刻印象。今天ÿ…...
手把手教你用Python调用免费天气API,5分钟搞定城市代码查询与数据解析
Python实战:5分钟快速集成天气API与智能城市代码查询系统 最近在开发一个社区服务小程序时,需要添加实时天气功能模块。原本以为调用个API就能轻松搞定,结果发现光是处理城市代码匹配就耗费了大半天时间。相信很多开发者都遇到过类似困扰——…...
告别官方手册!i.MX6ULL SD卡启动盘制作保姆级教程(含dd命令详解与分区避坑)
i.MX6ULL SD卡启动盘制作实战指南:从原理到避坑全解析 引言 第一次拿到i.MX6ULL开发板时,很多开发者都会面临一个看似简单却暗藏玄机的任务——制作SD卡启动盘。官方文档虽然提供了步骤,但往往缺乏对底层原理的解释,导致新手在遇到…...
GEBCO_2025_TID类型标识格网数据集
摘要本数据集为 GEBCO_2025 Grid 配套的 TID 类型标识格网,当前文件压缩体积约 90.55 MB,包含 8 个 GeoTIFF 和 2 份配套文档,GeoTIFF 解压后总量约 3560.62 MB。该数据集不直接存储高程或水深,而是用类型编码记录 GEBCO 格网各像…...
FIR威胁情报集成:如何利用YETI框架增强事件响应能力
FIR威胁情报集成:如何利用YETI框架增强事件响应能力 【免费下载链接】FIR Fast Incident Response 项目地址: https://gitcode.com/gh_mirrors/fi/FIR FIR(Fast Incident Response)作为一款高效的事件响应工具,通过与YETI威…...
如何利用ChatPaper自动识别研究论文核心章节:3步掌握AI论文结构分析功能
如何利用ChatPaper自动识别研究论文核心章节:3步掌握AI论文结构分析功能 【免费下载链接】ChatPaper Use ChatGPT to summarize the arXiv papers. 全流程加速科研,利用chatgpt进行论文全文总结专业翻译润色审稿审稿回复 项目地址: https://gitcode.co…...
终极字体美化教程:用MacType让Windows文字显示效果翻倍提升
终极字体美化教程:用MacType让Windows文字显示效果翻倍提升 【免费下载链接】mactype Better font rendering for Windows. 项目地址: https://gitcode.com/gh_mirrors/ma/mactype 还在为Windows系统上模糊不清的字体显示而烦恼吗?MacType是一款革…...
import os
import os 的原理os 是 Python 内置标准库,提供了操作系统接口——让 Python 代码可以操作文件、目录、环境变量、进程等,而且同一套代码在 Windows、macOS、Linux 上都能用。核心原理:抽象层 os 模块的本质是一个跨平台抽象层: 你…...
ESP32-S3开发套件Kode Dot:硬件解析与开发实践
1. Kode Dot:口袋级ESP32-S3开发套件深度解析在创客和物联网开发领域,ESP32系列芯片凭借其出色的性能和丰富的功能一直备受青睐。最近在Kickstarter上亮相的Kode Dot,将ESP32-S3的强大功能与精心设计的硬件整合到了一个仅有734315mm的迷你机身…...
AISMM模型成熟度评估全解析(附2024最新打分细则与组织自测速查表)
更多请点击: https://intelliparadigm.com 第一章:AISMM模型评估报告解读会 AISMM(AI Security Maturity Model)是由国际云安全联盟(CSA)提出的面向生成式AI系统安全能力的成熟度评估框架,其评…...
