Spring boot mybatis 简单示例

2023-05-16

我在Spring boot中集成mybatis竟然花了不少时间,真没想到。对着官网的文档做,竟然还花了这么多时间。所以我把过程尽可能的详细记录下来,给有需要的朋友。

需求

在spring boot 中使用mybatis。

官方文档

使用开源组件,最棒的文档就是官方文档了。然而我在看文档时发现了一些小坑,我看文档的顺序如下:

  • 《mybatis》
    什么是 MyBatis?
    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
    https://mybatis.org/mybatis-3/zh/index.html
    这个是讲mybatis的通用方法,不是针对spring的。我把这些文档看完,还是没有完美解决 spring boot中完美的集成mybatis。经过摸索才发现mybatis有个子项目《mybatis-spring》。

  • 《mybatis-spring》
    什么是 MyBatis-Spring?
    MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。
    https://mybatis.org/mybatis-3/zh/configuration.html

经过摸索和踩坑,我又发现这个项目还有一个子项目《mybatis-spring-boot-autoconfigure》。

  • 《mybatis-spring-boot-autoconfigure》
    MyBatis-Spring-Boot-Starter 帮助您在Spring Boot之上快速构建 MyBatis 应用程序。
    https://mybatis.org/spring/zh/boot.html

事实上对我的需要最有用的就是最后一个文档:
https://mybatis.org/spring/zh/boot.html
看前面两个文档属实让人浪费了不少时间了。

实践记录

建议大家自行查看官方的文档来练习,如果遇到坑在对照这篇文章看看。
https://mybatis.org/spring/zh/boot.html
以下内容源于官网文档的练习。

源码下载

我把我测试的代码,打包分享给大家。

https://download.csdn.net/download/lxyoucan/86341756

建表

在这里以mysql为例操作。

-- auto-generated definition
create table CITY
(
    city_id   bigint auto_increment comment '城市ID'
        primary key,
    city_name varchar(50)              not null comment '城市名称',
    state    varchar(10) default 'CA' null comment '省'
)
    comment '城市';

insert into CITY (city_name, state) values ('北京','beijing');
insert into CITY (city_name, state) values ('南京','jiangsu');
insert into CITY (city_name, state) values ('上海','shanghai');

select * from CITY where state='beijing';

pom.xml

MyBatis-Spring-Boot/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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.ycmit</groupId>
    <artifactId>MyBatis-Spring-Boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>MyBatis-Spring-Boot</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <!-- Mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

实体类

MyBatis-Spring-Boot/src/main/java/cn/ycmit/mybatis/domain/City.java

package cn.ycmit.mybatis.domain;

public class City {
    private static final long serialVersionUID = 1L;

    private Long city_id;
    private String city_name;
    private String state;

    public City() {
    }

    public Long getCity_id() {
        return city_id;
    }

    public void setCity_id(Long city_id) {
        this.city_id = city_id;
    }

    public String getCity_name() {
        return city_name;
    }

    public void setCity_name(String city_name) {
        this.city_name = city_name;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    @Override
    public String toString() {
        return "City{" +
                "city_id=" + city_id +
                ", city_name='" + city_name + '\'' +
                ", state='" + state + '\'' +
                '}';
    }
}

mapper

MyBatis-Spring-Boot/src/main/java/cn/ycmit/mybatis/mapper/CityMapper.java

package cn.ycmit.mybatis.mapper;

import cn.ycmit.mybatis.domain.City;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface CityMapper {

    @Select("SELECT * FROM CITY WHERE state = #{state}")
    City findByState(@Param("state") String state);

}

启动类

MyBatis-Spring-Boot/src/main/java/cn/ycmit/mybatis/MyBatisSpringBootApplication.java
主要简化代码,便于理解,实际项目中一般不会这么写。这样写省的写测试类了。

package cn.ycmit.mybatis;

import cn.ycmit.mybatis.mapper.CityMapper;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyBatisSpringBootApplication implements CommandLineRunner {

    private final CityMapper cityMapper;

    public MyBatisSpringBootApplication(CityMapper cityMapper) {
        this.cityMapper = cityMapper;
    }

    public static void main(String[] args) {
        SpringApplication.run(MyBatisSpringBootApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println(this.cityMapper.findByState("beijing"));
    }

}

application.yml

MyBatis-Spring-Boot/src/main/resources/application.yml
主要是数据源相关的配置。

spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://128.0.0.1:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
    username: root
    password: itkey123457

controller注入演示

MyBatis-Spring-Boot/src/main/java/cn/ycmit/mybatis/controller/SqlApiController.java

package cn.ycmit.mybatis.controller;
import cn.ycmit.mybatis.domain.City;
import cn.ycmit.mybatis.mapper.CityMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SqlApiController {
    @Autowired
    CityMapper mapper;
    /**
     * 查询测试
     * @return
     */
    @RequestMapping("/city")
    public City city()
    {
        City city =mapper.findByState("beijing");
        return city;
    }
}

这样访问 http://localhost:8080/city
就会得到如下结果:

{"city_id":1,"city_name":"北京","state":"beijing"}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring boot mybatis 简单示例 的相关文章

  • archlinux telnet客户端

    简单介绍 telnet是一种基于TCP的传统命令行远程控制协议 telnet使用非加密的通道 xff0c 因此不太安全 现在主要用于链接一些旧设备 下面这些介绍主要适用于在Arch Linux系统中配置一个telnet服务器 安装 如果只使
  • ASUS Vivobook安装linux

    使用ASUS Vivobook安装linux 会有一个小坑 如果你的linux启动不起来 xff0c 或者本来可以启动更新固件以后就不行了 这篇文章可能会给你一点帮助 BIOS设置 如果你想在这台电脑上安装linux 则Secure Boo
  • 修复grub启动 因调整分区导致linux无法启动解决过程

    linux调整分区后 xff0c 开机重启时会出现 error unknow filesystem grub rescue gt 我是windows11 43 archlinux双系统使用 这段时间用下来 xff0c 感觉使用linux更多
  • linux 扩容 新增分区

    一开始我只是尝试使用archlinux做为主要办公系统 xff0c 给系统分配的空间并不多 渐渐的也适应了archlinux感觉挺好 于是就把windows中占用的一些空间分配给archlinux用了 记录一下些过程吧 我把windows的
  • VirtualBox调整分分辨率

    以前在windows或者macOS基本都是使用vmware来玩虚拟机的 到linux环境 xff0c 想体验一下VirtualBox 结果用的时间发现分辨率都是调不出来 记录一下我的操作方法 环境 宿主机 xff1a archlinux 4
  • VirtualBox宿主机复制粘贴时有时无

    现象 首先我已经安装了增强功能 xff0c 共享剪切板选择的也是双向 虚拟机刚开机剪切板功能是正常的 可以双向复制 但是用了一段时间以后 xff0c 就会发现从宿主机得到到虚拟机就不行了 但是可以从虚拟机复制到宿主机 环境 我的宿主机是 a
  • HBuilderX运行微信小程序不报错也打不开

    我主用的是linux操作系统 xff0c 因为要开发微信小程序 所以在虚拟机中安装了一个windows7系统 环境 虚拟机中的windows7 HbuilderX 43 微信开发者工具 现象 使用HbuilderX开发uni app并想在微
  • Virtualbox虚拟机与主机相互访问

    刚从vmware切换到Virtualbox有些地方还是不太熟悉 网络连接这块就被卡了一下 xff0c 后来发现其实很简单 xff0c 是我想多了 环境 主机 xff1a archlinux 虚拟机 xff1a windows 10 软件版本
  • maven打包报内存不足,配置maven vm options

    服务器上内存所剩余不多了 xff0c 用mvn打包报内存不足 解决办法就要把vm options中内存设置小一些 mvn jvm config文件 xff1a 从 Maven 3 3 1 43 开始 xff0c 您可以通过 maven pr
  • archlinux滚动更新导致virtualbox虚拟机无法启动

    今天遇到一个奇怪的问题 xff0c 滚动更新以后 xff0c pacman Syyu 虚拟机无法正常启动了 虚拟机启动以后一直显示Starting virtual machine 并且卡在20 不动了 原因分析 我怀疑是更新系统后 xff0
  • 设计模式之【工厂模式】,创建对象原来有这么多玩法

    文章目录 一 什么是工厂模式1 工厂模式的意义2 什么时候应该用工厂模式 二 简单工厂模式1 实例 xff08 1 xff09 使用简单工厂进行优化 xff08 2 xff09 静态工厂 xff08 3 xff09 使用map来去除if x
  • archlinux安装node.js长期支持版本

    默认archlinux安装的node js版本是18 我今天在遇到项目时报错了 xff0c 项目中用到一个组件不支持18 那么如果安装 低版本的Node呢 xff1f 先在软件仓库中搜索一下 xff1a pacman Ss span cla
  • windows开机启动目录

    设置windows开机启动有很多种方法 xff0c 最简单的方法恐怕就是把快捷方式放到启动目录吧 windows开机启动目录 按下 win 43 R 打开运行输入 xff1a shell span class token operator
  • linux 灰度显示grayscale

    之前我在使用macOS的时候 xff0c 非常喜欢使用灰度显示界面 到底是什么原因让我有这么 变态 的需求 下面听听我的故事 xff0c 当时不重要 xff0c 可以跳过 是这样的 xff0c 因为我是程序员 xff0c 算上电脑 43 手
  • charles iOS手机抓包

    iOS手机如何抓包 下载charles https www charlesproxy com latest release download do 注册码 Registered Name span class token builtin c
  • redis cli笔记

    此篇为人个笔记 xff0c 基本是个人常用命令 xff0c 仅供参考 基础操作 redis cli redis span class token number 127 0 span 0 1 637 span class token oper
  • Jsoup通过curl Request设置header

    使用Charles时发现它有一个功能非常的方便 Copy cURL Request菜单 可以把请求中的header信息自动拼接成curl的参数 其实有很多的软件都具备这样的功能 那么如何把这些header信息直接 放到Jsoup的heade
  • 【Java题】用户数据中的身高体重收集

    题目要求 用户数据中的身高体重收集 应用程序中用户数据收集 xff0c 非常重要 xff0c 是大数据重要来源之一 在某APP场景中收集用户的身高体重数据 xff0c 身高单位 米 xff0c 体重单位kg xff0c 要求用户输入的任何数
  • archlinux i3wm通知管理

    通知管理 Dunst 是大多数桌面环境提供的通知守护程序的轻量级替代品 它非常可定制 xff0c 不依赖于任何工具包 xff0c 因此适合那些我们都喜欢定制到完美的以窗口管理器为中心的设置 官网如下 xff1a https dunst pr
  • i3wm 获取window class

    在i3wm中如果你想让一个程序固定在某个workspace中打开可以如下设置 span class token comment 打开virtual box直接进入第10个桌面 span assign span class token pun

随机推荐

  • xrandr修改分辨率与刷新率

    查询当前显示器信息 直接运行xrandr即可 我的执行结果如下 xff0c 信息过多 xff0c 我则把关键部分放出来 xff1a itkey 64 vivobook screenlayout xrandr span class token
  • 设计模式之【适配器模式】,两个人之间确实需要月老的搭线~

    文章目录 一 什么是适配器模式1 适配器模式使用场景2 代理 桥接 装饰器 适配器 4 种设计模式的区别3 适配器模式结构 二 类适配器1 实例 三 对象适配器1 实例 四 接口适配器1 实例 五 源码中的应用 一 什么是适配器模式 适配器
  • linux黑客帝国cmatrix

    装X神器 xff0c 黑客帝国 xff01 xff01 xff01 安装方法 我这里以archlinux为例 span class token function sudo span pacman S cmatrix 效果演示
  • mysql字段userid逗号分开保存按userid查询

    我的sql水平一般 xff0c 仅是一个笔记 无法保存是最优解 仅供参考 场景 有一张消息表 xff0c 其中有一个收信人字段中把多个用户以 分隔保存信息 我需要根据userid来查询信息 为了方便理解 xff0c 我减化一下表结构 我的表
  • windows11 + linux 蓝牙连接问题

    我主要使用Linux办公 xff0c 因为一些特殊情况需要到windows系统下测试 这时就会发现蓝牙键盘就需要重新连接 xff0c 只要切一次系统就要重新连接一次非常的麻烦 今天要多次往返这两个系统 xff0c 所以我决定解决一下这个问题
  • archlinux音量管理

    我用的i3wm 平时音量调整 xff0c 我是直接使用键盘自带的多媒体键实现的 xff0c 所以一直也懒得折腾 多媒体键盘调整音量的缺点就是无法细力度调整 xff0c 导致使用耳机听歌时 xff0c 要么声音听不到 xff0c 要么就是听不
  • git 命令行版本初始化

    假设你已经在网页上创建了一个如下的版本库 http git ycmit cn r manuli api git 然后我们需要把本地已经有的文件上传到版本库 xff0c 执行以下命令即可 span class token function g
  • mysql转SQL Server

    使用工具 Navicat 点击 工具 61 数据传输 即可完成
  • jdbc SQLServer Error: “The server selected protocol version TLS10

    最近在尝试在SQL Server 环境下开发新项目 xff0c 遇到了一些坑 xff0c 记录一下 报错信息 com span class token punctuation span microsoft span class token
  • windows11右键菜单变回windows10风格

    windows11的右键菜单会折叠一部分 xff0c 虽然美观了不少 但是总感觉效率反而更低了 xff0c 能不能设置回windows10风格的呢 xff1f 操作 Windows 43 R xff0c 输入 regedit 并按 Ente
  • C# winform使用SQLite

    本文仅是一个笔记 xff0c 仅供参考 SQLite SQLite是遵守ACID的关系数据库管理系统 xff0c 它包含在一个相对小的C程序库中 与许多其它数据库管理系统不同 xff0c SQLite不是一个客户端 服务器结构的数据库引擎
  • C# SQLite Database Locked exception

    现象 在查询时没有问题 xff0c 但是在Insert时会报数据库被锁定 原因分析 可能是代码某个地方连接着数据库 xff0c 忘记关闭了 解决办法 原理我还没有完全搞懂 xff0c 不过根据下面的写法确实解决了问题 在某个地方 xff0c
  • 设计模式之【桥接模式】,多用组合少用继承

    文章目录 一 什么是桥接模式1 使用场景2 代理 桥接 装饰器 适配器 4 种设计模式的区别3 桥接模式的优缺点4 桥接模式的四种角色 二 实例桥接模式优化代码 三 源码中使用的桥接模式1 桥接模式在JDBC中的应用 一 什么是桥接模式 桥
  • C# 无操作则退出登陆

    span class token keyword using span span class token namespace System span span class token punctuation span span class
  • C#调用explorer.exe打开指定目录

    需求 C 程序上有一个按钮 xff0c 点击打开电脑上对应的目录即可 代码 span class token comment 打开帮助文档 span System span class token punctuation span Diag
  • windows中ncdu替代者TreeSize

    平时开发大部分时间使用linux或者macOS系统 xff0c 近期因为要开发C 程序不得不使用windows系统 在linux或者macOS常用的ncdu来查看文件目录体积大小 到windows中无法使用 xff0c 很不习惯 就想找一个
  • Visual Studio中vim模拟器

    简介 Vim 仿真 这是 Visual Studio 2015 及更高版本的 Vim 仿真层 它将 Vim 熟悉的键绑定体验直接集成到 Visual Studio 的编辑器中 细节 GitHub 上提供了该项目和问题跟踪的完整源代码 htt
  • mybatis小示例

    一般使用mybatis的环境 xff0c 大多都是别人已经配置好的 直接用就好了 xff0c 如何自己搭建呢 xff1f 其实很简单 看官方的文档就可以解决了 主要为了学习mybatis最基础的配置 我文章中的方法不基于spring 一般很
  • spring boot集成mybatis报错 java.lang.IllegalStateException: No supported DataSource type found

    背景 我参考MyBatis Spring的文档搭建环境 https mybatis org spring zh getting started html 完全按文档上操作 xff0c 还是报以下错误 报错信息 Error starting
  • Spring boot mybatis 简单示例

    我在Spring boot中集成mybatis竟然花了不少时间 xff0c 真没想到 对着官网的文档做 xff0c 竟然还花了这么多时间 所以我把过程尽可能的详细记录下来 xff0c 给有需要的朋友 需求 在spring boot 中使用m