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.rhkb.cn/news/249404.html

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

相关文章

node.js(nest.js控制器)学习笔记

nest.js控制器&#xff1a; 控制器负责处理传入请求并向客户端返回响应。 为了创建基本控制器&#xff0c;我们使用类和装饰器。装饰器将类与所需的元数据相关联&#xff0c;并使 Nest 能够创建路由映射&#xff08;将请求绑定到相应的控制器&#xff09;。 1.获取get请求传参…

祖传代码里的神逻辑

昨天做权限限制的需求&#xff0c;给自己配置了两个新的分组&#xff0c;然后就发现登录不了项目了&#xff0c;sql报错ORA-01795: maximum number of expressions in a list is 1000&#xff0c;一路debugger找到了元凶&#xff0c;看逻辑是想把两个不同表里的分组去重然后合并…

【CMU-自主导航与规划】M-TARE planner 配置与运行

M-TARE docker M-TARE 源码 一、依赖 Docker, Docker Compose, NVIDIA Container Toolkit, Nvidia GPU Driver&#xff08;需要至少2个&#xff0c;带Nvidia GPU&#xff09; 1.1 Docker docker -v #查询版本1.2 Docker Compose docker compose version1.3 …

分布式搜索引擎_学习笔记_3

分布式搜索引擎03 0.学习目标 1.数据聚合 **聚合&#xff08;aggregations&#xff09;**可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f;这些手机的平均价格、最高价格、最低价格&#xff1f;这些手机每月的销售…

Here Document免交互和Expect

文章目录 Here Document免交互和Expect自动化交互一、Here Document—免交互1、Here Document 免交互概述2、语法格式3、免交互的用法3.1 cat命令3.2 tee命令3.3 wc命令3.4 read命令3.5 passwd命令 4、Here Document 变量设定 二、Expect自动化交互1、expect基本使用1.1 脚本解…

【Linux】Linux基本指令

目录 1.ls指令 2.cd指令 3.touch指令 4.mkdir指令 5.rmdir指令和rm指令 5.1rmdir指令 5.2rm指令 6.man指令 7.cp指令 8.mv指令 9.cat指令 10.more指令 && less指令 10.1more指令 10.2less指令 11.head指令 && tail指令 11.1head指令 11.2tai…

【数学】【记忆化搜索 】【动态规划】964. 表示数字的最少运算符

作者推荐 【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数 本文涉及知识点 动态规划汇总 数学 记忆化搜索 LeetCoce964表示数字的最少运算符 给定一个正整数 x&#xff0c;我们将会写出一个形如 x (op1) x (op2) x (op3) x … 的表达式&#xff0c;其中每…

自动保存知乎上点赞的内容至本地

背景&#xff1a;知乎上常有非常精彩的回答/文章&#xff0c;必须要点赞收藏&#xff0c;日后回想起该回答/文章时翻看自己的动态和收藏夹却怎么也找不到&#xff0c;即使之前保存了链接网络不好也打不开了&#xff08;。所以我一般碰到好的回答/文章都会想办法保存它的离线版本…

mac安装mysql的8.0设置面板启动不了

1、前言 记得之前安装mysql5.7的时候&#xff0c;是可以直接从设置里面的mysql面板启动的&#xff0c;但是到了mysql8.0之后就启动不了了&#xff0c;这个问题不知道是版本问题还是我换了m系列芯片的mysql导致的&#xff0c;之前很多次都启动不了&#xff0c;这次搞了下&#x…

2024年1月份实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

字觅网“正式上线登陆中国大陆,助力全球用户畅享正版字体服务

在中国上海,专注于提供正版字体授权服务的平台"字觅网"正式宣布在中国大陆上线,为全球用户提供更广泛、更便捷的正版字体选择。 "字觅网"以致力于推动正版字体服务为核心,通过深度合作,汇聚了众多国内知名字库,包括汉标字库、上首字库、汉呈字库、名家字库…

防火墙详解

一、基本定义 所谓“防火墙”是指一种将内部网和公众访问网&#xff08;如Internet&#xff09;分开的方法&#xff0c;它实际上是一种建立在现代通信网络技术和信息安全技术基础上的应用性安全技术&#xff0c;隔离技术。越来越多地应用于专用网络与公用网络的互联环境之中&a…

BGP同步规则

BGP同步规则&#xff1a;开启同步下&#xff0c;从IBGP收到一条路由不会传给任何EBGP邻居(实验效果IBGP邻居和EBGP邻居都不传)&#xff0c;除非从自身的IGP中也学到这条路由。目的是防止AS内部出现路由黑洞&#xff0c;向外部通告了一个本AS不可达的虚假的路由。 同步规则只影响…

win11设置mysql开机自启

目录 命令式 1、打开命令提示符或 PowerShell&#xff1a; 2、使用管理员权限运行命令行工具&#xff1a; 3、设置 MySQL 服务为开机自启动&#xff1a; 4、启动 MySQL 服务&#xff1a; 5、 验证设置是否生效&#xff1a; 操作视图式 1、右击任务栏 ---> 选择任务管…

安卓网格布局GridLayout

<?xml version"1.0" encoding"utf-8"?> <GridLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:la…

【C++】类和对象(1)

上节我们学习了C入门的一些语法知识&#xff0c;这篇博客来学习类和this指针。 目录 面向过程和面向对象的初步认识 类的引入 类的定义 类的访问限定符及封装 访问限定符 封装 类的作用域 类的实例化 类对象大小 this指针 this指针特性 面向过程和面向对象的初步认识…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之DatePicker组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之DatePicker组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、DatePicker组件 日期选择器组件&#xff0c;用于根据指定日期范围创建日期滑…

vue3开发,axios发送请求是携带params参数的避坑

vue3开发,axios发送请求是携带params参数的避坑&#xff01;今天一直报错&#xff0c;点击新增购物车&#xff0c;报错&#xff0c; 【Uncaught (in promise) TypeError: target must be an object】。查询了网上的资料说的都不对。都没有解决。最终还是被我整明白了。 网上网…

Oracle 集群】RAC知识图文详细教程(四)--缓存融合技术和主要后台进程

Cache Fusion 原理 前面已经介绍了 RAC 的后台进程&#xff0c;为了更深入的了解这些后台进程的工作原理&#xff0c;先了解一下 RAC 中多节点对共享数据文件访问的管理是如何进行的。要了解 RAC 工作原理的中心&#xff0c;需要知道 Cache Fusion 这个重要的概念&#xff0c;要…

cilium-agent的DaemonSet启动流程

文章目录 概述架构分析configmount-cgroupapply-sysctl-overwritesmount-bpf-fsclean-cilium-stateinstall-cni-binariescilium-agent 总结参考资料 概述 本文主要分析 cilium-agent 作为 DaemonSet 在每个节点的启动流程。 架构分析 下面按照 cilium-agent 从 init-contain…