• Spring boot mybatis 简单示例


    我在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》。

    事实上对我的需要最有用的就是最后一个文档:
    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';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    pom.xml

    MyBatis-Spring-Boot/pom.xml

    
    <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.0modelVersion>
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.7.2version>
            <relativePath/> 
        parent>
        <groupId>cn.ycmitgroupId>
        <artifactId>MyBatis-Spring-BootartifactId>
        <version>0.0.1-SNAPSHOTversion>
        <name>MyBatis-Spring-Bootname>
        <description>Demo project for Spring Bootdescription>
        <properties>
            <java.version>1.8java.version>
        properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
    
            
            <dependency>
                <groupId>org.mybatis.spring.bootgroupId>
                <artifactId>mybatis-spring-boot-starterartifactId>
                <version>2.2.2version>
            dependency>
    
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
            dependency>
    
        dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
            plugins>
        build>
    
    project>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    实体类

    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 + '\'' +
                    '}';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    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);
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    启动类

    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"));
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

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

    {"city_id":1,"city_name":"北京","state":"beijing"}
    
    • 1
  • 相关阅读:
    机器学习概念
    Linux内核 6.6版本将遏制NVIDIA驱动的不正当行为
    DBCO Sata650,二苯并环辛烷Sata650,Seta-650-DBCO
    免费旋转视频
    面试题 2023/11/15
    常见的Java上机面试题
    【Python】【Torch】神经网络中各层输出的特征图可视化详解和示例
    牛客题目——链表的奇偶重排、输出二叉树的右视图、括号生成、字符流中第一个不重复的字符
    Spring Cloud之多级缓存
    Linux系统编程04
  • 原文地址:https://blog.csdn.net/lxyoucan/article/details/126228140