MyBatis框架基础学习及入门案例(2)
目录
一、数据库建表(tb_user)以及添加数据。
(1)数据库与数据表说明。
(2)字段与数据说明。
二、创建模块(或工程)、导入对应所需依赖坐标。
三、编写MyBatis核心主配置文件。(解决JDBC中"硬编码"问题)
(1)resources目录下新建mybatis-config.xml文件。
(2)最外层标签。完善内层标签、。
(3)加载外部属性文件。(如:db.properties)
(4)结合创建的映射文件。最终MyBatis核心主配置文件的全部内容。
四、编写书写SQL语句的映射文件。(mapper包下的.XML文件)
(1)新建UserMapper.xml文件。
(2)最外层标签。属性namespace。
(3)内层常用标签。
(4)最终UserMapper配置文件的内容。
五、正式编码。
(1)定义对应(表tb_user)的POJO(实体)类。
(2)测试类中加载MyBatis核心主配置文件。(获取SqlSessionFactory对象)
(3)获取SqlSession对象、执行SQL语句。(selectList()方法)
(4)释放资源。
(5)测试类运行结果。
- 本篇博客的主要内容是完成一个简单的MyBatis入门案例。
一、数据库建表(tb_user)以及添加数据。
(1)数据库与数据表说明。
- 数据库:mybatis01、数据表:tb_user。
(2)字段与数据说明。
- 主键:uid。
- 其他字段:username、password、gender、addr。
- 添加几条测试数据即可。
二、创建模块(或工程)、导入对应所需依赖坐标。
- 可前往MyBatis官网学习入门。mybatis – MyBatis 3 | 入门
- 其他所需的依赖坐标。
<dependencies><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!--连接数据库——MySQL驱动--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><!--单元测试坐标--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency></dependencies>
三、编写MyBatis核心主配置文件。(解决JDBC中"硬编码"问题)
(1)resources目录下新建mybatis-config.xml文件。
- 注意:没有这2个快捷创建选项需要自己手动配置模板。(不像spring配置文件自动有)
- 我这里选择的是mybatis-config。(代表新建MyBatis核心主配置文件)(IDEA手动设置好的模板)
- 也可以直接手动创建.XML文件。然后去官网复制粘贴。
- MyBatis核心主配置文件的头声明如下。(与映射文件是不同的)
(2)最外层标签<configuration>。完善内层标签<environments>、<mappers>。
- 注意标签<environments>内<environment>标签内的所有内容就是一个模板。不需要记忆。复制粘贴后,稍加修改数据库连接信息即可。
- 所使用的模板中的“development”代表了MyBatis的默认与具体的运行环境是开发环境配置。
- 其次指定了事务管理的方式为 JDBC 事务管理器。
- 定义了数据源的类型为“POOLED”,即使用连接池来管理数据库连接。
(3)加载外部属性文件。(如:db.properties)
主要包含数据库连接的配置信息。(如注册驱动、用户名、密码、URL 等)
这样可以在MyBatis主配置文件中通过${}占位符引用这些属性值,便于维护和修改。
- value属性对应的值使用${}占位符引用。
(4)结合创建的映射文件。最终MyBatis核心主配置文件的全部内容。
- 注意<mapper>标签的resource属性是相对于类路径。所以直接写与主配置文件路径平级即可。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--MyBatis主配置文件的根标签--> <configuration><properties resource="db.properties"></properties><environments default="development"><!-- 可以配置多个environment --><!--这里指定了默认的运行环境为development,即开发环境--><environment id="development"><!-- 使用jdbc事务管理--><transactionManager type="JDBC"/><!--配置数据库连接信息--><dataSource type="POOLED"><property name="driver" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--所有映射文件的路径--><mappers><!--加载书写SQL的映射文件--><mapper resource="UserMapper.xml"></mapper></mappers></configuration>
四、编写书写SQL语句的映射文件。(mapper包下的.XML文件)
(1)新建UserMapper.xml文件。
- 一般xxx的映射文件的命名方式为:“实体类名称+Mapper”组成。
- 注意我这里创建的方式与创建MyBatis主核心配置文件的方式一样。(IDEA手动设置好的模板)
- 选择mybatis-mapper。(前面提到,映射文件的头声明与MyBatis主核心配置文件不一致)
- 映射文件的头声明默认自动生成。
- 当然也可以手动去官网复制粘贴,再修改即可。
(2)最外层标签<mapper>。属性namespace。
- 单输入一个"<"就知道其最外层标签有几个、分别是啥。
namespace:命名空间。作用就是对sql进行分类管理。(比如有很多个xxxMapper.xml其中有相同的id。而命名空间就可以再以区分)
注意:使用mapper代理方法开发时。namespace需要特殊设置!!
(3)内层常用标签。
- <select>、<update>、<delete>、<insert>、<resultMap>。
- <resultMap>很重要,后面再学习。
- <select>、<update>、<delete>、<insert>就是对应的查询、更新、删除、插入。
- id就是唯一标识该查询的SQL语句。
- resultType就是查询返回的结果。这里查询所有用户当然是返回的数据包装成一个一个实体类(User)对象。所以这就需要有对应的实体类(User)。
(4)最终UserMapper配置文件的内容。
- 这里的namespace="test"。供测试使用。
- 后面的学习通常都是:namespace="接口的全限定名"。接口中就有对应的抽象方法。
<?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="test"><select id="selectAll" resultType="com.fs.pojo.User">select * from tb_user</select> </mapper>
五、正式编码。
(1)定义对应(表tb_user)的POJO(实体)类。
- 注意实体类的属性要与数据库字段一致。
- 这里使用Lombok帮助快速开发。(不需要手动提供构造器、setter、getter、toString等方法)。
- 导入Lombok对应依赖的坐标。
在对应User实体类上使用注解@Data使Lombok生效。
package com.fs.pojo;import lombok.Data;@Data public class User {private Integer uid ;private String username;private String password;private String gender;private String addr; }
(2)测试类中加载MyBatis核心主配置文件。(获取SqlSessionFactory对象)
(3)获取SqlSession对象、执行SQL语句。(selectList()方法)
- 查询单个或多条记录——>使用selectList()方法。返回的是一个集合。方法中传的参数为:namespace.id。(id为mapper映射文件中对应<select>标签唯一标识SQL的id)
- 查询单个记录——>使用selectOne()方法。
(4)释放资源。
(5)测试类运行结果。
相关文章:
MyBatis框架基础学习及入门案例(2)
目录 一、数据库建表(tb_user)以及添加数据。 (1)数据库与数据表说明。 (2)字段与数据说明。 二、创建模块(或工程)、导入对应所需依赖坐标。 三、编写MyBatis核心主配置文件。(解决JDBC中"硬编码"问题) (1&…...
python学opencv|读取图像(四十六)使用cv2.bitwise_or()函数实现图像按位或运算
【0】基础定义 按位与运算:全1取1,其余取0。按位或运算:全0取0,其余取1。 【1】引言 前序学习进程中,已经对图像按位与计算进行了详细探究,相关文章链接如下: python学opencv|读取图像&…...
蓝桥杯省一
四个月从c,cpp,算法一起学到省一(考研原因没参加国赛) 有疑问可以关注私信哦 帖子后续也会持续更新,分享算法竞赛(ccpc,天梯赛,蓝桥杯,浙大pta)相关知识...
【ProxyBroker】用Python打破网络限制的利器
ProxyBroker 1. 什么是ProxyBroker2. ProxyBroker的功能3. ProxyBroker的优势4. ProxyBroker的使用方法5. ProxyBroker的应用场景6.结语项目地址: 1. 什么是ProxyBroker ProxyBroker是一个开源工具,它可以异步地从多个来源找到公共代理,并同…...
C++ 新特性实现 ThreadPool
序言 在之前我们实现过线程池,但是非常基础。答题思路就是实现一个安全的队列,再通过 ThreadPool 来管理队列和线程,对外提供一个接口放入需要执行的函数,但是这个函数是无参无返回值的。 参数的问题我们可以使用 bind 来封装&a…...
【数据结构】_以SLTPushBack(尾插)为例理解单链表的二级指针传参
目录 1. 第一版代码 2. 第二版代码 3. 第三版代码 前文已介绍无头单向不循环链表的实现,详见下文: 【数据结构】_不带头非循环单向链表-CSDN博客 但对于部分方法如尾插、头插、任意位置前插入、任意位置前删除的相关实现,其形参均采用了…...
本地Harbor仓库搭建流程
Harbor仓库搭建流程 本文主要介绍如何搭建harbor仓库,推送本地镜像供其他机器拉取构建服务 harbor文档:Harbor 文档 | 配置 Harbor YML 文件 - Harbor 中文 github下载离线安装包 Releases goharbor/harbor 这是harbor的GitHub下载地址,…...
Android vendor.img中文件执行权问题
问题 Android 9、11往vendor.img增加文件,烧写到设备后发现增加的可执行文件没有执行权限。经过漫长查找,终于找到了问题的根源,谨以此篇献给哪些脚踏实地的人们。 根本原因 system/core/libcutils/fs_config.cpp文件,fs_confi…...
环境搭建--vscode
vscode官网下载合适版本 安装vscode插件 安装 MinGW 配置环境变量 把安装目录D:\mingw64 配置在用户的环境变量path里即可 选择用户环境变量path 点确定保存后开启cmd输入g,如提示no input files 则说明Mingw64 安装成功,如果提示g 不是内…...
30289_SC65XX功能机MMI开发笔记(ums9117)
建立窗口步骤: 引入图片资源 放入图片 然后跑make pprj new job8 可能会有bug,宏定义 还会有开关灯报错,看命令行注释掉 接着把ture改成false 然后命令行new一遍,编译一遍没报错后 把编译器的win文件删掉, 再跑一遍虚拟机命令行…...
IDEA工具下载、配置和Tomcat配置
1. IDEA工具下载、配置 1.1. IDEA工具下载 1.1.1. 下载方式一 官方地址下载 1.1.2. 下载方式二 官方地址下载:https://www.jetbrains.com/idea/ 1.1.3. 注册账户 官网地址:https://account.jetbrains.com/login 1.1.4. JetBrains官方账号注册…...
【10.2】队列-设计循环队列
一、题目 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普…...
多人-多agent协同可能会挑战维纳的反馈
在多人-多Agent协同系统中,维纳的经典反馈机制将面临新的挑战,而协同过程中的“算计”(策略性决策与协调)成为实现高效协作的核心。 1、非线性与动态性 维纳的反馈理论(尤其是在控制理论中)通常假设系统的动…...
JS 时间格式大全(含大量示例)
在 JS 中,处理时间和日期是常见的需求。无论是展示当前时间、格式化日期字符串,还是进行时间计算,JavaScript 都提供了丰富的 API 来满足这些需求。本文将详细介绍如何使用 JavaScript 生成各种时间格式,从基础到高级,…...
HarmonyOS简介:应用开发的机遇、挑战和趋势
问题 更多的智能设备并没有带来更好的全场景体验 连接步骤复杂数据难以互通生态无法共享能力难以协同 主要挑战 针对不同设备上的不同操作系统,重复开发,维护多套版本 多种语言栈,对人员技能要求高 多种开发框架,不同的编程…...
区间选点(贪心)
给定 NN 个闭区间 [ai,bi][ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数 NN,表示区间数。 接下来 NN 行,…...
深度学习|表示学习|卷积神经网络|输出维度公式|15
如是我闻: 在卷积和池化操作中,计算输出维度的公式是关键,它们分别可以帮助我们计算卷积操作和池化操作后的输出大小。下面分别总结公式,并结合解释它们的意义: 1. 卷积操作的输出维度公式 当我们对输入图像进行卷积时…...
Edge-TTS在广电系统中的语音合成技术的创新应用
Edge-TTS在广电系统中的语音合成技术的创新应用 作者:本人是一名县级融媒体中心的工程师,多年来一直坚持学习、提升自己。喜欢Python编程、人工智能、网络安全等多领域的技术。 摘要 随着人工智能技术的快速发展,文字转语音(Te…...
2025课题推荐——USBL与DVL数据融合的实时定位系统
准确的定位技术是现代海洋探测、海洋工程和水下机器人操作的基础。超短基线(USBL)和多普勒速度计(DVL)是常用的水下定位技术,但单一技术难以应对复杂环境。因此,USBL与DVL的数据融合以构建实时定位系统&…...
RK3588平台开发系列讲解(ARM篇)ARM64底层中断处理
文章目录 一、异常级别二、异常分类2.1、同步异常2.2、异步异常三、中断向量表沉淀、分享、成长,让自己和他人都能有所收获!😄 一、异常级别 ARM64处理器确实定义了4个异常级别(Exception Levels, EL),分别是EL0到EL3。这些级别用于管理处理器的特权级别和权限,级别越高…...
MyBatis最佳实践:提升数据库交互效率的秘密武器
第一章:框架的概述: MyBatis 框架的概述: MyBatis 是一个优秀的基于 Java 的持久框架,内部对 JDBC 做了封装,使开发者只需要关注 SQL 语句,而不关注 JDBC 的代码,使开发变得更加的简单MyBatis 通…...
Three.js实战项目02:vue3+three.js实现汽车展厅项目
文章目录 实战项目02项目预览项目创建初始化项目模型加载与展厅灯光加载汽车模型设置灯光材质设置完整项目下载实战项目02 项目预览 完整项目效果: 项目创建 创建项目: pnpm create vue安装包: pnpm add three@0.153.0 pnpm add gsap初始化项目 修改App.js代码&#x…...
CPP-存储区域
CPP支持手动开辟和释放内存,所以对于内存的理解非常重要! 在C中,内存存储通常可以大致分为几个区域,这些区域根据存储的数据类型、生命周期和作用域来划分。这些区域主要包括: 代码区(Code Segment/Text S…...
1月27(信息差)
🌍喜大普奔,适用于 VS Code 的 GitHub Copilot 全新免费版本正式推出,GitHub 全球开发者突破1.5亿 🎄Kimi深夜炸场:满血版多模态o1级推理模型!OpenAI外全球首次!Jim Fan:同天两款国…...
开发环境搭建-3:配置 nodejs 开发环境 (fnm+ node + pnpm)
在 WSL 环境中配置:WSL2 (2.3.26.0) Oracle Linux 8.7 官方镜像 node 官网:https://nodejs.org/zh-cn/download 点击【下载】,选择想要的 node 版本、操作系统、node 版本管理器、npm包管理器 根据下面代码提示依次执行对应代码即可 基本概…...
深入理解Pytest中的Setup和Teardown
关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 对于简单程序而言,使用 Pytest 运行测试直截了当。然而,当你…...
一个局域网通过NAT访问另一个地址重叠的局域网(IP方式访问)
正文共:1335 字 7 图,预估阅读时间:4 分钟 现在,我们已经可以通过调整两台设备的组合配置(地址重叠时,用户如何通过NAT访问对端IP网络?)或仅调整一台设备的配置(仅操作一…...
MongoDB中常用的几种高可用技术方案及优缺点
MongoDB 的高可用性方案主要依赖于其内置的 副本集 (Replica Set) 和 Sharding 机制。下面是一些常见的高可用性技术方案: 1. 副本集 (Replica Set) 副本集是 MongoDB 提供的主要高可用性解决方案,确保数据在多个节点之间的冗余存储和自动故障恢复。副…...
DeepSeek学术题目选择效果怎么样?
论文选题 一篇出色的论文背后,必定有一个“智慧的选题”在撑腰。选题足够好文章就能顺利登上高水平期刊;选题不行再精彩的写作也只能“当花瓶”。然而许多宝子们常常忽视这个环节,把大量时间花在写作上,选题时却像抓阄一样随便挑一…...
Lesson 119 A true story
Lesson 119 A true story 词汇 story n. 故事,传记,小说,楼层storey 搭配:tell a story 讲故事,说谎 true story 真实的故事 the second floor 二楼 例句:我猜他正在说谎。 I guess he…...
















