SpringBoot入门,整合Mybatis并使用Mybatis-Generator自动生成所需代码
阅读原文时间:2021年04月21日阅读:1

1.引言

在上一篇博客中,我们已经搭建好的第一个springboot web应用程序,下面整合mybatis与数据库进行交互,废话不多说,搞起!

2.引入依赖

在pom.xml文件中引入链接数据库的依赖,mybatis的依赖和mybatis-generator的依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.5</version>
</dependency>

3.配置文件

打开application.properties配置文件,配置数据源并整合mybtis。

#数据源
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/first?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#整合mybatis
mybatis.mapper-locations=classpath:/mapper/**.xml

这里我们将 mybatis的xml文件放在了classpath:/mapper/下,所以我们需要在resources创建一个mapper文件夹:

怎么样,是不是很简单,这样就完事了,下面开始测试。

4.测试

(1)创建数据库和表

这里使用mysql数据库,用的是navicat进行管理的,新建一个名为first的数据库,并新建一张person表,表结构如下:

创建完后,我们可以手动添加一些信息方便测试。

(2)创建项目所需包

(3)Mybatis-generator逆向工程

在resources目录下新建generator的配置文件,mybatis-generator.xml

<?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">

<generatorConfiguration>

    <!-- mysql-connector-java-5.1.46.jar的绝对路径 -->
    <classPathEntry location="E:/my_repository/mysql/mysql-connector-java/5.1.46/mysql-connector-java-5.1.46.jar" />

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!-- 配置数据源 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/first"
                        userId="root"
                        password="123456">
        </jdbcConnection>

        <javaTypeResolver >
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- 配置生成的javabean所存放的路径和包(使用绝对路径) -->
        <javaModelGenerator targetPackage="com.example.bean" targetProject="D:\JavaProjects\First\src\main\java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- 配置生成的**Mapper.xml文件所存放的路径和包(使用绝对路径) -->
        <sqlMapGenerator targetPackage="mapper"  targetProject="D:\JavaProjects\First\src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- 配置生成的**Mapper.java接口文件所存放的路径和包(使用绝对路径) -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.dao"  targetProject="D:\JavaProjects\First\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- 指定我们要操作的表明和生成的javabean类名 -->
        <table tableName="person" domainObjectName="Person" >
        </table>

    </context>
</generatorConfiguration>

在utils包下新建Generator.java

package com.example.utils;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Generator {
    public static void main(String[] args) throws Exception{
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        File configFile = new File("D:/JavaProjects/First/src/main/resources/mybatis-generator.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }
}

然后执行这个程序,如果执行成功,将为我们自动生成所需的文件,也证明了我们与数据库链接成功。我们可以在相应的包内查看自动生成的文件

(4)开始测试

在controller包下新建PersonController类,在service包下常见PersonService接口,在serviceImpl包下创建PersonServiceImpl类实现PersonService接口。

我们想要从数据库中取出全部数据并在前台页面显示出来。首先在PersonService中定义一个获取全部信息的方法:

然后在PersonServiceImpl中实现这个方法:

personMapper下的红线可以忽略,是idea的问题。在PersonController中调用PersonService中的方法获取所有人的信息并返回到list界面:

list界面没有,所以我们在templates文件夹下新建list.html,在上一篇博客博客中,我们引入的thymeleaf模版将会使用,处理数据并显示。

最后一步,为dao包中的自动生成的接口文件添加@Mapper或者直接在入口程序添加@MapperScan注解自动扫描dao包下的所有文件(二者选其一即可)

至此,准备工作已经完成,启动入口程序,输入http://localhost:8080/getAllPerson查看效果吧。

最终的目录结构如下图所示:

5.扩展(使用Druid链接池)

在pom.xml文件中,添加依赖项,

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>

更改配置文件,将我们之间的数据源配置注释掉,添加druid的数据配置。

#数据库访问配置
spring.datasource.name=mysql_test
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/first?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
#数据源配置,初始化大小、最小、最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
#连接等待超时时间
spring.datasource.maxWait=60000
#配置隔多久进行一次检测(检测可以关闭的空闲连接)
spring.datasource.timeBetweenEvictionRunsMillis=60000
#配置连接在池中的最小生存时间
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true

重新启动入口程序,查看是否能够获得数据信息。

总体的pomw文件如下:

<?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.example</groupId>
    <artifactId>first</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>First</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

欢迎转载和评论,如有错误,我会及时改正!