MyBatis概述与MyBatis入门程序

MyBatis概述与MyBatis入门程序

  • 一、MyBatis概述
  • 二、入门程序
    • 1.准备开发环境
      • (1)准备数据库
      • (2)创建一个maven项目
    • 2.编写代码
      • (1)打包方式和引入依赖
      • (2)新建mybatis-config.xml配置⽂件
      • (3)新建XXXMapper.xml配置⽂件
      • (4)编写测试代码
      • (5)引入日志
      • (6)MyBatis第⼀个⽐较完整的代码写法
      • (7)MyBatis⼯具类SqlSessionUtil的封装
  • 三、MyBatis事务管理深度剖析
  • 四、总结


  • 框架其实就是对通⽤代码的封装,提前写好了⼀堆接⼝和类,我们可以在做项⽬的时候直接引⼊这些
    接⼝和类(引⼊框架),基于这些现有的接⼝和类进⾏开发,可以⼤⼤提⾼开发效率。

一、MyBatis概述

  • MyBatis本质上就是对JDBC的封装,通过MyBatis完成CRUD。
  • MyBatis在三层架构中负责持久层的,属于持久层框架。
  • MyBatis属于半⾃动化ORM框架,需要自己编写SQL语句。
  • Hibernate属于全⾃动化的ORM框架,不需要自己编写SQL语句。
  • ORM:对象关系映射
    • O(Object):Java虚拟机中的Java对象
    • R(Relational):关系型数据库
    • M(Mapping):将Java虚拟机中的Java对象映射到数据库表中⼀⾏记录,或是将数据库表中的⼀⾏记录映射成Java虚拟机中的⼀个Java对象。

二、入门程序

1.准备开发环境

(1)准备数据库

# schema.sql 文件
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article`
(`id`          int                                                           NOT NULL AUTO_INCREMENT COMMENT '主键',`user_id`     int                                                           NOT NULL COMMENT '作者 ID',`title`       varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文章标题',`summary`     varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '文章概要',`read_count`  int(11) UNSIGNED ZEROFILL                                     NOT NULL COMMENT '阅读读数',`create_time` datetime                                                      NOT NULL COMMENT '创建时间',`update_time` datetime                                                      NOT NULL COMMENT '最后修改时间',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDBAUTO_INCREMENT = 1CHARACTER SET = utf8mb4COLLATE = UTF8MB4_0900_AI_CIROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `article_detail`;
CREATE TABLE `article_detail`
(`id`         int                                                   NOT NULL AUTO_INCREMENT COMMENT '注解',`article_id` int                                                   NOT NULL COMMENT '文章 ID',`content`    text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文章内容',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDBAUTO_INCREMENT = 1CHARACTER SET = utf8mb4COLLATE = utf8mb4_0900_ai_ciROW_FORMAT = Dynamic;
# data.sql 文件
-- ----------------------------
-- Records of article
-- ----------------------------
INSERT INTO `article`
VALUES (1, 2021, 'MyBatis概述', 'MyBatis是半自动的ORM框架', 654897, '2024-01-26 03:11:12','2024-02-25 12:11:19');
INSERT INTO `article`
VALUES (2, 2324, 'Spring容器', 'IOC、AOP', 345, '2025-01-19 15:15:57', '2025-02-16 4:19:30');-- ----------------------------
-- Records of article_detail
-- ----------------------------
INSERT INTO `article_detail`
VALUES (1, 1, 'MyBatis是非常优秀的持久层框架');

(2)创建一个maven项目

  • 可以参考我的博客 ====> IDEA 构建开发环境中的构建一个普通的Maven模块

2.编写代码

(1)打包方式和引入依赖

  • Maven中央仓库可以寻找自己需要的依赖。
 <!--pom.xml文件-->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.gdb</groupId><artifactId>mybatis-code</artifactId><version>1.0-SNAPSHOT</version><!--打包方式--><packaging>jar</packaging><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--mybatis核⼼依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><!--mysql驱动依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency></dependencies>
</project>

(2)新建mybatis-config.xml配置⽂件

  • 在resources根⽬录下新建mybatis-config.xml配置⽂件(可以参考mybatis⼿册拷⻉)。

    <?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:3306/使用的数据库名"/><property name="username" value="root"/><property name="password" value="自己的数据库密码!"/></dataSource></environment></environments><mappers><!--sql映射⽂件创建好之后,需要将该⽂件路径配置到这⾥--><mapper resource=""/></mappers>
    </configuration>
    

(3)新建XXXMapper.xml配置⽂件

  • 在resources根⽬录下新建XXXMapper.xml配置⽂件(可以参考mybatis⼿册拷⻉)。
<?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="article"><insert id="insertArticle">insert into article values(null, 9874, 'JavaWeb', 'Filter', 645133, '2026-05-16 12:15:27', '2026-08-16 4:15:30');</insert>
</mapper>
  • 将CarMapper.xml⽂件路径配置到mybatis-config.xml 中
    <mappers><!--sql映射⽂件创建好之后,需要将该⽂件路径配置到这⾥--><mapper resource="articleMapper.xml"/></mappers>

(4)编写测试代码

public class TestMyBatis {public static void main(String[] args) throws Exception{//获取 SqlSessionBuilder 对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();//获取 SqlSessionFactory 对象,Resources.getResourceAsReader()默认从类的根路径下加载文件。//Resources是MyBatis提供的工具类,源码是 ClassLoder.getSystemClassLoader().getResourceAsStream("类路径下的文件路径");SqlSessionFactory sqlSessionFactory = builder.build(Resources.getResourceAsReader("mybatis-config.xml"));//获取 SqlSession 对象SqlSession sqlSession = sqlSessionFactory.openSession();//执行 SQL 语句int count = sqlSession.insert("insertArticle");System.out.println("插入的记录条数:====> " + count);//MyBatis默认关闭的自动提交机制的sqlSession.commit();//释放资源sqlSession.close();}
}

在这里插入图片描述

(5)引入日志

  • 关于mybatis集成日志组件。让我们调试起来更加的方便。
    • mybatis常见的集成的日志组件有那些呢?
      • SLF4J(沙拉风):沙拉风是一个日志标准,其中有一个框架叫做logback,它实现了沙拉风规范。
      • LOG4J
      • LOG4J2
      • STDOUT_LOGGING
      • 注意:log4j log4j2 logback 都是同一个作者开发的。
    • 中STDOUT_LOGGING是标准日志,mybatis已经实现了这种标准日志。mybatis框架本身已经实现了这种标准。只要开启即可。在mybatis-config.xml文件中使用settings标签进行配置开启。这个标签在编写的时候要注意,它应该出现在environments标签之前。注意顺序。
          <settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings>
      

在这里插入图片描述

(6)MyBatis第⼀个⽐较完整的代码写法

public class TestMyBatis {public static void main(String[] args) {SqlSession sqlSession = null;try {// 1.创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();// 2.创建SqlSessionFactory对象SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));// 3.创建SqlSession对象sqlSession = sqlSessionFactory.openSession();// 4.执⾏SQLint count = sqlSession.insert("insertArticle");System.out.println("插入了⼏条记录:" + count);// 5.提交sqlSession.commit();} catch (Exception e) {// 回滚if (sqlSession != null) {sqlSession.rollback();}e.printStackTrace();} finally {// 6.关闭if (sqlSession != null) {sqlSession.close();}}}
}

(7)MyBatis⼯具类SqlSessionUtil的封装

public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;/*** 类加载时初始化sqlSessionFactory对象*/static {try {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));} catch (Exception e) {e.printStackTrace();}}/*** 每调⽤⼀次openSession()可获取⼀个新的会话,该会话⽀持⾃动提交。*/public static SqlSession openSession() {return sqlSessionFactory.openSession(true);}
}
public class TestMyBatis {public static void main(String[] args) {SqlSession sqlSession = null;try {sqlSession = MybatisUtils.openSession();// 4.执⾏SQLint count = sqlSession.insert("insertArticle");System.out.println("插入了⼏条记录:" + count);// 5.提交sqlSession.commit();} catch (Exception e) {// 回滚if (sqlSession != null) {sqlSession.rollback();}e.printStackTrace();} finally {// 6.关闭if (sqlSession != null) {sqlSession.close();}}}
}

三、MyBatis事务管理深度剖析

  • 在MyBatis-config.xml文件中,可以通过以下的配置进行MyBatis的事务管理。
    <transactionManager type="JDBC"/>
    
  • type属性的值有两个(不区分大小写):
    • JDBC(jdbc):JDBC事务管理器。由MyBatis框架自己管理事务,自己采用原生的JDBC代码去管理事务。默认是开启事务的,需要自己手动的提交。可以通过以下的方式关闭事务:
      SqlSession sqlSession = sqlSessionFactory.openSession(true);  //关闭事务(自动提交)
      
    • MANAGED(manged) :MANFGED事务管理器。mybatis不再负责事务的管理了。事务交给其他容器来负责。例如:spring.
      • 对于我们当前单纯只有mybatis的情况下,如果设置为MANAGED那么事务这块就没人管了。没有人管理的事务压根就没有开启。

四、总结

  • Maven中央仓库
  • MyBatis中文手册
  • Resources 目录:放在整个目录当中的,一般都是资源文件,配置文件。直接放到Resources 目录下的资源,等同于放到类的根路径下。
  • 以后凡是遇到resource这个单词,大部分情况下,这种加载资源的方式就是从类的根路径下开始加载(开始查找)
  • MyBatis中的主要对象:
    • 在Mybatis当中,负责执行SQL语句的那个对象 ===> SqlSession
      • SqlSession是专门用来执行SQL语句的,是一个Java程序和数据库之间的一次会话。
    • 想要获取SqlSession对象,需要先获取SqlSessionFactory对象,通过SqlSessionFactory工厂来生产SqlSession对象。
    • 获取SqlSessionFactory对象,需要首先获取SqlSessionFactoryBuilder对象。通过SqlSessionFactoryBuilder对象的build方法,来获取一个SqlSessionFactory对象。
    SqlSessionFactoryBuilder --> SqlSessionFactory --> SqlSession
    
  • mybatis中的两个主要的配置文件:
    • 其中一个是:mybatis-config.xml,这是核心配置文件,主要配置连接数据库的信息等。(一个)
    • 另一个是:XxxxMapper.xml,这个是专门来编写SQL语句的配置文件。(一个表一个)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/653849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web前端开发工具总结

一、nvm&#xff0c;node&#xff0c;npm之间的区别 nodejs&#xff1a;在项目开发时的所需要的代码库。相当于JDK npm&#xff1a;nodejs 包管理工具&#xff0c;npm 可以管理 nodejs 的第三方插件。在安装的 nodejs 的时候&#xff0c;npm 也会跟着一起安装。相当于Maven。 …

使用JavaScript和XLSX.js将数据导出为Excel文件

目录 一、安装XLSX.js二、将数据转换为Excel文件 导出数据是Web应用程序中常见的功能之一。在许多情况下&#xff0c;我们需要将数据导出为Excel文件&#xff0c;以便用户可以在本地计算机上查看和编辑数据。在本篇博客中&#xff0c;我们将介绍如何使用JavaScript和XLSX.js将数…

Datawhale 组队学习Task8大模型的有害性(上/下)

第9章 大模型的有害性&#xff08;上&#xff09; 9.1 引言 在这次内容中&#xff0c;我们将开始探讨大型语言模型的有害性&#xff08;危害&#xff09;。 新兴技术的危害&#xff1a;大模型的能力导致模型被广泛的采用&#xff0c;但与此同时造成危害。 伦理很多&#xf…

Redis学习——高级篇③

Redis学习——高级篇③ Redis7高级之缓存双写一致性之更新策略探讨&#xff08;三&#xff09; 1.缓存双写一致性2.数据库和缓存一致性的几种更新策略2.1 可停机的情况2.2 不可停机的情况,四种更新策略&#xff08;推荐最后一种&#xff0c;看场景&#xff09;1.❌先…

Jtti:如何制作自己的docker镜像?

制作自己的Docker镜像通常涉及以下步骤&#xff1a; 1. 安装Docker&#xff1a; 确保你的系统上已经安装了Docker。你可以从Docker官方网站下载并安装Docker。 2. 编写Dockerfile&#xff1a; 创建一个名为 Dockerfile 的文本文件&#xff0c;该文件定义了构建Docker镜像的…

AI:人工智能关系概览—人工智能与数据挖掘/机器学习/深度学习/神经网络的概念定义与关系阐述、梳理之详细攻略(建议收藏)

AI:人工智能关系概览—人工智能与数据挖掘/机器学习/深度学习/神经网络的概念定义与关系阐述、梳理之详细攻略(建议收藏) 目录 相关文章01:《数据挖掘Vs机器学习Vs人工智能Vs深度学习》

Java8-Stream 流基本应用-groupBy进行分组

groupBy进行分组 Testpublic void testStreamGroupBy(){List<UserInfoModel> resultnew ArrayList<>();for (int i 0; i < 10; i) {UserInfoModel usernew UserInfoModel();user.setUserId(i"");user.setUserName("kangshihang");result.a…

【代码随想录-链表】移除链表元素

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

Kafka(九)跨集群数据镜像

目录 1 跨集群镜像的应用场景1.1 区域集群和中心集群1.2 高可用(HA)和灾备(DR)1.3 监管与合规1.4 云迁移1.5 聚合边缘集群的数据 2 多集群架构2.1 星型架构2.2 双活架构2.2 主备架构2.2.1 如何实现Kafka集群的故障转移2.2.1.1 故障转移包括的内容1. 灾难恢复计划2. 非计划内的故…

DELMIAWORKS核心优势深度探析

一&#xff1a;制造BOM从产品结构到制造场景 BOM是所有制造系统的核心&#xff0c;DELMIAWORKS作为专业的制造运营系统&#xff0c;在理解制造BOM方面的能力已经超越了传统系统的范畴。其与传统系统的最大区别在于DELMIAWORKS将焦点放在制造场景的描述上&#xff0c;而非产品结…

259:vue+openlayers: 显示海量多边形数据,10ms加载完成

第259个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers项目中通过WebGLVectorLayerRenderer方式加载海量多边形数据。这里相当于将海量的数据放在同一个层的source中,然后通过webglTile的方式渲染出这一层。 本示例数据为5000个多边形,加载速度超级快。 直接…

【力扣经典面试题】合并两个有序数组

题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并后数…

数据库性能问题分析优化

客户反应应用频繁卡住&#xff0c;只能通过重启应用才能恢复&#xff0c;一天发生若干次。 问题初步分析处理 从最近得到的三个awr报告看&#xff0c;等待事件基本在于“DB CPU”&#xff0c;“db file sequential read”&#xff0c;“log file sync”&#xff0c;“log fil…

leetcode 26.删除有序数组中的重复项(python版)

需求 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c; 返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#x…

浅谈扬州晶澳-年产3GW高性能太阳能光伏组件项目Acrel-3000WEB电能管理系统的设计及应用

摘要&#xff1a;在信息时代&#xff0c;电力信息系统的应用促迚了电力企业的収展&#xff0c;增强了电力系统运行的安全性与稳定性&#xff0c;对满足用户需求其有重要意义。随着国家电网改革政策的逐步推进和落实&#xff0c;Acrel-3000WEB电能管理系统运用互联网和大数据技术…

游戏开发丨基于Pygame的AI版贪吃蛇小游戏

文章目录 写在前面需求分析程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于pygame的AI版贪吃蛇小游戏 所需环境 pythonpycharm或anacondapygame 下载地址 https://download.csdn.net/download/m0_68111267/88789665 需求分析 本游戏使用Pygame模块开…

Spark入门01

1 Spark是什么 Spark是用于大规模数据处理的统一分析引擎。对任意类型的数据进行自定义计算。 可以计算&#xff1a;结构化、非结构化&#xff0c;半结构化的数据结构&#xff0c;支持使用Python&#xff0c;Java&#xff0c;Scala、Sql语言开发应用程序计算数据。 计算框架&a…

【Docker】Docker学习⑨ - 单机编排之Docker Compose

【Docker】Docker学习⑨ - 单机编排之Docker Compose 一、Docker简介二、Docker安装及基础命令介绍三、Docker镜像管理四、Docker镜像与制作五、Docker数据管理六、网络部分七、Docker仓库之单机Dokcer Registry八、Docker仓库之分布式Harbor九、单机编排之Docker Compose1 基础…

前端Vue select 下拉框详解以及监听事件

目录 简介 使用详解 演示示例 :key"option.value" :value"option.value" 区别 监听事件 简介 在 Vue 中&#xff0c;下拉框通常通过 <select> 元素与一系列的 <option> 元素来创建。Vue 的数据绑定和指令&#xff08;如 v-model 和 v-for…

ArcGIS雨涝风险模拟

所谓雨涝模拟分析&#xff0c; 就是模拟降雨量达到一定强度&#xff0c; 城市的哪些区域容易被淹没形成内涝。 雨涝模拟更重要的是提前预测&#xff0c; 可在预测结果的基础上进行实地勘察&#xff0c; 为项目规划、风险防控等工作提供指导作用。 雨涝模拟的原理和思想多种…