Springboot04_MyBatis

本篇文章介绍SpringBoot + MyBatis。可以直接集成MyBatis的依赖,也可以直接使用MyBatis的启动器。本文为了快速构建工程,则直接使用启动器进行开发。同时也会使用MyBatis Generator(MBG)快速生成xml配置和dao接口。

IDE:IntelliJ IDEA 2019.3.3 ;

Java:jdk1.8;

Spring Boot:2.3.5.RELEASE

MySQL:8.0.15;

一、准备数据库

我们快速建立一张表,为MBG生成xml和mapper文件做准备:

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `name` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
  `age` int(11) NOT NULL,
  `address` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

二、依赖引入

根据前面的文章,快速搭建起SpringBoot工程,并引入如下依赖:

<!--mybatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--mysql-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

这里还需要引入一个MBG的插件,MBG的使用方式有两种:1)直接引入MBG的依赖包,然后通过JavaConfig的方式运行代码生成xml和mapper文件;2)直接引入MBG插件,通过xml配置文件的方式运行插件生成xml和mapper文件。这里我们选择了后者。引入的插件如下图所示:

 <build>
     <plugins>
         <plugin>
             <groupId>org.mybatis.generator</groupId>
             <artifactId>mybatis-generator-maven-plugin</artifactId>
             <version>1.4.0</version>
             <configuration>
                 <!-- 输出运行时信息 -->
                 <verbose>true</verbose>
                 <!-- 覆盖生成文件 -->
                 <overwrite>true</overwrite>
                 <!-- 指定配置文件所在路径 -->
                 <configurationFile>
                     ${basedir}/src/main/resources/mbgConfig.xml
                 </configurationFile>
             </configuration>
             <!-- 这里记得要写下MySQL的依赖,亲测如果不加,MBG会找不到MySQL的驱动 -->
             <dependencies>
                 <dependency>
                     <groupId>mysql</groupId>
                     <artifactId>mysql-connector-java</artifactId>
                     <version>8.0.17</version>
                 </dependency>
             </dependencies>
         </plugin>
     </plugins>
</build>

完成插件的引入后即可在maven弹出框中看到两个执行命令了:mybatis-generator:generatemybatis-generator:help ,执行前者即可生成文件。

在这里插入图片描述

三、MBG配置文件解析

在上面的插件中,我们配置了一个mbg的配置文件,主要用于指定数据源、自动生成文件的表以及生成的代码所在包路径等。下面对其进行说明。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 参考https://blog.csdn.net/m0_37989980/article/details/104521920 -->
<generatorConfiguration>
    <!-- 指定一个配置上下文, -->
    <context id="mysql" defaultModelType="hierarchical" targetRuntime="MyBatis3Simple">
        <!-- Java文件生成后的编码 -->
        <property name="javaFileEncoding" value="UTF-8" />
        <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
        <property name="beginningDelimiter" value="`" />
        <property name="endingDelimiter" value="`" />
        
        <!-- 能够让生成的entity具备toString方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
        
        <!-- 注释生成器 -->
        <commentGenerator>
            <property name="suppressDate" value="true" />
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!-- 配置数据源,只有连接数据源后才能根据表信息自动生成相关文件 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/springbootdb?serverTimezone=Asia/Shanghai&amp;characterEncoding=utf-8"
                        userId="root"
                        password="123456">
        </jdbcConnection>
        <!-- 生成实例对象,指定实例对象生成后的所在包 -->
        <javaModelGenerator targetPackage="org.mrxu.entity" targetProject="I:/Java/Spring/springboot/springboot04-mybatis/src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaModelGenerator>
        <!-- 生成Mapper文件,指定Mapper文件生成后的所在包 -->
        <sqlMapGenerator targetPackage="org.mrxu.mapper" targetProject="I:/Java/Spring/springboot/springboot04-mybatis/src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- 生成Mapper接口 -->
        <javaClientGenerator targetPackage="org.mrxu.dao" type="XMLMAPPER"
                             targetProject="I:/Java/Spring/springboot/springboot04-mybatis/src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- 指定生成的表 -->
        <table tableName="student" domainObjectName="Student"/>
    </context>
</generatorConfiguration>

运行 mybatis-generator:generate 后可以看到在相应的目录下面已经生成了相关文件:

在这里插入图片描述

四、MyBatis配置

我们在 application.yml 中配置数据源和MyBatis相关配置,更多配置可以在 MybatisProperties.java 这个文件中找到:

spring:
  # 配置数据源信息
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springbootdb?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
    username: root
    password: 123456
mybatis:
  type-aliases-package: org.mrxu.entity # 配置实体类所在包,自动解析别名
  mapper-locations: classpath:org/mrxu/mapper/*.xml # 配置mapper.xml所在位置

然后在启动类上配置 MapperScan 扫描包注解,配置该注解后就可以不用在每个mapper接口上配置 Mapper 注解了。

@SpringBootApplication
@MapperScan(value = "org.mrxu.dao")
public class SpringBoot04MyBatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBoot04MyBatisApplication.class, args);
    }
}

五、测试

1)、insert测试

编写如下测试代码并执行:

@RunWith(SpringRunner.class)
@SpringBootTest
public class StudentMapperTest {
    @Resource
    private StudentMapper studentMapper;

    @Test
    public void testAddStudent() {
        Student student = new Student();
        student.setName("xiaohua");
        student.setAge(20);
        student.setAddress("mogaoku");
        student.setId(1);
        // 执行插入的方法
        int count = studentMapper.insert(student);
        System.out.println(count);
    }
}

可以看到数据被成功添加,操作数据数也被成功打印:

在这里插入图片描述
在这里插入图片描述

2)、update测试

编写如下测试代码,框架基于上述代码,这里只给出关键测试代码:

@Test
public void testUpdateStudent() {
    Student student = new Student();
    student.setName("xiaohua");
    student.setAge(25);
    student.setAddress("mogaoku");
    student.setId(1);
    
    // 执行更新的代码
    int count = studentMapper.updateByPrimaryKey(student);
    System.out.println(count);
}

3)、query测试

编写如下测试代码,框架基于上述代码,这里只给出关键测试代码:

@Test
public void testQueryStudent() {
    Student student = studentMapper.selectByPrimaryKey(1);
    System.out.println(student);
}

可以看出控制台成功打印出数据库信息,Student对象可能没有 toString() 方法,加上就好了。

在这里插入图片描述


4)、delete测试

编写如下测试代码,框架基于上述代码,这里只给出关键测试代码:

@Test
public void testDeleteStudent() {
    int count = studentMapper.deleteByPrimaryKey(1);
    System.out.println(count);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值