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

MyBatis概述环境搭建(一)

🚗MyBatis学习·起始站~
🚩本文已收录至专栏:数据库学习之旅
👍希望您能有所收获

一.什么是MyBatis

(1) 引言

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

上述是官网对其的定义,详细可见:MyBatis中文网

**什么是持久层?框架又是啥?对比使用JDBC又有什么优势呢?**接下来让我们一个个来看看吧~

(2) 持久层

在构建复杂的应用程序时,三层架构是我们常用到的一种软件设计架构,它将一个应用程序分为三个主要的层次:表现层、业务逻辑层、数据访问(持久)层。使得应用程序可以分解为独立的、可重用的部分,从而提高开发效率和代码的可维护性以及实现不同层之间的松耦合。
在这里插入图片描述

通常情况下,持久层负责与数据存储和持久化相关的操作。它提供了一种将应用程序中的对象映射到数据存储技术(如关系型数据库)的机制,并提供了各种数据访问接口,例如CRUD(创建、读取、更新和删除)操作等,通过使用持久层,应用程序可以更方便地操作和管理数据,而不必关心具体的存储细节。

(3) 框架

  • 框架就是一个半成品软件,在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。

  • 当我们写软件时,通常需要实现一些通用的功能,比如说处理HTTP请求、连接数据库、用户身份认证等等。这些通用的功能,每次写一个新软件都要重复编写,浪费时间和精力。框架就是为了解决这个问题而生的,它提供了一套通用的代码基础,包含了这些通用的功能,开发人员可以在这个基础上进行开发,不用重复写这些通用的功能,提高开发效率。

  • 通过一个框架只能完成同一项工作,例如我们使用MyBatis只能完成持久层方面开发技术。
    在这里插入图片描述

我们可以使用石膏雕像(半成品软件)快速绘画出一个漂亮的小女孩(简化开发),却不能将其绘制成一个小男孩(只能完成同一项工作)。

(4) 简化JDBC开发

  • JDBC 缺点:

    • 硬编码:连接数据库以及SQL为字符串,当发生变动再修改时过程十分繁琐且容易遗漏。
    • 操作繁琐:设置参数以及对结果集处理过程比较繁琐。
      在这里插入图片描述
  • MyBatis 简化:

    • 配置文件:通过配置文件统一管理连接以及SQL代码。
    • 自动完成:自动封装执行结果集。
      在这里插入图片描述

MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。当然MyBatis并不是唯一的持久层框架,还有许多的其他框架,但它却是国内最受欢迎的持久层框架之一。

二.MyBatis快速入门

入门_MyBatis中文网官方网站也详细介绍了如何搭建MyBatis环境,接下来让我们一起在Idea的Maven工程中通过一个简单的查询案例实践一下~

(1) 在数据库创建表

首先我们要在数据库中创建一张用于入门案例的数据表。

create database mybatis;
use mybatis;drop table if exists tb_user;create table tb_user(id int primary key auto_increment,username varchar(20),password varchar(20),gender char(1),addr varchar(30)
);INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');

(2) 创建Maven工程

为了避免手动导入jar包的麻烦,我们可以创建一个Maven工程
在这里插入图片描述

(3) 导入依赖

  1. 按官方文档所述,我们要想在Maven工程中使用MyBatis必须在pom文件中导入如下坐标:
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>x.x.x</version>
</dependency>

注意:x.x.x需要改为自己想使用的版本,例如3.5.5

  1. 此外,因为我们要连接MySQL数据库,因此还要导入MySQL连接驱动。
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version>
</dependency>

注意:8.0.28可根据需要改为自己想使用的版本

  1. 有上述这些就已经能使用了,但如果你想查看运行日志信息,则还需要导入如下坐标
<!-- 添加slf4j日志api -->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.20</version>
</dependency>
<!-- 添加logback-classic依赖 -->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version>
</dependency>
<!-- 添加logback-core依赖 -->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.2.3</version>
</dependency>	

要使用日志功能,除了导入上述三个坐标以外,还需要在Resource目录下创建包含以下内容的logback.xml配置文件:
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!--CONSOLE :表示当前的日志信息是可以输出到控制台的。--><appender name="Console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern></encoder></appender><logger name="com.itheima" level="DEBUG" additivity="false"><appender-ref ref="Console"/></logger><!--level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 默认debug<root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。--><root level="DEBUG"><appender-ref ref="Console"/></root>
</configuration>

(4) 编写核心配置文件

MyBatis 核心配置文件的作用之一便是解决我们上述提到的硬编码问题中的连接信息。

根据官方文档从 XML 中构建 SqlSessionFactory所给的方案,我们需要在Resource目录下创建包含以下内容的mybatis-config.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><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--数据库连接信息--><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost/mybatis?useSSL=false"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><!--加载SQL映射文件--><mapper resource="org/mybatis/example/BlogMapper.xml"/></mappers>
</configuration>

(5) 编写 SQL 映射文件

SQL 映射文件的作用便是帮助我们统一管理sql语句,在代码中解决硬编码问题。

根据官方文档从所述,我们同样需要在Resource目录下创建包含以下内容的UserMapper.xml配置文件,为了规范命名一般为表名+Mapper.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"><mapper namespace="test"><select id="selectAll" resultType="guanzhi.pojo.User">select * from tb_user</select><insert id="xx">插入语句</insert><delete id="xx">删除语句</delete><update id="xx">更新语句</update>
</mapper>
  • 我们需要先写一个名为mapper的根标签,然后再进行一系列CRUD操作
  • namespace:名称空间,区分不同mapper的的代码
  • id: SQL语句的唯一标识,不能重复
  • resultType: 返回结果类型,例如:guanzhi.pojo.User,我们需要创建一个User类
    在这里插入图片描述
public class User {// 表字段private Integer id;private String username;private String password;private String gender;private String addr;// 为节省篇幅,需自己写一下get与set方法
}

如上即可简单完成SQL 映射文件 配置,至此我们还需要将上述MyBatis核心配置文件中的mappers改为UserMapper.xml的类路径,

    <mappers><!--加载SQL映射文件--><!--因为我们的UserMapper.xml和mybatis-config.xml在相同目录下因此只需如下配置--><mapper resource="UserMapper.xml"/></mappers>

至此我们已经完成了MyBatis的基本配置,接下来让我们一起来使用一下吧。

(6) 使用

根据官方文档所述,我们要使用基于 MyBatis 的应用,必须先加载核心配置文件,获取 SqlSessionFactory 对象,然后再进行一系列操作

public class MyBatisDemo {public static void main(String[] args) {try {// 1. 加载mybatis的核心配置文件,获取SqlSessionFactoryString resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 2. 获取SqlSession对象,用于执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();// 3. 执行UserMapper中的sql语句,namespace.idList<User> userList = sqlSession.selectList("test.selectAll");System.out.println(userList);// 4.释放资源sqlSession.close();} catch (IOException e) {e.printStackTrace();}}
}

执行程序可以看到我们已经成功查询到了在数据库中的几条数据。
在这里插入图片描述

至此我们已经成功在idea中使用了MyBatis,可能许多同学会觉得过程太繁琐了,还不如不用,但是我们仔细查看可以发现,上述的很多配置几乎只需要进行一次配置即可,后续便无需进行。

三.Eclipse中搭建(补充)

在Eclipse同样可以使用MyBatis,操作步骤几乎与上述一致,只是相对没有idea那么好用而已。

  1. 例如我们创建一个动态web工程
    在这里插入图片描述

  2. 接下来就是一些几乎一致的操作,就不再赘述。

相关文章:

MyBatis概述环境搭建(一)

&#x1f697;MyBatis学习起始站~ &#x1f6a9;本文已收录至专栏&#xff1a;数据库学习之旅 &#x1f44d;希望您能有所收获 一.什么是MyBatis (1) 引言 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDB…...

3.8国际妇女节即将到来,跨境卖家如何做好选品和营销?

不知不觉&#xff0c;时间已来到了2月末&#xff0c;一年一度的三八国际妇女节也即将来临。三八节又称女神节&#xff0c;这不仅是庆祝女性伟大贡献的日子&#xff0c;也是跨境卖家们促销的大好时机。 有数据显示&#xff0c;女性是跨境消费的主力人群&#xff0c;占比超七成&…...

Glue Connector 和 Connection 的关系与区别

AWS Glue作为一种无服务器产品&#xff0c;其运行环境是“不可预知”的&#xff0c;也就是“一个黑盒”&#xff0c;所以如何能连接一些自有数据源是Glue必须考虑并给予满足的&#xff0c;为此&#xff0c;Glue给出的解决方案就是Connector和Connection&#xff0c;一个connect…...

如何使用ngxin的 upstream

1.引言&#xff1a; 1.1反向代理&#xff1a; 反向代理是充当Web服务器网关的代理服务器。当您将请求发送到使用反向代理的Web服务器时&#xff0c;他们将先转到反向代理&#xff0c;由该代理将确定是将其路由到Web服务器还是将其阻止。 这意味着有了反向代理&#xff0c;您…...

Java数组,超详细整理,适合新手入门

目录 一、什么是Java中的数组&#xff1f; 二、数组有哪些常见的操作&#xff1f; 三、数组的五种赋值方法和使用方法 声明数组 声明数组并且分配空间 声明数组同时赋值(1) 声明数组同时赋值(2) 从控制台输入向数组赋值 四、求总和平均 五、求数组中最大值最小值 六…...

1.3数据传输控制方式:IO数据传输控制方式、程序控制(查询)方式、程序中断方式、DMA方式、通道方式、I/O处理机

1.3数据传输控制方式&#xff1a;IO数据传输控制方式、程序控制&#xff08;查询&#xff09;方式、程序中断方式、DMA方式、通道方式、I/O处理机程序控制&#xff08;查询&#xff09;方式程序中断方式DMA方式通道方式、I/O处理机I/O数据传输方式&#xff0c;由软件到硬件发展…...

Linux 设置语言

文章目录1. 临时设置环境变量2. 默认语言设置3. 语言包4. 安装浏览器 chromium1. 临时设置环境变量 通过设置环境变量&#xff0c;可以使单个命令使用另一种语言LANG $ LANGfr_FR.utf8 date mar. mai 24 12:16:51 CDT 2022后续命令将恢复为使用系统的默认语言进行输出。该loc…...

Python基础-数据类型之集合

一、集合的定义 集合&#xff1a;是一个无序的没有重复元素的序列&#xff0c;因此不能通过索引来进行操作 1&#xff1a;使用set()创建集合 set(object) # 参数为一个序列&#xff0c;整型不能作为参数 set_a set("abcb") print(set_a) # {b, a, c} 2&…...

[Css]Grid属性简单陈列(适合开发时有基础的快速过一眼)

[css进阶]Grid属性简介 文章目录[css进阶]Grid属性简介典型需求网格容器的属性displaygrid-template-columns和grid-template-rowsgrid-template-areasgrid-templategrid-column-gap grid-row-gapgrid-gapjustify-itemsalign-itemsjustify-contentalign-contentgrid-auto-colum…...

100种思维模型之启发式偏差思维模型-017

曾国藩在给儿子的一封家书中曾写道&#xff1a;余于凡事皆用困知勉行工夫&#xff0c;尔不可求名太骤&#xff0c;求效太捷也。熬过此关&#xff0c;便可少进。再进再困&#xff0c;再熬再奋&#xff0c;自有亨通精进之日。 不急躁不求捷径&#xff0c;小火慢炖&#xff0c;将事…...

微服务 feign远程调用时 显示服务不可用 timed-out and no fallback

目录 第一种: failed and no fallback available 1 服务挂掉了 2 服务没有开启 3 注册中心没注册进去 -> ps: 直接调用的接口 通过网关转发失败 会报503 4 高并发下的服务熔断了 第二种: timed-out and no fallback 2.1 业务场景: A服务一切正常 但是B服务显示timeo…...

第一个Java程序(初识Java)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 文章目录1.Java概述1.1什么是Java1.2Java之父2.0第一个Java程序编译运行.class3.0程序如何跑起来的&#xff1f;3.1J…...

vulnhub LordOfTheRoot_1.0.1

总结&#xff1a;端口敲门&#xff0c;CVE-2015-8660提权&#xff0c; 目录 下载地址 漏洞分析 信息收集 端口敲门 网站分析 方法一 ssh登录提权 方法二 下载地址 LordOfTheRoot_1.0.1.ova (Size: 1.6 GB)Download: http://www.mediafire.com/download/m5tbx0dua05szjm…...

MutationObserver与IntersectionObserver

MutationObserver 出现原因&#xff1a;当我们需要监听元素发生变化时&#xff0c;不借助使元素发生变化的业务动作的情况下&#xff0c;使用无污染方式监听非常困难&#xff0c;为了解决这个问题&#xff0c;MutationObserver诞生&#xff01; 概述 可以用来监听DOM的任何变化…...

【ESP 保姆级教程】玩转巴法云篇② ——MQTT设备云,MQTT协议下的数据通信

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-21 ❤️❤️ 本篇更新记录 2023-02-21 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

植物大战 仿函数——C++

容器适配器 容器适配器不支持迭代器。栈这个东西&#xff0c;让你随便去遍历&#xff0c;是不好的。他是遵循后进先出的。所以他提供了一个街头top取得栈顶数据。 仿函数 仿函数&#xff08;functor&#xff09;是C中一种重载了函数调用运算符&#xff08;operator()&#x…...

【C语言】浮点型数据在内存中的存储

&#x1f680;&#x1f680;&#x1f680; 如果文章对你有帮助不要忘记点赞关注收藏哦&#x1f680;&#x1f680;&#x1f680; 文章目录⭐浮点数在内存中的存储1.1 &#x1f913;举个例子:1.2浮点数存储规则&#x1f308;&#xff1a;对于M与E有一些特别规定1.3解释前面题目&…...

impala中的刷新元数据和刷新表

impala是Cloudera公司主导开发的新型查询系统&#xff0c;它提供SQL语义&#xff0c;能查询存储在Hadoop的HDFS和HBase中的PB级大数据。 虽然Hive系统也提供了SQL语义&#xff0c;但由于Hive底层执行使用的是MapReduce引擎&#xff0c;仍然是一个批处理过程&#xff0c;难以满…...

Vscode创建vue项目的详细步骤

目录 一、概述 操作的前提 二、操作步骤 一、概述 后端人员想在IDEA里面创建一个Vue的项目&#xff0c;但是这非常麻烦&#xff0c;用vscode这个前端专用软件创建就会非常快速。 操作的前提 1.安装vscode软件的步骤&#xff1a;vscode下载和安装教程和配置中文插件&#…...

如何在面试中介绍自己的项目,才能让软件测试面试官无可挑剔,

四、项目 4.1 简单介绍下最近做过的项目 根据自己的项目整理完成&#xff0c;要点&#xff1a; 1&#xff09;项目背景、业务、需求、核心业务的流程 2&#xff09;项目架构&#xff0c;B/S还是C/5&#xff0c;数据库用的什么? 中间件用的什么&#xff1f;后台什么语言开发…...

虹科方案|从 uCPE 到成熟的边缘计算平台

基于开放硬件平台&#xff0c;通用客户端设备 (uCPE) 支持快速添加、集成或删除任意数量的集中管理虚拟功能。 为了增加收入并保持竞争优势&#xff0c;托管服务提供商 (MSP) 和企业正在部署 uCPE 以增强业务敏捷性、加速新服务的引入并提高运营效率。最初&#xff0c;uCPE被部…...

计算机是怎么读懂C语言的?

文章目录前言程序环境翻译环境翻译环境分类编译预处理预处理符号预定义符号#define#undef命令行定义条件编译文件包含头文件包含查找规则嵌套文件包含其他预处理指令编译阶段汇编链接&#x1f389;welcome&#x1f389; ✒️博主介绍&#xff1a;博主大一智能制造在读&#xff…...

hadoop入门介绍及各组件功能运行关系

文章目录Hadoop 组成部分1.HDFS2.MapReduce 架构概述3. yarn 架构概述4.HDFS、YARN、MapReduce三者关系Hadoop 组成部分 1.HDFS Hadoop Distributed File System&#xff0c;简称 HDFS&#xff0c;是一个分布式文件系统。 HDFS 架构概述 主要分为 NameNode (mn):存储文件的元…...

(HP)新手引导使用react-shepherd

1&#xff0c;官方参数文档&#xff1a;https://shepherdjs.dev/docs/tutorial-02-usage.html 2&#xff0c;基本代码 import { ShepherdTour } from react-shepherd; import ./index.less; // 自己的样式文件&#xff0c;用来修改样式 import ./shepherd.less; // 将shephe…...

数据结构:栈和队列(Leetcode20. 有效的括号+225. 用队列实现栈+232. 用栈实现队列)

目录 一.数据结构--栈 1.栈的基本介绍 2.栈的实现 二.数据结构--队列 1.队列的基本介绍 2.队列的实现 三.栈的运用(Leetcode20. 有效的括号225) 1.问题描述 2.问题分析 题解代码&#xff1a; 四.用两个队列实现栈(225. 用队列实现栈 - 力扣&#xff08;Leetcode&a…...

22.2.19周赛双周赛(贪心、记忆化搜索...)

文章目录双周赛98[6359. 替换一个数字后的最大差值](https://leetcode.cn/problems/maximum-difference-by-remapping-a-digit/)[6361. 修改两个元素的最小分数](https://leetcode.cn/problems/minimum-score-by-changing-two-elements/)贪心排序[6360. 最小无法得到的或值](ht…...

2023最新软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫###&#xff0c;今年26岁&#xff0c;来自江西九江&#xff0c;就读专业是电子商务&#xff0c;毕…...

【C++】类型转换方法

本篇博客让我们来见识一下C中新增的类型转换方法 文章目录1.C语言中类型转换2.C中的强制类型转换2.1 static_cast2.2 reinterpret_cast2.3 const_castvolatile关键字2.4 dynamic_cast3.C强制类型转换的作用4.RTTI1.C语言中类型转换 在C语言中&#xff0c;类型转换有下面两种形…...

100亿级订单怎么调度,来一个大厂的极品方案

背景 超时处理&#xff0c;是一个很有技术难度的问题。 所以很多的小伙伴&#xff0c;在写简历的时候&#xff0c;喜欢把这个技术难题写在简历里边&#xff0c; 体现自己高超的技术水平。 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;尼恩经常指导大家 优化简历。 最…...

C++性能白皮书

最近看完了《C性能白皮书》&#xff0c;这本书列出了一些性能优化的思路&#xff0c;不过只是一些指引&#xff0c;没有讲具体细节&#xff0c;我整理出了其中的关键点分享给大家&#xff1a; 硬件篇 作为一个程序员&#xff0c;想要性能优化&#xff0c;最好要了解些硬件&…...