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

mybatis 入门案例

前言

我们清楚 mybatis 是一个持久层框架,可以非常便捷的操作数据库。如最常见的对数据进行增删改查操作

项目准备

1  在mybatis 数据库 创建 user 用户表 并插入以下两条数据

  • 以下是一个user.sql 脚本文件
  • 如何使用 脚本文件可以参照
  • MySQL数据库的备份与还原_控制台还原mysql数据库-CSDN博客
-- MySQL dump 10.13  Distrib 8.0.37, for Win64 (x86_64)
--
-- Host: 127.0.0.1    Database: mybatis
-- ------------------------------------------------------
-- Server version	8.0.37/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;--
-- Table structure for table `user`
--DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `user` (`uid` int NOT NULL AUTO_INCREMENT,`uname` varchar(10) COLLATE utf8mb3_croatian_ci NOT NULL,`uage` int NOT NULL,PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_croatian_ci;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `user`
--LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES (1,'张三',20),(2,'李四',18);
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;-- Dump completed on 2025-02-17 16:19:22

2 准备 需要的依赖

学习maven(添加依赖坐标,maven的常用命令,依赖传递,解决依赖冲突)_maven依赖地址-CSDN博客

通过浏览上面的博客,可以获悉从maven repository【maven中央仓库】 中可以得到自己想要的依赖或对应的jar 包


3 检查 idea 自带的maven 是否合适

要求:如果在 添加依赖后,无法下载,就需要检查是否要重新更换maven,不再使用自带的maven。

更换的原则,是在maven 官网上找 和 IDEA 相匹配的maven 版本号。

如何找到 IDEA 相匹配的maven 版本号?

我们打开IDEA ,找到setting 设置里看到 ,构建工具 ,可以知道我们IDEA 需要什么样的版本的maven 。如果没有找到可以找相近的。

怎么下载对应的maven?

可以看下面的博客链接

Maven下载和安装(详细版)_maven download-CSDN博客


demo(案例)

项目目标:打印 查询user表 id=1时 的 用户信息

项目结构

主配置文件(mybatisConfig.xml)映射文件(UserMapper.xml)的准备工作

如何添加(找到) 主配置文件,映射文件

一般当打开maven 构建的项目后,点击 resource,右击新建,看到xml 配置文件,一般是无法直接 得到 主配置文件模板的。

注意:把下面的配置完成之后,下次创建就可以直接在套用模板使用了,更加方便!

应该怎么做呢?

1 打开IDEA文件,设置,编辑器,看到 文件和代码模板


2 .1人为点击添加 主配置文件名,文件类型(xml),主配置文件需要的一般模板

需要的一般模板 如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--settings:控制mybatis全局行为--><settings><!--设置mybatis输出日志--><setting name="logImpl" value="STDOUT_LOGGING"/></settings><!--设置别名--><typeAliases><!--name:实体类所在的包名--><package name="实体类所在的包名"/></typeAliases><!-- sql mapper(sql映射文件)的位置--><mappers><!--name:是包名, 这个包中的所有mapper.xml一次都能加载--><package name="mapper文件所在的包名"/></mappers>
</configuration>

2 .2人为点击添加 映射文件名,文件类型(xml),映射文件需要的一般模板

需要的一般模板 如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">

正式开始

mybatisConfig.xml主配置文件

完整代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--    resourse 的值是 关于 数据库配置文件。含有url,username,password ,数据库驱动 等信息--><properties resource="db.properties"></properties>
<!--    environment 是一个环境,里面包含一个事务管理器,一个数据源 --><environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED">
<!-- 配置数据源信息,主要有 数据库驱动,数据库连接地址,数据库用户名,数据库密码等               --><property name="driver" value="${driverClass}"></property><property name="url" value="${jdbcUrl}"></property><property name="username" value="${username}"></property><property name="password" value="${password}"></property></dataSource></environment></environments><mappers><!-- 使用mapper 标签 指定mapper映射文件--><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>
  • db.proerties 配置文件(配置数据源信息)
driverClass=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/mybatis?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
username=root
password=123456

存在位置,一般是和主配置文件,映射文件共同放在 resource 文件夹下


mapper (持久层)

  • UserMapper(接口)
package fs.mapper;import fs.pojo.User;public interface UserMapper {User findByid(int id);
}

UserMapper.xml 映射文件

通过图片可以看见

namespace: 指定 mapper/dao 接口的完整类名


由于你是查询 用户信息,因此使用select 标签。以下是select 标签在本案例中的具体展现

id: 指定 mapper/dao 接口的方法名

paramerType: 表示 参数类型

resultType: 表示返回值类型


发现 UserMapper 接口名 和 映射文件 名相同

完整代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="fs.mapper.UserMapper"><select id="findByid"  resultType="fs.pojo.User"  parameterType="int">select * from user where uid=#{uid}</select>
</mapper>

pojo/entity(实体类)

  • 实体类的成员变量,需要和 数据库中表的信息相照应

完整代码

package fs.pojo;public class User {private int uid;private String uname;private String uage;public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public String getUage() {return uage;}public void setUage(String uage) {this.uage = uage;}@Overridepublic String toString() {return "User{" +"uid=" + uid +", uname='" + uname + '\'' +", uage='" + uage + '\'' +'}';}
}

Controller 层

  • UserController 类

完整代码

package fs.Controller;import fs.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class UserController {public static void main(String[] args) throws IOException {//加载主配置文件InputStream resource = Resources.getResourceAsStream("mybatisConfig.xml");//获取SqlSessionFactory对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resource);// 获取sqlsession 对象SqlSession sqlSession = sqlSessionFactory.openSession();// 执行查询User user = sqlSession.selectOne("findByid",1);System.out.println(user);}
}

效果展示

相关文章:

mybatis 入门案例

前言 我们清楚 mybatis 是一个持久层框架&#xff0c;可以非常便捷的操作数据库。如最常见的对数据进行增删改查操作。 项目准备 1 在mybatis 数据库 创建 user 用户表 并插入以下两条数据 以下是一个user.sql 脚本文件如何使用 脚本文件可以参照MySQL数据库的备份与还原_控…...

Spring Boot最新技术特性深度解析与实战应用

一、反应式编程:WebFlux与非阻塞架构 1.1 核心价值与场景 Spring Boot 2.x全面拥抱反应式编程模型,通过Spring WebFlux支持异步非阻塞的请求处理,适用于高并发、低延迟的微服务场景(如实时通信、物联网数据处理)。其基于Reactor库实现,采用事件循环模型,显著提升资源利…...

Python使用Flask结合DeepSeek开发

一、背景 我之前关于DeepSeek使用ollama部署的文章大家可以把DeepSeek大模型部署起来。那么ollama还提供了可以调用对应部署模型的API接口。我们可以基于这些接口&#xff0c;做自己的二次开发。使用pythonflaskollama就可以进行模型对话调用。并且前端采用SSE的技术&#xff0…...

前端常见面试题-2025

vue4.0 Vue.js 4.0 是在 2021 年 9 月发布。Vue.js 4.0 是 Vue.js 的一个重要版本&#xff0c;引入了许多新特性和改进&#xff0c;旨在提升开发者的体验和性能。以下是一些关键的更新和新特性&#xff1a; Composition API 重构&#xff1a;Vue 3 引入了 Composition API 作为…...

大模型开发实战篇7:语音识别-语音转文字

语音识别大模型&#xff0c;是人工智能领域的一项重要技术&#xff0c;它能够将人类的语音转换为文本。近年来&#xff0c;随着深度学习技术的不断发展&#xff0c;语音识别大模型取得了显著的进展&#xff0c;并在各个领域得到了广泛应用。 主流语音识别大模型 目前&#xf…...

基于JAVA开发APISIX插件实战(1)-开发、部署、调试

我这篇APISIX-JAVA插件实战开编讲述初级工程师才会关心的开发部署调试,主要是因为APISIX-JAVA插件从前文基于JAVA开发APISIX插件-CSDN博客中我们可以了解到,它是通过unix的sock进行RPC的通信的,因此无法生成sock的windows环境是无法进行开发的。 如果使用Mac那么会怎么样?…...

QML 部件获得焦点触发的全局槽函数 onActiveFocusItemChanged

在qml的window窗口中&#xff0c;假如添加里许多其他部件&#xff0c;当这些部件改变时&#xff0c;会有一个全局部件焦点改变槽函数触发&#xff0c;就是 onActiveFocusItemChanged 可以通过此槽函数就可以知道当前焦点在哪一个部件上&#xff0c;也可以做一些自动化测试等&…...

DeepSeek 部署中的常见问题及解决方案:Mac 场景实践指南

DeepSeek 部署中的常见问题及解决方案&#xff1a;Mac 场景实践指南 随着大模型技术的快速发展&#xff0c;DeepSeek 作为开源领域的优秀代表&#xff0c;在本地化部署过程中常会遇到各类技术挑战。本文基于实际部署经验&#xff0c;梳理了五大高频问题及对应解决方案&#xf…...

OlympicArena 论文简介

近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;和大型多模态模型&#xff08;LMMs&#xff09;的飞速发展&#xff0c;让AI逐渐展现出接近人类水平的认知推理能力。然而&#xff0c;如何科学评估AI在复杂问题解决中的真实水平&#xff0c;一直是学术界和产业界的…...

你具备数据素养吗?

在这个外卖平台能预测你明天想点什么的时代&#xff0c;当超市货架摆放都经过算法优化时&#xff0c;我们发现&#xff1a;数据素养已不再是专业人员的专利&#xff0c;而是数字公民的基本生存技能。一位小学班主任通过分析学生错题数据优化教学策略&#xff0c;社区便利店老板…...

如何用ClassFinal加密JAR保护知识产权!

0.前言 凌晨三点的办公室&#xff0c;咖啡杯底凝着褐色的残渍&#xff0c;键盘上跳跃的手指突然停滞。张工程师盯着屏幕上的反编译窗口&#xff0c;自己耗时三个月开发的规则引擎此刻像被解剖的标本般赤裸裸摊开——这正是上周交付给客户的jar包。当.class文件以伪代码形式暴露…...

轨迹优化 | 基于LBFGS优化器的无约束路径平滑(附ROS C++仿真)

目录 0 专栏介绍1 LBFGS优化器1.1 拟牛顿法框架1.2 LBFGS-Lite库 2 基于LBFGS的轨迹优化3 ROS C仿真 0 专栏介绍 &#x1f525;课设、毕设、创新竞赛必备&#xff01;&#x1f525;本专栏涉及更高阶的运动规划算法轨迹优化实战&#xff0c;包括&#xff1a;曲线生成、碰撞检测…...

Vue2到Vue3:无痛升级之路

为什么要从 Vue2 升级到 Vue3 Vue 3 带来了众多令人瞩目的改进和新特性&#xff0c;这些优势使得升级到 Vue 3 对项目的长期发展具有重要意义。 性能显著提升&#xff1a;Vue 3 采用了基于 Proxy 的响应式系统&#xff0c;相比 Vue 2 使用的 Object.defineProperty&#xff0c…...

第28篇 基于ARM A9处理器用C语言实现中断<四>

Q&#xff1a;可以改变上一期实验工程里红色LED计数的速率吗&#xff1f; A&#xff1a;在按键中断服务程序中使HPS Timer 0停止计数&#xff0c;修改定时器中使用的预设计数值&#xff0c;然后重启定时器&#xff1b;所有的修改都是在按键中断服务程序中完成。主程序和其他…...

Linux、Docker与Redis核心知识点与常用命令速查手册

Linux、Docker与Redis核心知识点与常用命令速查手册 一、Linux基础核心 1. 核心概念 文件系统&#xff1a;采用树形结构&#xff0c;根目录为/权限机制&#xff1a;rwx&#xff08;读/写/执行&#xff09;权限&#xff0c;用户分为owner/group/others软件包管理&#xff1a; …...

时间序列分析(四)——差分运算、延迟算子、AR(p)模型

此前篇章&#xff1a; 时间序列分析&#xff08;一&#xff09;——基础概念篇 时间序列分析&#xff08;二&#xff09;——平稳性检验 时间序列分析&#xff08;三&#xff09;——白噪声检验 一、差分运算 差分运算的定义&#xff1a;差分运算是一种将非平稳时间序列转换…...

《深度学习》——调整学习率和保存使用最优模型

调整学习率 在使用 PyTorch 进行深度学习训练时&#xff0c;调整学习率是一个重要的技巧&#xff0c;合适的学习率调整策略可以帮助模型更好地收敛。 PyTorch 提供了多种调整学习率的方法&#xff0c;下面将详细介绍几种常见的学习率调整策略及实例代码&#xff1a; torch.opt…...

零风险把数据盘挂载给根分区,给生产环境服务器扩容

背景 刚买服务器时&#xff0c;用户量不大&#xff0c;所以结合预算不多情况下&#xff0c;都是默认买个小点的系统盘挂载到服务器上&#xff0c;&#xff08;或者默认服务器的40G&#xff09;&#xff0c;等到某一天业务量上来之后&#xff0c;发现抓肘见襟给自己一手措不及防…...

刷题日记4

2025.1.21 2904. 最短且字典序最小的美丽子字符串 2904. 最短且字典序最小的美丽子字符串 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:string shortestBeautifulSubstring(string s, int k) {//遍历找到美丽子字符串&#xff0c;更新时候如果<res&…...

在vscode中拉取gitee里的项目并运行

拉取项目: 方法一:vscode点击查看--->终端(或者直接通过快捷键ctrol+ `打开) 在终端内通过cd命令定位到你想存放项目的文件夹 例如:cd h: 通过命令:git clone 地址 例如:git clone newbee-mall-vue-app: 前端代码 等待拉取完成即可在对应文件夹下看到项目啦 方…...

IDEA通过Contince接入Deepseek

Deepseek 的出色表现&#xff0c;上期【Deepseek得两种访问方式与本地部署】 安装Continue插件 第一步、下载插件 在编辑栏【File】->设置【Settiings】或快捷键【CtrlAltS】,弹窗的左侧导航树&#xff0c;选择【plugins】,在marketplace 搜索【Continue】&#xff0c;点…...

Ubuntu如何利用.ibd文件恢复MySQL数据?

## 背景&#xff1a;服务器中&#xff0c;MySQL程序坏了&#xff0c;也没有做定时备份的操作。为了是数据库恢复到最新的。 ## 方法&#xff1a;可以使用MySQL的 .ibd 文件恢复。&#xff08;需要原数据库的表结构&#xff09; ## 文件位置&#xff1a;在Ubuntu系统中&#x…...

github上文件过大无法推送问题

GitHub 对文件大小有限制&#xff0c;超过 100 MB 的文件无法直接推送到仓库中。 解决思路&#xff1a; 使用 Git Large File Storage (Git LFS) 来管理大文件不上传对应的大文件 使用Git LFS&#xff1a; 1. 安装 Git LFS 首先&#xff0c;你需要安装 Git LFS。可以按照以…...

数据结构------单向链表。

一.实现单向链表的头插&#xff0c;头删&#xff0c;尾插&#xff0c;尾删&#xff0c;按位置插&#xff0c;按位置删&#xff0c;按位置修改&#xff0c;按元素查找&#xff0c;按元素修改&#xff0c;按元素删除&#xff0c;单链表的逆置&#xff0c;查找倒数第几个元素&…...

(.text+0x1b): undefined reference to `main‘

使用vscode Linux g编译出现 /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o: in function _start: (.text0x1b): undefined reference to main collect2: error: ld returned 1 exit status make: *** [makefile:3: put] Error 1一定记得…...

各类系统Pycharm安装教程

各类系统Pycharm安装教程 一、安装前的准备 1. 系统要求 操作系统: Windows:Windows 10 或更高版本(64位)。macOS:macOS 10.14 或更高版本。Linux:Ubuntu 18.04+、Fedora 30+ 等主流发行版。硬件要求: 内存:至少 4GB(推荐 8GB 以上)。磁盘空间:至少 2.5GB 可用空间…...

算法——结合实例了解Minimax算法(极小化极大算法)

计算机科学中最有趣的事情之一就是编写一个人机博弈的程序。有大量的例子&#xff0c;最出名的是编写一个国际象棋的博弈机器。但不管是什么游戏&#xff0c;程序趋向于遵循一个被称为Minimax算法&#xff0c;伴随着各种各样的子算法在一块。本篇将简要介绍 minimax 算法&#…...

cornerstone3D学习笔记-MPR

最近在研究如何利用cornerstone3D (v1.70.13) 来实现MPR功能&#xff0c;找到它的一个demo -- volumeBasic, 运行效果如下图 看了下主程序的示例代码&#xff0c;非常简单&#xff0c;可以说corestone3D这个库把很多细节都封装起来了&#xff0c;使得调用者可以很简单的快速实…...

向量数据库是什么?「向量数据库详解」

目录 向量数据库详解 一、定义与核心概念 二、核心技术与组件 三、应用场景 四、与传统数据库的对比 五、典型技术框架 六、优缺点分析 七、AI领域的最新应用案例 八、总结 向量数据库详解 一、定义与核心概念 向量数据库是专门用于存储、检索和处理向量数据的数据库…...

C++ Primer 函数匹配

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...