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

MyBatis系列-入门篇

MyBatis入门

  • 一:故事背景
  • 二:MyBatis 简介
    • 2.1什么是MyBatis
    • 2.1 MyBatis有什么好处
  • 三:MyBatis 入门
    • 3.1使用SpringBoot集成MyBatis
      • 3.1.1 添加依赖
      • 3.1.2 配置数据源
      • 3.1.3 配置MyBatis
      • 3.1.4 创建Mapper接口和SQL映射文件
      • 3.1.5 注入Mapper接口
    • 3.2 普通maven项目集成
      • 3.2.1 添加依赖
      • 3.2.2 配置数据源
      • 3.2.3 配置 MyBatis
      • 3.2.4 创建 Mapper 接口和 SQL 映射文件
      • 3.2.5 注入 Mapper 接口
      • 3.3.6 具体使用
  • 四:总结&升华

一:故事背景

在项目里已经应用了很久的MyBatis,但是没有系统的总结过MyBatis的相关知识。于是在一个寻常的下午,我决定,出一个系列的MyBatis知识博客。该系列博客主要分为分为以下四部分,每部分文章数量将会根据知识点的数量进行不同划分。

  1. MyBatis入门
  2. MyBatis配置
  3. MyBatisXML映射器
  4. 动态SQL

本系列文章预计在三周内更新完成,有兴趣的朋友可以持续关注。

二:MyBatis 简介

2.1什么是MyBatis

  • MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2.1 MyBatis有什么好处

既然要学习这个框架,就一定要知道这个框架的好处,它能给我们带来什么!

  • 简化数据库编程:MyBatis 通过提供简单的 API 和 SQL 映射文件,可以大大简化数据库编程。
  • 提高数据库性能:MyBatis支持使用缓存和预编译语句等技术来提高数据库性能。
  • 可以灵活地使用 SQL:MyBatis 可以直接使用 SQL语句,因此可以更灵活地处理复杂的查询需求。
  • 易于集成:MyBatis 可以与 Spring、Spring Boot、Spring MVC等常见的 Java 框架集成,使得开发更加便捷。
  • 易于维护:MyBatis提供了完善的日志和错误处理机制,方便开发人员进行调试和维护。同时,MyBatis 的 SQL
    映射文件可以被独立出来,使得维护和修改更加方便。

三:MyBatis 入门

上文已经讲述了什么是MyBatis,并且讲述了MyBatis的优势,接下来就让我们分别以springBoot项目和普通maven项目为例,来一起配置我们的项目,用上这个框架吧。

3.1使用SpringBoot集成MyBatis

3.1.1 添加依赖

在 pom.xml 文件中添加 MyBatis 对应的依赖

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis-spring-boot-starter.version}</version>
</dependency>

3.1.2 配置数据源

在 application.properties 或 application.yml 文件中配置数据源相关的信息。

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

3.1.3 配置MyBatis

在 application.properties 或 application.yml 文件中添加 MyBatis 相关的配置项。

mybatis.mapper-locations=classpath:mapper/*.xml

这里配置的是对应的映射

3.1.4 创建Mapper接口和SQL映射文件

在 src/main/resources/mapper 目录下创建 Mapper 接口和 SQL 映射文件。例如:

public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User findById(Long id);
}

编写对应的XML文件,用来执行sql语句

<mapper namespace="com.example.mapper.UserMapper"><select id="findById" resultType="com.example.entity.User">SELECT * FROM user WHERE id = #{id}</select>
</mapper>

3.1.5 注入Mapper接口

在需要使用Mapper的地方进行注入即可使用

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User findById(Long id) {return userMapper.findById(id);}
}

3.2 普通maven项目集成

3.2.1 添加依赖

添加依赖
在 pom.xml 文件中添加 MyBatis 和 JDBC 驱动程序的依赖。这里以 MySQL 数据库为例:

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version>
</dependency>

3.2.2 配置数据源

在代码中配置数据源相关的信息,例如使用 DriverManager 类获取数据库连接。这里假设使用 MySQL 数据库。

String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "root";Connection connection = null;try {Class.forName(driver);connection = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {e.printStackTrace();
} catch (SQLException e) {e.printStackTrace();
}

3.2.3 配置 MyBatis

创建 MyBatis 的 SqlSessionFactory 对象,将其配置信息和数据源传递给它。

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

对应的 mybatis-config.xml 文件

<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><mapper resource="com/example/mapper/UserMapper.xml"/></mappers>
</configuration>

3.2.4 创建 Mapper 接口和 SQL 映射文件

在 src/main/resources/com/example/mapper 目录下创建 Mapper 接口和 SQL 映射文件。例如:

public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User findById(Long id);
}

SQL 映射文件

<mapper namespace="com.example.mapper.UserMapper"><select id="findById" resultType="com.example.entity.User">SELECT * FROM user WHERE id = #{id}</select>
</mapper>

3.2.5 注入 Mapper 接口

在需要使用 Mapper 接口的地方注入它。可以使用 MyBatis 提供的 MapperFactoryBean 类来创建 Mapper 接口的实例。

@Configuration
public class AppConfig {@Beanpublic DataSource dataSource() {// 配置数据源}@Beanpublic SqlSessionFactory sqlSessionFactory() throws Exception {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "development");return sqlSessionFactory;}@Beanpublic MapperFactoryBean<UserMapper> userMapper() throws Exception {MapperFactoryBean<UserMapper> factoryBean = new MapperFactoryBean<>(UserMapper.class);        factoryBean.setSqlSessionFactory(sqlSessionFactory());return factoryBean;}
}

3.3.6 具体使用

在使用 Mapper 接口的地方注入它并使用即可。例如:

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User findById(Long id) {return userMapper.findById(id);}
}

四:总结&升华

上文给出了如何使用普通的maven项目或者使用Springboot项目来进行MyBatis的使用。大家可以先按照上文所述,准备好对应的例子。以便之后的学习。

相关文章:

MyBatis系列-入门篇

MyBatis入门 一&#xff1a;故事背景二&#xff1a;MyBatis 简介2.1什么是MyBatis2.1 MyBatis有什么好处 三&#xff1a;MyBatis 入门3.1使用SpringBoot集成MyBatis3.1.1 添加依赖3.1.2 配置数据源3.1.3 配置MyBatis3.1.4 创建Mapper接口和SQL映射文件3.1.5 注入Mapper接口 3.2…...

科学防雷接地和雷电防护方案

说到防雷&#xff0c;可能不少人首先会想到避雷针&#xff0c;而“避雷针”这一概念&#xff0c;很容易让大家对防雷的概念造成误解。 误解1: 避雷针是用来“避雷”的。 其实&#xff0c;避雷针的学名叫“接闪器”&#xff0c;不是用来“避开雷击”的&#xff0c;而是用来“迎…...

SpringMVC-RESTful架构风格

目录 RESTful架构风格 1、RESTful概述 2、RESTful的六大原则 3、RESTful的实现 4、HiddenHttpMethodFilter RESTful风格的CRUD 1、环境搭建 2、功能需求 3、功能&#xff1a;访问首页 4、功能&#xff1a;查询所有数据 5、功能&#xff1a;删除一条数据 6、功能&…...

consistency-starter

使用说明 建议在B端使用,不推荐C端使用 功能 事务提交之后推送MQ a. 当一个程序中有多个MQ需要推送时,可以在事务内任意位置调用发送MQ方法,而不会因为程序报错而导致数据不一致问题.事务提交之后发起子线程执行异步任务程序中灵活指定时间执行子任务 a. 例如:业务要求执行A业…...

【Json】Spring Boot整合Json与Json数组

Spring Boot整合Json与Json数组 文章目录 Spring Boot整合Json与Json数组一&#xff0c;引入依赖二&#xff0c;常见Json数据格式-2.1 Json格式-2.2 数组格式-2.3 Json数组格式 三&#xff0c;在Java中如何使用-3.1 Json格式-3.2 数组格式-3.3 Json数组格式 四&#xff0c;Json…...

Adobe Photoshop 软件下载

Adobe Photoshop&#xff0c;简称“PS”&#xff0c;是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。 时至今日&#xff0c;Adobe Photoshop 已经成为当今世界上最流行、应用最广泛的图像处理软件。不但设计专业的学生要系统的学习这个…...

[ES6]解构与赋值

[ES6]解构与赋值 解构模型对象属性解构函数参数解构字符串的解构数组解构REST 运算符参与的解构--...数组解构属性解构 解构的赋值 解构赋值是对赋值运算符的扩展。 通过解构&#xff0c;可以更加简单的获取复杂对象的属性 解构模型 解构的源&#xff0c;解构赋值表达式的右…...

2023年3月 青少年软件编程(C语言) 等级考试试卷(五级)

1. 拼点游戏 C和S两位同学一起玩拼点游戏。有一堆白色卡牌和一堆蓝色卡牌&#xff0c;每张卡牌上写了一个整数点数。C随机抽取n张白色卡牌&#xff0c;S随机抽取n张蓝色卡牌&#xff0c;他们进行n回合拼点&#xff0c;每次两人各出一张卡牌&#xff0c;点数大者获得三颗巧克力&…...

Unity之ShaderGraph入门

前言 随着Unity版本的不断升级&#xff0c;URP&#xff08;可编程渲染管线&#xff09;也越来越普及了。不管是从效果还是性能&#xff0c;都是吊打老版的build-in-shader。所以无论如何我们都要开始 拥抱URP&#xff0c;升级Unity的时候到了。 引擎版本 我这里选择了Unity …...

Spring-学习修改尚硅谷最新教程笔记

二、Spring 1、Spring简介 1.1、Spring概述 官网地址&#xff1a;https://spring.io/ Spring 是最受欢迎的企业级 Java 应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Jav…...

CPU寄存器的分类与Intel 8086 的eax,ebx,ecx,edx

目录 一、CPU中的寄存器分类 1.用户可见寄存器 2.控制和状态寄存器 一、CPU中的寄存器分类 大致分为两类: 一类属于用户可见寄存器&#xff0c;对这类寄存器编程&#xff0c;以及通过优化使CPU因使用这类寄存器&#xff0c;而减少对主存的访问次数&#xff0c; 另一类属于控…...

如何快速上手Vue框架?

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 运行环境&#xff1a;Google浏览器 Vue框架版本&#xff1a;Vue.js v2.7.14 目录 一. 框架是什么&#xff1f;二. 怎么写一个Vue程序&#xff08;以IDEA举例&#xff09;&#xff1f;三. 什么是声明式渲染?3.1 声明式3.2 渲染…...

Android进阶宝典—App响应时间优化

响应时间&#xff0c;它是用来衡量系统运行效率的一个重要指标。评价一个应用的响应时间&#xff0c;可以从用户感知和系统性能这两个角度来考量。 响应时间的长短&#xff0c;可能影响用户对某个功能、某个应用、乃至某个系统的使用。毕竟如果有选择&#xff0c;没有哪个人会愿…...

100天涨薪4k,从功能测试到自动化测试,我整理的3000字超全学习指南

去年6月份&#xff0c;由于经济压力让我下定决心进阶自动化测试&#xff0c;已经24的我做了3年功能测试&#xff0c;坐标广州薪资定格在8k&#xff0c;可能是生活过的太安逸&#xff0c;觉得8000的工资也够了&#xff0c;但是生活总是多变的&#xff0c;女朋友的突然怀孕&#…...

Pytorch剪枝api测试和结果

Pytorch 官方给出的prune接口 下面是基于prune的接口进行剪枝的方法步骤 1、首先prune接口在 torch.nn.utils.prune中&#xff0c;目前支持的剪枝方法有&#xff1a; RandomUnstructuredL1UnstructuredRandomStructuredLnStructuredCustomFromMask ps&#xff1a;非结构性剪…...

微服务下网关聚合Swagger文档、starter统一配置Swagger

一、starter实现统一配置微服务文档 把Swagger配置中的公共部分抽取出来Swagger与SpringBoot整合中&#xff0c;可能会由于版本问题出现各种问题 1、制作starter 参考&#xff1a; 【SpringBoot】自定义启动器 Starter【保姆级教程】用starter实现Oauth2中资源服务的统一配置用…...

剑指 Offer第二版:机器人的运动范围、正则表达式匹配、表示数值的字符串

剑指 Offer第二版 13. 机器人的运动范围19. 正则表达式匹配20. 表示数值的字符串 13. 机器人的运动范围 题目&#xff1a;地上有一个m行n列的方格&#xff0c;从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动&#xff0c;它每次可以向左、右、上、下移…...

Delaunay三角网生成算法

目录 一、分而治之算法二、三角网生长算法三、逐点插入算法四、约束Delaunay三角网1、方法一1、原始点云2、构网结果 1、方法二1、原始点云2、普通Delaunay3、约束Delaunay Delaunay三角剖分分为直接三角剖分和间接三角剖分。间接三角剖分首先计算为Voronoi图,然后由Voronoi图产…...

hashcode是什么?有什么作用?

文章目录 &#xff08;1&#xff09;hashcode()方法的作用&#xff08;2&#xff09;equals和hashcode的关系&#xff08;3&#xff09;百度百科&#xff08;4&#xff09;小白解释 Java中Object有一个方法&#xff1a; public native int hashcode(); &#xff08;1&#xff0…...

【人体姿态估计】(一)原理介绍

【人体姿态估计】&#xff08;一&#xff09;原理介绍 一、背景 人体姿态估计本质上是一个关键点检测的项目&#xff1b; 关键点检测在生活中的应用十分广泛&#xff0c;包括人脸识别、手势识别&#xff0c;而人体姿态估计则是对身体的关键点进行检测&#xff1b; 本文将介…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

flow_controllers

关键点&#xff1a; 流控制器类型&#xff1a; 同步&#xff08;Sync&#xff09;&#xff1a;发布操作会阻塞&#xff0c;直到数据被确认发送。异步&#xff08;Async&#xff09;&#xff1a;发布操作非阻塞&#xff0c;数据发送由后台线程处理。纯同步&#xff08;PureSync…...