Advertisement

手把手教你springboot集成mybatis

阅读量:

手把手教你springboot集成mybatis

许多职场人士积累了一定的工作经验,在接手新的项目时,在项目的搭建上都需要投入时间和精力。但每当接手一个新的项目时,在项目的搭建上都需要投入时间和精力。另一个问题是新手在面对项目的初期阶段往往对如何从零开始进行系统性设计和构建感到困惑。针对这些问题,《深入解析》一文通过系统化的分析和详实的例子为读者提供了全面的解决方案。

这是一个项目的GitHub地址页面链接:github地址。欢迎访问并下载使用这个项目的所有资源。朋友们快来加入我们的开发团队吧!一起开始使用这项创新的技术解决方案。

首先,我们需要创建一个springboot项目。创建方式分为两种:

1. 创建springboot项目

  • 使用企业版idea创建

直接选择【Finish】完成。此时创建了一个空的springboot项目。

springboot官网创建

访问该平台的入口页面并输入您的用户名密码以完成注册

最终下载到一个zip文件,解压缩后通过idea导入

2. 添加Maven依赖

打开新生成的springboot项目,可以看到pom.xml里面只有少数几个依赖:

复制代码
 <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    
     <modelVersion>4.0.0</modelVersion>
    
     <parent>
    
     <groupId>org.springframework.boot</groupId>
    
     <artifactId>spring-boot-starter-parent</artifactId>
    
     <version>2.7.2</version>
    
     <relativePath/> <!-- lookup parent from repository -->
    
     </parent>
    
     <groupId>com.example</groupId>
    
     <artifactId>demo1</artifactId>
    
     <version>0.0.1-SNAPSHOT</version>
    
     <name>demo1</name>
    
     <description>demo1</description>
    
     <properties>
    
     <java.version>11</java.version>
    
     </properties>
    
     <dependencies>
    
     <dependency>
    
         <groupId>org.springframework.boot</groupId>
    
         <artifactId>spring-boot-starter</artifactId>
    
     </dependency>
    
  
    
     <dependency>
    
         <groupId>org.springframework.boot</groupId>
    
         <artifactId>spring-boot-starter-test</artifactId>
    
         <scope>test</scope>
    
     </dependency>
    
     </dependencies>
    
  
    
     <build>
    
     <plugins>
    
         <plugin>
    
             <groupId>org.springframework.boot</groupId>
    
             <artifactId>spring-boot-maven-plugin</artifactId>
    
         </plugin>
    
     </plugins>
    
     </build>
    
  
    
 </project>
    
  
    
 复制代码

为了让项目功能相对完善,我们需要补充以下依赖:

基本的Spring和Spring MVC功能

复制代码
        1. <!--   spring + spring mvc一套     -->

    
        2. <dependency>
    
        3.     <groupId>org.springframework.boot</groupId>
    
        4.     <artifactId>spring-boot-starter-web</artifactId>
    
        5. </dependency>
    
        6. 复制代码

安装了这个依赖项之后,默认情况下支持Spring及SpringMVC功能,并且例如\Controller, @Service, @Autowired, @RequestMapping等常见功能都可以正常运行的同时支持IoC(Inject-Object-Create)与AOP(Advice-Order-Presence)功能。

数据库引擎 mysql driver

复制代码
        1. <!--  【数据库】mysql driver  -->

    
        2. <dependency>
    
        3.     <groupId>mysql</groupId>
    
        4.     <artifactId>mysql-connector-java</artifactId>
    
        5.     <version>8.0.29</version>
    
        6. </dependency>
    
        7. 复制代码

目前主要使用的MySQL数据库大多基于8.0版本的基础上开发而成;因此建议优先选择并使用MySQL 8.0官方驱动;如果未来有更新需求或更换其他数据库引擎,则可以通过访问maven repository获取相应的依赖项以完成配置设置。

数据库链接池

复制代码
        1. <!--【数据库】数据库连接池-->

    
        2. <dependency>
    
        3.     <groupId>com.alibaba</groupId>
    
        4.     <artifactId>druid</artifactId>
    
        5.     <version>1.2.11</version>
    
        6. </dependency>
    
        7. 复制代码

大多数情况下,默认赋予数据库链接的资源量较大;这也意味着在创建和销毁这些连接时会占用大量资源;同时,在日常操作中频繁使用;因此我们通常采用资源池化的方式来解决这个问题;具体来说,默认情况下系统会自动管理一个数据库链接池;其主要原因在于druid能够有效地管理这个数据库链接池;对于那些希望尝试其他解决方案的情况(比如dbcp、c3p0、HikariCP等等),这也是可行的选择)。

mybatis依赖

复制代码
        1. <!--【数据库】持久层框架 mybatis-->

    
        2. <dependency>
    
        3.     <groupId>org.mybatis.spring.boot</groupId>
    
        4.     <artifactId>mybatis-spring-boot-starter</artifactId>
    
        5.     <version>2.2.2</version>
    
        6. </dependency>
    
        7. 复制代码

mybatis本质上就是一种通过使用数据库driver实现数据增删查改功能,并将操作结果以友好的方式传递给Java应用层的工具。如果完全不使用mybatis的话,我们仍然可以通过基于driver的方式进行数据库操作,但其用户体验较为欠缺;或者我们可以自行构建一个类似于mybatis的框架来完成类似功能。

分页依赖

复制代码
        1. <!--【数据库】分页插件-->

    
        2. <dependency>
    
        3.     <groupId>com.github.pagehelper</groupId>
    
        4.     <artifactId>pagehelper-spring-boot-starter</artifactId>
    
        5.     <version>1.4.3</version>
    
        6. </dependency>
    
        7. 复制代码

在业务场景方面,在线的一些列表功能通常会要求对大量数据进行分页展示以便于用户浏览查看。因此我们决定将这个工具预先集成进来,在执行查询操作时使该功能实现自动 pagination无需开发者进行过多的参数配置和干预工作。

lombok工具

复制代码
        1. <!--【工具】lombok -->

    
        2. <dependency>
    
        3.     <groupId>org.projectlombok</groupId>
    
        4.     <artifactId>lombok</artifactId>
    
        5.     <optional>true</optional>
    
        6. </dependency>
    
        7. 复制代码

该工具具有显著的功能优势,在软件开发中能显著提高效率与可维护性。通过减少冗余的方法提升代码质量与可读性,在自动化操作方面表现尤为出色:例如自动生成构造函数、哈希码计算以及等式比较所需的代码片段等关键功能部分。这类工具通常具有显著的优势,并且能够帮助开发者集中精力解决核心业务问题而非重复性工作。”

3. 添加插件

mybatis-generator插件

复制代码
        1. <!--     mybatis-generator maven插件,用于生成DAO代码       -->

    
        2. <plugin>
    
        3.     <groupId>org.mybatis.generator</groupId>
    
        4.     <artifactId>mybatis-generator-maven-plugin</artifactId>
    
        5.     <version>1.4.1</version>
    
        6.     <configuration>
    
        7.         <verbose>true</verbose>
    
        8.         <overwrite>true</overwrite>
    
        9.       <!-- mybatis-generator配置文件路径 --><configurationFile>${basedir}/src/main/resources/mybatis/generator/generatorConfig.xml
    
        10.     </configuration>
    
        11. </plugin>
    
        12. 复制代码

它是一个能够自动生成大量MySQLite代码的应用程序。它能够自动生成大部分MySQLite代码,例如支持单表的基本增删查改操作以及复杂的条件查询功能.这也体现了其高效的特性.

插件添加完成后,可以在maven视图中可以看到mybatis-generator插件:

但是这个插件还不能正常运行,需要后面我们配置好后才行。

4. 配置项目

在安装相关组件之后,请做好所有对应部分的详细编写工作。为了确保整个系统能够顺利运行,请完成所有必要的设置与调试工作。这有助于实现系统的稳定性和可靠性

在配置文件方面, 我现在倾向于使用yml格式的应用程序配置文件, 这种方式具有较高的可读性和维护性. 如果有兴趣的话,默认情况下项目中有一个名为application.properties的配置文件, 你可以将其命名为application.yml以提高可读性.

数据库配置

复制代码
        1. spring:

    
        2.   # 数据库链接配置
    
        3.   datasource:
    
        4.     url: jdbc:mysql://数据库ip:数据库端口/数据库名称?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=UTC
    
        5.     driver-class-name: com.mysql.cj.jdbc.Driver
    
        6.     username: 数据库用户名
    
        7.     password: 数据库密码
    
        8.     # 链接池
    
        9.     type: com.alibaba.druid.pool.DruidDataSource
    
        10.     druid:
    
        11.       # 链接池初始化大小
    
        12.       initial-size: 8
    
        13.       # 最大活跃数
    
        14.       max-active: 16
    
        15.       # 最小空闲数
    
        16.       min-idle: 1
    
        17.       # 最大等待时间
    
        18.       max-wait: 60000
    
        19. 复制代码

在博客中不便对外公开提供详细的数据库配置参数(如IP地址、端口号等),因此我们采用中文编码的方式进行表示。小伙伴们可以通过对自身数据库配置的分析来完成相应的修改。

在配置完成后, 我们的项目就可以实现正确的数据库连接, 并且我们已成功实施了链接池化机制.

mybatis配置

复制代码
        1. # mybatis配置

    
        2. mybatis:
    
        3.   check-config-location: true
    
        4.   #  mybatis框架配置文件,对mybatis的生命周期起作用
    
        5.   config-location: "classpath:mybatis/mybatis-config.xml"
    
        6.   #  配置xml路径
    
        7.   mapper-locations: "classpath:mybatis/mapper/*Mapper.xml"
    
        8.   #  配置model包路径
    
        9.   type-aliases-package: "com.example.awesomespring.dao.entity.*"
    
        10. 复制代码

此外,在配置完成后,我们需要在resourcemap中建立一个mybatis目录结构。

mybatis-config.xml文件是用来配置mybatis框架如何运行的配置;

Mapper.xml文档是由mybatis-generator插件后续自动生成的操作数据库配置文件。

mybatis-config.xml:

复制代码
 <?xml version="1.0" encoding="UTF-8" ?>

    
 <!DOCTYPE configuration PUBLIC
    
     "-//mybatis.org//DTD Config 3.0//EN"
    
     "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
 <configuration>
    
     <settings>
    
     <!-- 全局的映射器启用或禁用缓存。 -->
    
     <setting name="cacheEnabled" value="true"/>
    
     <!-- 全局启用或禁用延迟加载 -->
    
     <setting name="lazyLoadingEnabled" value="true"/>
    
     <!-- 允许或不允许多种结果集从一个单独的语句中返回 -->
    
     <setting name="multipleResultSetsEnabled" value="true"/>
    
     <!-- 使用列标签代替列名 -->
    
     <setting name="useColumnLabel" value="true"/>
    
     <!-- 允许JDBC支持生成的键 -->
    
     <setting name="useGeneratedKeys" value="false"/>
    
     <!-- 配置默认的执行器 -->
    
     <setting name="defaultExecutorType" value="SIMPLE"/>
    
     <!-- 设置超时时间 -->
    
     <setting name="defaultStatementTimeout" value="60"/>
    
     <!-- 设置驼峰标识 -->
    
     <setting name="mapUnderscoreToCamelCase" value="true"/>
    
     </settings>
    
     <plugins>
    
     <!-- 分页插件 -->
    
     <plugin interceptor="com.github.pagehelper.PageInterceptor" />
    
     </plugins>
    
 </configuration>
    
 复制代码

mybatis-generator配置

在之前的过程中,在我们添加mybatis-generator插件时已经配置好了相关配置文件的位置。因此我们需要将generatorConfig.xml文件进行创建操作。

generatorConfig.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>
    
     <!--参数配置-->
    
     <properties resource="mybatis/generator/generator.properties"/>
    
     <!-- 配置mysql 驱动jar包路径.用了绝对路径 -->
    
     <classPathEntry location="${classPathEntry}" />
    
  
    
     <context id="mysql_tables" targetRuntime="MyBatis3">
    
     <!-- 防止生成的代码中有很多注释,加入下面的配置控制 -->
    
     <commentGenerator>
    
         <property name="suppressAllComments" value="true" />
    
         <property name="suppressDate" value="true" />
    
     </commentGenerator>
    
  
    
     <!-- 数据库连接 -->
    
     <jdbcConnection driverClass="${driverClass}"
    
                     connectionURL="${connectionURL}"
    
                     userId="${userId}"
    
                     password="${password}">
    
     </jdbcConnection>
    
  
    
     <javaTypeResolver >
    
         <property name="forceBigDecimals" value="false" />
    
     </javaTypeResolver>
    
  
    
     <!-- 数据表对应的model层  -->
    
     <javaModelGenerator targetPackage="${modelTargetPackage}" targetProject="src/main/java">
    
         <property name="enableSubPackages" value="true" />
    
         <property name="trimStrings" value="true" />
    
     </javaModelGenerator>
    
  
    
     <!-- sql mapper 映射配置文件 -->
    
     <sqlMapGenerator targetPackage="${sqlMapTargetPackage}"  targetProject="src/main/resources">
    
         <property name="enableSubPackages" value="true" />
    
     </sqlMapGenerator>
    
  
    
     <!-- mybatis3中的mapper接口 -->
    
     <javaClientGenerator type="XMLMAPPER" targetPackage="${javaClientTargetPackage}"  targetProject="src/main/java">
    
         <property name="enableSubPackages" value="true" />
    
     </javaClientGenerator>
    
  
    
     <!-- 数据表进行生成操作 schema:相当于库名; tableName:表名; domainObjectName:对应的DO -->
    
     <table schema="${schema}" tableName="${tableName}" domainObjectName="${domainObjectName}">
    
     </table>
    
  
    
     </context>
    
 </generatorConfiguration>
    
 复制代码

这个文件头如果有报红,没有关系,不用管,不影响功能。

基于generator.properties的配置方式下,在此基础之上对内部需要调整的位置实施全量参数化处理后,则必须补充另一个generator.properties文件

复制代码
 # 我们需要提供一个driver包所在的路径,一般在.m2文件夹里面,因为所有maven下载的依赖包都会放在这里;

    
 # 不知道.m2文件夹位置的可以找一下相关资料
    
 classPathEntry=~/.m2/repository/mysql/mysql-connector-java/8.0.29/mysql-connector-java-8.0.29.jar
    
 driverClass=com.mysql.cj.jdbc.Driver
    
 # 一定要改成自己的数据库ip、端口和名称
    
 connectionURL=jdbc:mysql://数据库ip:数据库端口/数据库名称?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=UTC
    
 # 一定要修改成自己的数据库用户名
    
 userId=数据库用户名
    
 # 一定要修改成自己的数据库密码
    
 password=数据库密码
    
 # 实体类所放的包名,根据自己的项目包名修改,记住要提前把包名创建好
    
 modelTargetPackage=com.example.awesomespring.dao.entity
    
 # Mapper.xml存放的路径,在resources里面,记住要提前创建好;要和application.yml里面的mapper-locations路径对上,两个配置的表达方式不同,这个里面不需要加classpath。
    
 sqlMapTargetPackage=mybatis/mapper
    
 # mapper类所放的包名,根据自己的项目包名修改,记住要提前把包名创建好
    
 javaClientTargetPackage=com.example.awesomespring.dao.mapper
    
 # 哪个数据库
    
 schema=awesome_spring
    
 # 哪个表
    
 tableName=account
    
 # 生成的实体类名称
    
 domainObjectName=Account
    
 复制代码

在此时此刻

完成之后,我们可能会认识到项目中已自动生成了对应的数据表实体类,映射接口以及Mapper.xml等文件

另外需要注意的是,在我们生成的Mapper.xml位于resourc文件夹内时,这些文件必须在项目打包过程中一并放入,因此我们需要对pom.xml中的构建过程进行相应的设置,以便能够整合自动生成的Mapper.xml进项目打包流程中

复制代码
 <!--需要打包的资源-->

    
 <resources>
    
     <resource>
    
     <directory>src/main/resources</directory>
    
     <includes>
    
         <include>**/*.properties</include>
    
         <include>**/*.yml</include>
    
         <include>**/*.xml</include>
    
     </includes>
    
     <filtering>true</filtering>
    
     </resource>
    
 </resources>
    
 复制代码

项目的配置已基本完成;最后一项任务是让Spring Boot扫描所有MyBatis接口,并在Spring Boot启动类中添加@MapperScan(basePackages = "mapper类所放的包名")注解;这样Spring Boot将识别并整合所有相关的Mapper接口,并实现我们在Spring Boot环境中集成MyBatis的目标。

全部配置完毕后,我们就可以写代码开始一天的crud了,哈哈!

最后,把application.yml和pom.xml展示出来:

application.yml:

复制代码
 spring:

    
   # 数据库链接配置
    
   datasource:
    
     url: jdbc:mysql://数据库ip:数据库端口/数据库名称?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=UTC
    
     driver-class-name: com.mysql.cj.jdbc.Driver
    
     username: 数据库用户名
    
     password: 数据库密码
    
     # 链接池
    
     type: com.alibaba.druid.pool.DruidDataSource
    
     druid:
    
       # 链接池初始化大小
    
       initial-size: 8
    
       # 最大活跃数
    
       max-active: 16
    
       # 最小空闲数
    
       min-idle: 1
    
       # 最大等待时间
    
       max-wait: 60000
    
 # mybatis配置
    
 mybatis:
    
   check-config-location: true
    
   #  mybatis框架配置文件,对mybatis的生命周期起作用
    
   config-location: "classpath:mybatis/mybatis-config.xml"
    
   #  配置xml路径
    
   mapper-locations: "classpath:mybatis/mapper/*Mapper.xml"
    
   #  配置model包路径
    
   type-aliases-package: "com.example.awesomespring.dao.entity.*"
    
  
    
 # 日志配置
    
 logging:
    
   pattern:
    
     # 日志输出格式
    
     console: "%d{yyyy-MM-dd HH:mm:ss} %clr(%5p) [%thread] %clr(%logger){cyan} : %msg%n"
    
   level:
    
     #    trace < debug < info < warn < error < fatal
    
     # 全局日志级别
    
     root: info
    
     # 指定包日志级别
    
     com.example.awesomespring: warn
    
 复制代码

pom.xml

复制代码
 <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    
     <modelVersion>4.0.0</modelVersion>
    
     <parent>
    
     <groupId>org.springframework.boot</groupId>
    
     <artifactId>spring-boot-starter-parent</artifactId>
    
     <version>2.7.2</version>
    
     <relativePath/> <!-- lookup parent from repository -->
    
     </parent>
    
     <groupId>com.example</groupId>
    
     <artifactId>awesome-spring</artifactId>
    
     <version>0.0.1-SNAPSHOT</version>
    
     <name>awesome-spring</name>
    
     <description>awesome-spring</description>
    
     <properties>
    
     <java.version>11</java.version>
    
     </properties>
    
     <dependencies>
    
     <!--   spring + spring mvc一套     -->
    
     <dependency>
    
         <groupId>org.springframework.boot</groupId>
    
         <artifactId>spring-boot-starter-web</artifactId>
    
     </dependency>
    
     <!--【工具】lombok -->
    
     <dependency>
    
         <groupId>org.projectlombok</groupId>
    
         <artifactId>lombok</artifactId>
    
         <optional>true</optional>
    
     </dependency>
    
     <!--【数据库】DAO框架 mybatis-->
    
     <dependency>
    
         <groupId>org.mybatis.spring.boot</groupId>
    
         <artifactId>mybatis-spring-boot-starter</artifactId>
    
         <version>2.2.2</version>
    
     </dependency>
    
     <!--【数据库】DAO框架分页插件-->
    
     <dependency>
    
         <groupId>com.github.pagehelper</groupId>
    
         <artifactId>pagehelper-spring-boot-starter</artifactId>
    
         <version>1.4.3</version>
    
     </dependency>
    
     <!--  【数据库】mysql driver  -->
    
     <dependency>
    
         <groupId>mysql</groupId>
    
         <artifactId>mysql-connector-java</artifactId>
    
         <version>8.0.29</version>
    
     </dependency>
    
     <!--【数据库】数据库连接池-->
    
     <dependency>
    
         <groupId>com.alibaba</groupId>
    
         <artifactId>druid</artifactId>
    
         <version>1.2.11</version>
    
     </dependency>
    
     <!--测试-->
    
     <dependency>
    
         <groupId>org.springframework.boot</groupId>
    
         <artifactId>spring-boot-starter-test</artifactId>
    
         <scope>test</scope>
    
     </dependency>
    
     </dependencies>
    
  
    
     <build>
    
     <!--需要打包的资源-->
    
     <resources>
    
         <resource>
    
             <directory>src/main/resources</directory>
    
             <includes>
    
                 <include>**/*.properties</include>
    
                 <include>**/*.yml</include>
    
                 <include>**/*.xml</include>
    
             </includes>
    
             <filtering>true</filtering>
    
         </resource>
    
     </resources>
    
     <plugins>
    
         <!--     mybatis-generator maven插件,用于生成DAO代码       -->
    
         <plugin>
    
             <groupId>org.mybatis.generator</groupId>
    
             <artifactId>mybatis-generator-maven-plugin</artifactId>
    
             <version>1.4.1</version>
    
             <configuration>
    
                 <verbose>true</verbose>
    
                 <overwrite>true</overwrite>
    
                 <configurationFile>${basedir}/src/main/resources/mybatis/generator/generatorConfig.xml
    
                 </configurationFile>
    
             </configuration>
    
         </plugin>
    
         <!--     maven编译插件       -->
    
         <plugin>
    
             <groupId>org.springframework.boot</groupId>
    
             <artifactId>spring-boot-maven-plugin</artifactId>
    
             <configuration>
    
                 <excludes>
    
                     <exclude>
    
                         <groupId>org.projectlombok</groupId>
    
                         <artifactId>lombok</artifactId>
    
                     </exclude>
    
                 </excludes>
    
             </configuration>
    
         </plugin>
    
     </plugins>
    
     </build>
    
 </project>

全部评论 (0)

还没有任何评论哟~