9、SpringBoot整合Mybatis

步骤

  1. 搭建项目环境
  2. 创建项目
  3. 修改POM文件,添加相关依赖
  4. 配置数据源

POM文件

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


<!--thymeleaf-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--mybatis-->
<!--由mybatis官方来定义的-->
<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>2.1.1</version>
</dependency>
<!--数据库驱动-->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.38</version>
</dependency>
<!--druid数据源-->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.1.12</version>
</dependency>

配置数据源

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 12345
    url: jdbc:mysql://localhost:3306/test?userUnicode=true&characterEncoding=utf-8&userSSL=false
    type: com.alibaba.druid.pool.DruidDataSource

配置Maven的generator插件

  • 添加generator插件坐标
  • 添加generator配置文件
  • 添加generator配置文件的DTD文件
  • 运行generator插件生成代码

添加generator插件坐标

<!--配置Generator插件-->
<plugin>
   <groupId>org.mybatis.generator</groupId>
   <artifactId>mybatis-generator-maven-plugin</artifactId>
   <version>1.3.5</version>
   <!--给插件注入一个数据库驱动,用于生产数据库对应的资源,接口,映射文件,pojo-->
   <dependencies>
      <!--数据库驱动-->
      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.38</version>
      </dependency>
   </dependencies>
   <!--指定配置文件的路径,这个配置文件配置了当前连接数据库的信息,还有把这些生成的内容放在哪个包下,对哪个表生成-->
   <configuration>
      <!--${project.basedir}代表项目的根路径及项目名-->
      <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
      <verbose>true</verbose>
      <overwrite>true</overwrite>
   </configuration>
</plugin>

添加generator配置文件的DTD文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE generatorConfiguration SYSTEM "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN">

源码如下

<?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>
    <!--&lt;!&ndash;A.配置mysql驱动路径  &ndash;&gt;-->
    <!--<classPathEntry-->
            <!--location="E:\Program Files\apache-maven-3.6.1\prop\mysql\mysql-connector-java\5.1.25\mysql-connector-java-5.1.25.jar"/>-->
    <!-- B.配置信息 -->
    <context id="my" targetRuntime="MyBatis3">
        <!--1. value="true"去掉注释  ,如果不去掉注释的时候,
                第二次生成的时候不会再后面追加内容,但是去掉注释的时候,
                在第二次以后需要生成文件的时候先把它删掉,再生成,
                否则就会在原来的文件后面追加内容-->
        <commentGenerator>
            <!--是否去除自动生成的注解 true:是 : false :否-->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--2.加载连接数据库信息  -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test"
                        userId="root"
                        password="12345" />
        <!--默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为Integer
        NUMERIC 类型解析为java.math.BigDecimal-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!--3.生成POJO模型的包名和位置 -->
        <javaModelGenerator targetPackage="com.example.demo.pojo"
                            targetProject=".\src\main\java">
            <!--targetProject=  指定包所在的位置,只需要到src/man/java  -->
            <!--enableSubPackages:是否让schema作为包的后缀-->
            <property name="enableSubPackages" value="true"/>
            <!--从数据库返回的值被清理前后的空格-->
            <property name="trimStrings" value="true"/>
            <!--如果包不存在,创建一个  -->
        </javaModelGenerator>
        <!--4.生成映射文件包名和位置 mapper接口生成的位置 -->
        <sqlMapGenerator targetPackage="com.example.demo.mapper"
                         targetProject=".\src\main\java"><!-- 指定包的位置 -->
            <property name="enableSubPackages" value="true"/><!--如果包不存在创建一个  -->
        </sqlMapGenerator>
        <!--5.生成dao层的包和位置  -->
        <javaClientGenerator targetPackage="com.example.demo.mapper" type="XMLMAPPER"
                             targetProject=".\src\main\java">
            <!--enableSubPackages:是否让schema作为包的后缀-->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>
        <!--6. 我要生成的表  可以一次性生成多张表 tableName是表名   domainObjectName是实体名 -->
        <!--<table tableName="t_user" domainObjectName="User"-->
               <!--enableCountByExample="false" enableUpdateByExample="false"-->
               <!--enableDeleteByExample="false" enableSelectByExample="false"-->
               <!--enableInsert="false"/>-->
        <!--指定数据库表-->
        <table schema="" tableName="users"></table>
    </context>
</generatorConfiguration>

修改方法如下参考

修改好后点击Maven Project
选择对应的项目然后点击Plugins→mybatis-generator→mybatis→双击generator:generate,就会生成对应的文件夹即文件

图下标注红框的皆为自动生成

配置资源拷贝插件

  1. 添加资源拷贝插件坐标
  2. 修改启动类添加@MapperScan注解

在项目打包的过程中,maven只会将resources目录下的xml打包进目录里,而mybatis生成映射文件也是xml文件,但是却不在resources目录下,如果将项目打包是不会将该文件一同打包进去的。
如图

如果mybatis的映射配置文件没有放入打包的jar包当中,项目运行时是找不到这个文件,就无法跟接口进行绑定;
接口指的是这个:

所以需要配置一个资源拷贝插件
配置如下:
在POM文件中配置

<!--配置资源拷贝插件-->
<resources>
   <!--一个<resource>表示一个资源拷贝的位置-->
   <resource>
      <!--表示去src/main/java目录下拷贝所有子包(**)下的所有(*)xml后缀(.xml)的文件-->
      <directory>src/main/java</directory>
      <includes>
         <include>**/*.xml</include>
      </includes>
   </resource>
   <!--一旦自定义配置了resources标签进行资源拷贝,springboot的默认资源拷贝配置(resources)将会被覆盖,
   所有需要重复配置-->
   <resource>
      <directory>src/main/resources</directory>
      <includes>
         <include>**/*.yml</include>
         <include>**/*.properties</include>
         <include>**/*.xml</include>
      </includes>
   </resource>
</resources>

修改启动类添加@MapperScan注解

@SpringBootApplication
@MapperScan("com.example.demo.mapper")//指定扫描接口与映射配置文件的包名
public class DemoApplication {

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

Mybatis的其他配置项

映射配置文件是可以放到resources目录下的;当映射配置文件没有放到mapper中,而是放到resources时需要使用该配置,该配置就会去resources目录下找mapper目录下的所有xml文件做一个扫描

#扫描classpath目录下的映射配置文件,针对于映射配置文件放到了resources目录下
mybatis:
  mapper-locations: classpath:/mapper/*.xml

实体类起别名配置,作用于resulttype

  type-aliases-package: com.example.demo.pojo
posted @ 2020-08-28 12:57  lawrence林  阅读(145)  评论(0编辑  收藏  举报