MyBatis官方文档学习笔记(一)

news2025/8/9 13:05:06

本笔记根据mybatis官方文档顺序学习,根据本笔记可快速掌握mybatis的使用。

1 快速开始

1.1 快速开始

1.1.1 安装

使用MyBatis之前必须要安装mybatis-x.x.x.jar驱动文件到类路径中,如果使用的是Maven工程,则只需要导入下面的依赖即可:

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>x.x.x</version>
</dependency>

1.1.2 从XML文件中构建SqlSessionFactory

每个MyBatis应用都需要围绕着SqlSessionFactory。一个SqlSessionFactory实例必须通过SqlSessionFactoryBuilder来创建。SqlSessionFactoryBuilder可以从XML配置文件中构建SqlSessionFactory实例,也可以从配置类中构建SqlSessionFactory实例。
从XML配置文件中构建SqlFactory实例非常简单。MyBatis包含一个工具类,叫做Resources,它包含许多方法,这些方法使从类路径和其他位置加载资源变得更简单。

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

这个XML配置文件包含了MyBatis的核心配置,我们可以将它称作为MyBatis核心配置文件,这个核心配置包括获得数据库连接实例的数据源DataSource),以及一个TransactionManager,用于确定事务的范围和控制方式。这里有一个简单的示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
	<environment id="development">
	<transactionManager type="JDBC"/>
	<dataSource type="POOLED">
	<property name="driver" value="${driver}"/>
	<property name="url" value="${url}"/>
	<property name="username" value="${username}"/>
	<property name="password" value="${password}"/>
	</dataSource>
	</environment>
</environments>
<mappers>
	<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>

虽然XML配置文件中还有许多内容,上面这个示例指出了配置文件中最重要的部分。请注意验证XML文档所需的XML头。environment元素的主体包含用于事务管理和连接池(Dtype标签)的环境配置。mappers元素包含一个映射器列表——包含SQL代码和映射定义的XML文件和/或带注释的Java接口类。(即对应的mapper映射文件)

1.1.3 从SqlSessionFactory获取SqlSession

已经有了SqlSessionFactory,可以获取实例SqlSession。SqlSession包含了对数据库执行SQL命令所需的所有方法。可以直接针对SqlSession实例执行映射的SQL语句。例如:

try (SqlSession session = sqlSessionFactory.openSession()) {
Account account = session.selectOne(
"com.xlb.mapper.AccountMapper.findById", 1);
}

虽然这种方法是有效的,并且对于MyBatis以前版本的用户来说很熟悉,但现在有了一种更清晰的方法。使用一个接口(例如BlogMapper.class)来正确地描述一个给定语句的参数和返回值,你现在可以执行更干净、更类型安全的代码,没有容易出错的字符串字面量和类型转换。例如:

try (SqlSession session = sqlSessionFactory.openSession()) {
AccountMapper mapper = session.getMapper(AccountMapper.class);
Account account= mapper.findById(1);
}

注意:上面这两种方法都可以获取到数据库中的数据,2.1.4的第一种方法通过findById来获取数据,其中第一个参数是需要调用的具体方法的字符串路径,第二个参数是给该方法传入的参数。通过这种方法可以直接获得实体数据。第二种方法是先通过session实例获得一个实体类的映射接口,然后通过这个接口来访问数据库中的数据。上面两种获取SqlSession的方法只需要掌握第二种即可。

1.1.4 探索Mapper映射的SQL语句

MyBatis提供的全套功能可以通过使用基于XML的映射语言来实现,正是这种映射语言使MyBatis多年来非常流行。如果您以前使用过MyBatis,那么您将熟悉这个概念,但是对XML映射文档进行了许多改进,这些改进将在后面介绍。下面是一个满足上述SqlSession调用的基于XML的映射语句的例子。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xlb.mapper.AccountMapper">
    <select id="findById" resultType="Account">
        select * from tbl_account where id = #{id}
    </select>
</mapper>

虽然对于这个简单的示例来说,这看起来开销很大,它实际上很轻。您可以在单个映射器XML文件中定义任意多的映射语句,这样就可以充分利用XML头和doctype声明. 文件的其余部分是不言自明的。它在名称空间中为映射语句“findById”定义了一个名称“com.xlb.mapper.AccountMapper”,允许你通过完整的限定名来调用该方法,正如我们在上面的例子中所做的那样:

Account account = session.findById(
"com.xlb.mapper.AccountMapper.findById", 1);

请注意,这与在完全限定的Java类上调用方法是多么相似,这是有原因的。该名称可以直接映射到与名称空间同名的Mapper类,并使用与名称、参数和返回类型匹配的方法作为映射的选择语句。这允许你非常简单地调用Mapper接口的方法,就像你在上面看到的那样,如下:

BlogMapper mapper = session.getMapper(AccountMapper.class);
Account account = mapper.findById(101);

第二种方法不依赖于字符串字面值,因此更安全。

2 搭建MyBatis项目测试

2.1 准备工作

准备一个数据库表:数据库叫mybatis,表叫tbl_account(数据库名和表明你随意叫)

# 创建数据库
create database mybatis;  
# 创建数据库表
CREATE TABLE tbl_account(
	id int primary key auto_increment,
    name varchar(35),
    money double
);

使用IDEA创建MyBatis项目

创建一个Maven项目

导入相关依赖

<?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.xlb</groupId>
    <artifactId>mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.4</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.11</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>
    </dependencies>


</project>

创建数据库表对应的实体类

package com.xlb.domain;

public class Account {
    private Integer id;
    private String name;
    private double money;

    public Account(Integer id, String name, double money) {
        this.id = id;
        this.name = name;
        this.money = money;
    }

    public Integer getId() {
        return id;
    }

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                '}';
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }
}

创建连接数据库时具体连接的哪个数据库信息的文件

jdbc.driver=com.mysql.cj.jdbc.Driver      //数据库驱动
jdbc.url=jdbc:mysql://localhost:3306/mybatis     //你连接的数据库名称
jdbc.username=root         //你连接的数据库的用户名
jdbc.password=******       //你的数据库的密码


注:这个文件不是必须的,你也可以直接将这些信息写在MyBatis的核心配置文件中,只是将这些敏感信息额外保存到一个文件一方面容易管理,另一方面更加安全。

创建MyBatis的核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
        <configuration>
        <!--读取外部properties配置文件-->
        <properties resource="jdbc.properties"></properties>
        <!--别名扫描的包路径-->
        <typeAliases>
            <package name="com.xlb.domain"/>
        </typeAliases>
        <!--数据源-->
        <environments default="mysql">
            <environment id="mysql">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"></property>
                    <property name="url" value="${jdbc.url}"></property>
                    <property name="username" value="${jdbc.username}"></property>
                    <property name="password" value="${jdbc.password}"></property>
                </dataSource>
            </environment>
        </environments>
        <!--映射文件扫描包路径-->
        <mappers>
            <mapper resource="mappers/AccountMapper.xml" />
        </mappers>
        </configuration>

注意这个核心配置文件,你需要把上面package对应属性的路径改成自己的路径,mapper和properties标签对应的resource属性同样改成自己的路径。

创建mapper接口类

package com.xlb.mapper;

import com.xlb.domain.Account;

import java.util.List;

public interface AccountMapper {
    //增删改查
    void save(Account account);
    void deleteById(Integer id);
    void update(Account account);
    Account findById(Integer id);
    List<Account> findAll();
}

创建业务层接口

package com.xlb.service;

import com.xlb.domain.Account;

import java.util.List;

public interface AccountService {
    //增删改查
    void save(Account account);
    void deleteById(Integer id);
    void update(Account account);
    Account findById(Integer id);
    List<Account> findAll();
}

创建业务层实现

package com.xlb.service.impl;

import com.xlb.dao.AccountDao;
import com.xlb.domain.Account;
import com.xlb.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

public class AccountImpl implements AccountService {
    @Autowired
    private AccountDao accountDao;
    @Override
    public void save(Account account) {
        accountDao.save(account);
    }

    @Override
    public void deleteById(Integer id) {accountDao.deleteById(id);
    }

    @Override
    public void update(Account account) {

    }

    @Override
    public Account findById(Integer id) {
        return accountDao.findById(id);
    }

    @Override
    public List<Account> findAll() {
        return accountDao.findAll();
    }
}

创建Mapper接口映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xlb.mapper.AccountMapper">
    <select id="findById" resultType="Account">
        select * from tbl_account where id = #{id}
    </select>
</mapper>

2.2 测试

创建main方法测试

import com.xlb.dao.AccountDao;
import com.xlb.domain.Account;
import com.xlb.mapper.AccountMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class main {
    public static void main(String[] args) throws IOException {
        test();
    }
    public static void test() throws IOException {
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        InputStream in = Resources.getResourceAsStream("application.xml");
        SqlSessionFactory sqlSessionFactory = builder.build(in);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);

        AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
        Account data = mapper.findById(1);
        System.out.println(data);
    }
}

在这里插入图片描述

注意:

  1. Mapper接口类的名字必须和Mapper映射文件的名字保持一致,例如本例中的Mapper接口叫做AccountMapper,本例中的Mapper映射文件叫做AccountMapper.xml
  2. MyBatis核心配置文件的名字没有固定要求,加载时指定你写的名字即可,一般可叫做mybatis-config.xml,application.xml等
  3. MyBatis的核心配置文件中设置扫描包路径时,如果使用的是resource标签,则需要使用目录对应的斜线/来指定目录层级,如果使用的是package属性,则需要使用.来分开目录层级。

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

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

相关文章

Java集合-Java集合基础

目录 讲一讲Java集合吧 集合的使用 为什么要使用集合&#xff1f; 如何选用集合? Collection Collection与Collections的区别是什么&#xff1f; Collections.sort和Arrays.sort的实现原理 为何Collection不从Cloneable和Serializable接口继承&#xff1f; 线程安全集…

面向开发人员的 ChatGPT 提示语教程中文版

面向开发人员的 ChatGPT 提示语教程中文版 1. 指南1-1. 提示的指南1-2. 配置1-3. 提示语原则原则 1: 写出清晰而具体的指示技巧 1: 使用分隔符来清楚地表明输入的不同部分技巧 2: 要求提供结构化的输出技巧 3: 要求模型检查条件是否得到满足技巧 4: "少许样本"提示 原…

新魔百盒M304A_增强版2+16G_S905系列_UWE5621DS_卡刷/线刷固件包-当贝桌面

新魔百盒M304A_增强版216G_S905系列_UWE5621DS_卡刷&#xff0f;线刷固件包-当贝桌面 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内…

第三十九章 Unity 图像 (Image) UI

本章节&#xff0c;我们介绍一下“Image”UI元素&#xff0c;首先我们创建一个新场景“SampleScene2.unity”。然后我们点击菜单栏“GameObjec”->“UI”->“Image”&#xff0c;如下所示 我们将其放置到了中间位置&#xff0c;检视面板中的参数如下 默认情况下&#xf…

python基础-内置高阶函数map/reduce/filter函数的使用

一、map Python内置函数&#xff0c;用法及说明如下&#xff1a; class map(object):"""map(func, *iterables) --> map objectMake an iterator that computes the function using arguments fromeach of the iterables. Stops when the shortest iterab…

工控机All In One——篇1,pve安装(必读)

工控机All In One——篇1&#xff0c;pve安装 1、背景 满足家庭一机多用&#xff0c;同时满足软路由&#xff08;主旁路由&#xff09;、远程控制、NAS&#xff08;个人存储&#xff09;等功能 2、准备 硬件 1、J4125工控机 2、一个usb分线器 3、鼠标键盘 4、带HDMI或VGA接…

2022 年全国硕士研究生入学统一考试英语(一)试题

2022年全国硕士研究生入学统一考试英语&#xff08;一&#xff09;试题 SectionⅠUse of English Directions: Read the following text. Choose the best word(s) for each numbered blank and mark A, B, C or D on the ANSWER SHEET. (10 points) The idea that plants have…

论文解析-基于 Unity3D 游戏人工智能的研究与应用

1.重写 AgentAction 方法 1.1 重写 AgentAction 方法 这段代码是一个重写了 AgentAction 方法的方法。以下是对每行代码解释&#xff1a; ①public override void AgentAction(float[] vectorAction) 这行代码声明了一个公共的、重写了父类的 AgentAction 方法的方法。它接受…

【力扣-225】用队列实现栈

&#x1f58a;作者 : D. Star. &#x1f4d8;专栏 : 数据结构 &#x1f606;今日小tips : 有些家里可能会有两个同样名字的 WiFi&#xff0c;而其中一个名字的最后有个 5G&#xff0c;那么&#xff0c;这个 5G 和常说的 5G 信号是一回事吗&#xff1f;并不是&#xff0c;无线路…

研报精选230507

目录 【行业230507山西证券】煤炭行业周报&#xff1a;港口煤价趋稳&#xff0c;静待经济信心恢复与迎峰度夏双至 【行业230507山西证券】农业行业周报&#xff1a;建议逢低布局经营稳健和低PB的养殖股 【行业230507头豹研究院】2023年中国无源物联网行业词条报告 【个股230507…

运算放大器 - 笔记 02 -恒流源

恒流源 / 电流源 一、方案一二、方案二三、方案三四、方案四 前言&#xff1a;最近在学习运放&#xff0c;三极管&#xff0c;二极管&#xff0c;场效应管等器件的组合电路。捡起了以前的模电知识&#xff0c;写下笔记&#xff0c;以防再度忘记。 本文使用Multisim仿真软件进行…

MySQL---约束(主键约束,自增长约束,非空约束,唯一约束,默认约束、零填充约束)

1. 主键约束 MySQL主键约束是一个列或者多个列的组合&#xff0c;其值能唯一地标识表中的每一行,方便在RDBMS中 尽快的找到某一行。 主键约束相当于 唯一约束 非空约束 的组合&#xff0c;主键约束列不允许重复&#xff0c;也不允许出现空值。 每个表最多只允许一个主键 …

Linux 挂载磁盘教程,Linux系统分区及磁盘挂载

Linux 挂载磁盘教程&#xff0c;Linux系统分区及磁盘挂载 说明&#xff1a;以下教程是以未安装任何程序及无数据的数据盘基础上编写 如已安装程序或数据盘含有数据切勿使用此教程 本文中的磁盘/dev/sdb为笔者测试服务器上的命名&#xff0c;在您的服务器中可能是/dev/xdb、/dev…

【C++入门】引用

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

npm私有库(nexus)-安装nexus

注&#xff1a;安装 nexus(需要先安装 Java jdk) 1、上传软件包到服务器并解压 链接&#xff1a;https://pan.baidu.com/s/1NgpIbTaH4xV-HceyTUuxVA 提取码&#xff1a;vs51 tar -xvf nexus-3.19.1-01-unix.tar.gz 2、修改默认端口&#xff0c;并开启端口 firewall-cmd --pe…

windows和Linux系统配置静态ip方法

为什么要配置静态IP 配置静态IP地址可以确保设备始终具有相同的IP地址&#xff0c;这对于需要远程访问、网络管理和安全性很重要。与动态IP地址不同&#xff0c;静态IP地址不会随着时间而改变&#xff0c;因此它允许管理员轻松地识别特定设备并在网络上进行更精细的控制。另外…

02- 目标检测基础知识及优化思路汇总 (目标检测)

要点&#xff1a; 参考综述&#xff1a;深度学习目标检测最全综述 - 爱码网参考表达&#xff1a;https://www.cnblogs.com/xjxy/p/13588772.html 一 发展历程 分类网络是目标检测的基础&#xff0c;必须熟练掌握。 1.1 传统算法 V.J Detector 19年前&#xff0c;P. Viola 和 …

操作系统——文件管理

0.关注博主有更多知识 操作系统入门知识合集 目录 9.1文件系统概念 思考题&#xff1a; 9.2文件的物理结构 思考题&#xff1a; 9.3文件存储和目录 9.1文件系统概念 文件的定义&#xff1a; 文件是计算机信息存取的一种重要组织形式&#xff0c;文件由若干信息项有序构…

多项式时间验证与NP完全性

多项式时间的验证 对语言的“验证”算法&#xff1a; 验证与求解花费时间一样长&#xff1a;最短路径问题的一个实例的证书很容易能在多项式时间内被验证。实际上最短路径问题本身可以在多项式时间内求解。因此&#xff0c;根据指定的证书来验证与从头开始求解这个问题的时间…

Docker安装常用软件-Nacos

一、单机部署 官方网站&#xff1a;什么是 Nacos 1、下载最新nacos镜像 docker pull nacos/nacos-server 2、新建映射文件夹 --nacos/conf/application.properties --nacos/logs --nacos/sql ①application文件 # # Copyright 1999-2021 Alibaba Group Holding Ltd. #…