• Spring Boot整合MyBatis


    开发环境

    • IDE:idea 2019.2
    • 构建工具:maven 3.8.1
    • MySQL版本:MySQL 5.7
    • MyBatis版本:MyBatis 3.5.7
    • Spring Boot版本:2.5.1

    创建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>org.example</groupId>
        <artifactId>MyBatisSpringBoot</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <!--父工程-->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.5.1</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <!--Java版本-->
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <!--spring boot 核心库-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--测试模块-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
    
            <!--spring boot测试模块-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    
            <!--连接MySQL-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.3</version>
            </dependency>
    
            <!--mybatis包-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.0</version>
            </dependency>
    
        </dependencies>
    
    </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
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    创建一个示例数据库

    create database `mybatis`;
    
    use `mybatis`;
    
    create table `user`(
        `id` int(20) not null,
        `name` varchar(30) default null,
        `pwd`  varchar(30) default null,
        primary key (`id`)
    )engine = innodb default charset = utf8;
    
    insert into `user`(`id`, `name`, `pwd`)
    values ('1', '张三', '123456'),('2', '李四', '123456'),('3', '王五', '123456');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    环境配置

    使用application.yaml,整个应用都可以配置在这里

    mybatis:
      mapper-locations: classpath:mapper/*.xml   #mapper文件存放地址
      configuration:
        map-underscore-to-camel-case: true   #自动映射
    
    spring:
      datasource:  #数据库路径
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8
        username: root
        password: 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • driver,驱动,这个是固定的,MySQL驱动(mysql-connector-java)低于6.0的使用com.mysql.jdbc.Driver;高于6.0的使用com.mysql.cj.jdbc.Driver,同时需要在url中指明时区
    • url,使用idea连接数据库时,就可以看到一个url,但还需要设置一些内容,“jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8”(附:使用IDER连接MySQL数据库

    image-20200804104629507

    • username和password就是自己登录数据库的用户名和密码

    根据配置,在resources目录下新建一个名为mapper的文件夹,mybatis的映射文件都放在这个目录下,会被系统自动扫描到。

    对象关系映射(ORM)

    用于MyBatis映射,MyBatis可以将从数据库取到的数据自动填充到实体对象中。

    它们的关系:

    Java概念数据库概念
    属性字段/列
    对象记录/行

    映射文件的命名规则

    • 表所对应的实体类的类名+Mapper.xml
    • 例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml
    • 因此一个映射文件对应一个实体类,对应一张表的操作
    • MyBatis映射文件用于编写SQL,访问以及操作表中的数据

    对应数据库的user表,添加User实体类

    //根据自己需求使用lombok,一些公司要求不得使用lombok,而我认为lombok简化了开发
    
    @Data
    public class User {
        private int id;
        private String name;
        private String pwd;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    创建mapper接口

    用于获取所有用户信息

    public interface UserMapper {
        List<User> getUserList();
    }
    
    • 1
    • 2
    • 3

    创建映射文件

    UserMapper.xml

    <?xml version="1.0" encoding="UTF8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.example.mapper.UserMapper">
    
        <select id="getUserList" resultType="com.example.pojo.User">
            select * from mybatis.user
        </select>
    
    </mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    配置spring boot主入口

    创建spring boot主入口,定义一个Java类,我命名为MainApplication。配置好后,无需再配置tomcat等,启动该方法,就表示启动了整个项目。

    @MapperScan("com.example.mapper")
    @SpringBootApplication
    public class MainApplication {
        public static void main(String[] args) {
            SpringApplication.run(MainApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    dao层的每一个接口变成实现类,要在每个接口类上加上@Mapper注解,比较麻烦,这里用到了MapperScan,顾名思义,就是用作扫描mapper使用,在启动类上添加@MapperScan注解指定扫描的包,该包下的所有接口在编译之后都会生成相应的实现类。

    Junit测试

    @SpringBootTest注解是SpringBoot自1.4.0版本开始引入的一个用于测试的注解,像本示例,因为用到了自动注入,所以执行测试代码前需要启动整个项目程序,因此需要使用如下注解启动整个项目。(固定写法,其中@SpringBootTest的参数是项目启动入口对象)

    @SpringBootTest(classes = MainApplication.class)
    @RunWith(SpringRunner.class)
    
    • 1
    • 2

    测试代码:

    @SpringBootTest(classes = MainApplication.class)
    @RunWith(SpringRunner.class)
    public class Test {
    
        @Autowired
        private UserMapper userMapper;
    
        @org.junit.Test
        public void Test(){
            List<User> userList = userMapper.getUserList();
            for (User user : userList) {
                System.out.println(user);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    测试正常:

    User{id=1, name='张三', pwd='123456'}
    User{id=2, name='李四', pwd='123456'}
    User{id=3, name='王五', pwd='123456'}
    
    • 1
    • 2
    • 3

    整体结构:

    image-20220703222052540

  • 相关阅读:
    Spring MVC组件之HandlerMapping
    数值优化:经典二阶确定性算法与对偶方法
    免费考AI OCP认证,附通关秘籍!
    js获取对象值得方式(在不确定对象参数的情况下获取值)
    鸿萌数据恢复服务:Mac 文件系统是如何影响 Mac 数据恢复的?
    vue 弹出消息框
    macbookrpro使用体验
    4基于pytorch的蚁群算法求解TSP(旅行商问题),访问一座城市并回到最初位置的最佳路径,解决组合中的NP问题。程序已调通,替换自己的数据可以直接运行。
    aspnetcore 原生 DI 实现基于 key 的服务获取
    8+肿瘤+多组机器学习+分型。
  • 原文地址:https://blog.csdn.net/cun_king/article/details/125590901