• 手把手教你springboot集成mybatis


    手把手教你springboot集成mybatis

    很多小伙伴工作多年,但是在每次开始一个新项目的时候都要重新开始搭建项目。另一个就是新手小伙伴对于项目如何从零开始搭建的还存在疑问。在这片文章中,正好一次性解决这两个问题。

    这是该项目的github地址,大家可以点击下载使用,也欢迎大家start,谢谢。

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

    1. 创建springboot项目

    • 使用企业版idea创建

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

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

    2. 添加Maven依赖

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

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    3. <modelVersion>4.0.0modelVersion>
    4. <parent>
    5. <groupId>org.springframework.bootgroupId>
    6. <artifactId>spring-boot-starter-parentartifactId>
    7. <version>2.7.2version>
    8. <relativePath/>
    9. parent>
    10. <groupId>com.examplegroupId>
    11. <artifactId>demo1artifactId>
    12. <version>0.0.1-SNAPSHOTversion>
    13. <name>demo1name>
    14. <description>demo1description>
    15. <properties>
    16. <java.version>11java.version>
    17. properties>
    18. <dependencies>
    19. <dependency>
    20. <groupId>org.springframework.bootgroupId>
    21. <artifactId>spring-boot-starterartifactId>
    22. dependency>
    23. <dependency>
    24. <groupId>org.springframework.bootgroupId>
    25. <artifactId>spring-boot-starter-testartifactId>
    26. <scope>testscope>
    27. dependency>
    28. dependencies>
    29. <build>
    30. <plugins>
    31. <plugin>
    32. <groupId>org.springframework.bootgroupId>
    33. <artifactId>spring-boot-maven-pluginartifactId>
    34. plugin>
    35. plugins>
    36. build>
    37. project>
    38. 复制代码

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

    • 基本的Spring和Spring MVC功能

      1. <dependency>
      2. <groupId>org.springframework.bootgroupId>
      3. <artifactId>spring-boot-starter-webartifactId>
      4. dependency>
      5. 复制代码

      加上这个依赖后,可以使用spring和spring mvc的功能,比如@RestController,@Service,@Autowired,@RequestMapping等等,IOC和AOP的功能都可以使用。

    • 数据库引擎 mysql driver

      1. <dependency>
      2. <groupId>mysqlgroupId>
      3. <artifactId>mysql-connector-javaartifactId>
      4. <version>8.0.29version>
      5. dependency>
      6. 复制代码

      目前基本上使用的mysql都是8版本的,所以这里引入8版本的mysql driver;如果有需要引入其他数据库引擎的,可以到maven repository中找合适的依赖。

    • 数据库链接池

      1. <dependency>
      2. <groupId>com.alibabagroupId>
      3. <artifactId>druidartifactId>
      4. <version>1.2.11version>
      5. dependency>
      6. 复制代码

      一般像数据库链接这样的资源都是比较重的,也就是说,数据库链接创建和销毁需要消耗很多资源,并且数据库链接是经常使用的。那么对于这种情况,一般我们会将数据库链接进行池化,这也就是我们使用druid的原因。如果小伙伴想使用其他的池化工具,比如dbcp,c3p0,HikariCP等等,也是可以替换的。

    • mybatis依赖

      1. <dependency>
      2. <groupId>org.mybatis.spring.bootgroupId>
      3. <artifactId>mybatis-spring-boot-starterartifactId>
      4. <version>2.2.2version>
      5. dependency>
      6. 复制代码

      mybatis其实就是一个基于数据库driver实现数据增删查改功能,并且将操作结果更加友好传递给java应用层的工具。如果没有mybatis的话,我们也可以自己基于driver去操作数据库,但是使用体验确实不好,或者我们自己重新创造一个类似的mybatis框架。

    • 分页依赖

      1. <dependency>
      2. <groupId>com.github.pagehelpergroupId>
      3. <artifactId>pagehelper-spring-boot-starterartifactId>
      4. <version>1.4.3version>
      5. dependency>
      6. 复制代码

      在业务需求上,我们的某些列表功能往往需要对数据进行分页查询。所以我们提前把这个工具引入进来,它可以在我们执行查询操作的时候,对查询功能实现自动分页,无需开发者过多干预。

    • lombok工具

      1. <dependency>
      2. <groupId>org.projectlombokgroupId>
      3. <artifactId>lombokartifactId>
      4. <optional>trueoptional>
      5. dependency>
      6. 复制代码

      这个工具很有用,它让我们避免了写过多的get,set方法,可以自动生成构造函数,hashcode方法,equals方法等等,这就是典型的效率工具,所以强烈推荐使用。

    3. 添加插件

    • mybatis-generator插件

      1. <plugin>
      2. <groupId>org.mybatis.generatorgroupId>
      3. <artifactId>mybatis-generator-maven-pluginartifactId>
      4. <version>1.4.1version>
      5. <configuration>
      6. <verbose>trueverbose>
      7. <overwrite>trueoverwrite>
      8. <configurationFile>${basedir}/src/main/resources/mybatis/generator/generatorConfig.xml
      9. configuration>
      10. plugin>
      11. 复制代码

      这是一个代码生成工具,它可以帮我们生成大多数的mybatis代码,比如生成单表的增删查改功能,还有就是单表的复杂条件查询功能。所以这也是一个效率功能,可以少写很多代码。

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

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

    4. 配置项目

    我们配置了依赖和插件后,需要把一些对应的项目配置也写好,这样才能让这个项目正常运行起来。

    配置文件的话,我目前选择比较好用的yml格式的application.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. 复制代码

      此外,根据以上配置,我们还需要在resources创建mybatis文件夹,以便我们存放对应的mybatis-config.xml文件以及Mapper.xml文件;

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

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

    mybatis-config.xml:

    1. configuration PUBLIC
    2. "-//mybatis.org//DTD Config 3.0//EN"
    3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    4. <configuration>
    5. <settings>
    6. <setting name="cacheEnabled" value="true"/>
    7. <setting name="lazyLoadingEnabled" value="true"/>
    8. <setting name="multipleResultSetsEnabled" value="true"/>
    9. <setting name="useColumnLabel" value="true"/>
    10. <setting name="useGeneratedKeys" value="false"/>
    11. <setting name="defaultExecutorType" value="SIMPLE"/>
    12. <setting name="defaultStatementTimeout" value="60"/>
    13. <setting name="mapUnderscoreToCamelCase" value="true"/>
    14. settings>
    15. <plugins>
    16. <plugin interceptor="com.github.pagehelper.PageInterceptor" />
    17. plugins>
    18. configuration>
    19. 复制代码
    • mybatis-generator配置

      前面我们在添加mybatis-generator插件的时候就已经指定了相关配置文件的位置,那么我们就把generatorConfig.xml创建出来

    generatorConfig.xml:

    1. generatorConfiguration
    2. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    3. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    4. <generatorConfiguration>
    5. <properties resource="mybatis/generator/generator.properties"/>
    6. <classPathEntry location="${classPathEntry}" />
    7. <context id="mysql_tables" targetRuntime="MyBatis3">
    8. <commentGenerator>
    9. <property name="suppressAllComments" value="true" />
    10. <property name="suppressDate" value="true" />
    11. commentGenerator>
    12. <jdbcConnection driverClass="${driverClass}"
    13. connectionURL="${connectionURL}"
    14. userId="${userId}"
    15. password="${password}">
    16. jdbcConnection>
    17. <javaTypeResolver >
    18. <property name="forceBigDecimals" value="false" />
    19. javaTypeResolver>
    20. <javaModelGenerator targetPackage="${modelTargetPackage}" targetProject="src/main/java">
    21. <property name="enableSubPackages" value="true" />
    22. <property name="trimStrings" value="true" />
    23. javaModelGenerator>
    24. <sqlMapGenerator targetPackage="${sqlMapTargetPackage}" targetProject="src/main/resources">
    25. <property name="enableSubPackages" value="true" />
    26. sqlMapGenerator>
    27. <javaClientGenerator type="XMLMAPPER" targetPackage="${javaClientTargetPackage}" targetProject="src/main/java">
    28. <property name="enableSubPackages" value="true" />
    29. javaClientGenerator>
    30. <table schema="${schema}" tableName="${tableName}" domainObjectName="${domainObjectName}">
    31. table>
    32. context>
    33. generatorConfiguration>
    34. 复制代码

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

    通过引入generator.properties的方式,我们把里面一些需要修改的位置全部变量化了,所以我们还需要补充一个generator.properties文件:

    1. # 我们需要提供一个driver包所在的路径,一般在.m2文件夹里面,因为所有maven下载的依赖包都会放在这里;
    2. # 不知道.m2文件夹位置的可以找一下相关资料
    3. classPathEntry=~/.m2/repository/mysql/mysql-connector-java/8.0.29/mysql-connector-java-8.0.29.jar
    4. driverClass=com.mysql.cj.jdbc.Driver
    5. # 一定要改成自己的数据库ip、端口和名称
    6. connectionURL=jdbc:mysql://数据库ip:数据库端口/数据库名称?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=UTC
    7. # 一定要修改成自己的数据库用户名
    8. userId=数据库用户名
    9. # 一定要修改成自己的数据库密码
    10. password=数据库密码
    11. # 实体类所放的包名,根据自己的项目包名修改,记住要提前把包名创建好
    12. modelTargetPackage=com.example.awesomespring.dao.entity
    13. # Mapper.xml存放的路径,在resources里面,记住要提前创建好;要和application.yml里面的mapper-locations路径对上,两个配置的表达方式不同,这个里面不需要加classpath。
    14. sqlMapTargetPackage=mybatis/mapper
    15. # mapper类所放的包名,根据自己的项目包名修改,记住要提前把包名创建好
    16. javaClientTargetPackage=com.example.awesomespring.dao.mapper
    17. # 哪个数据库
    18. schema=awesome_spring
    19. # 哪个表
    20. tableName=account
    21. # 生成的实体类名称
    22. domainObjectName=Account
    23. 复制代码

    至此,我们就可以正常运行mybatis-generator插件了,现在我们打开maven视图,双击mybatis-generator插件:

    完成后,我们会发现项目中已经自动生成了对应的数据表实体类,Mapper接口,Mapper.xml等文件。

    另外还需要注意的是,因为我们生成的Mapper.xml是在resources里面,这些文件是需要在项目打包的时候一起打进去的,所以我们还需要配置一下pom.xml中的build操作,把自动生成的Mapper.xml打包进去:

    1. <resources>
    2. <resource>
    3. <directory>src/main/resourcesdirectory>
    4. <includes>
    5. <include>**/*.propertiesinclude>
    6. <include>**/*.ymlinclude>
    7. <include>**/*.xmlinclude>
    8. includes>
    9. <filtering>truefiltering>
    10. resource>
    11. resources>
    12. 复制代码

    最终,我们的项目基本配置完毕,最后一步,让springboot扫描所有的mybatis接口,我们需要在springboot启动类加上@MapperScan(basePackages = "mapper类所放的包名")注解;这样springboot就会把所有的Mapper接口全部扫描进去,达到我们在springboot中集成mybatis的目的了。

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

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

    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. # mybatis配置
    20. mybatis:
    21. check-config-location: true
    22. # mybatis框架配置文件,对mybatis的生命周期起作用
    23. config-location: "classpath:mybatis/mybatis-config.xml"
    24. # 配置xml路径
    25. mapper-locations: "classpath:mybatis/mapper/*Mapper.xml"
    26. # 配置model包路径
    27. type-aliases-package: "com.example.awesomespring.dao.entity.*"
    28. # 日志配置
    29. logging:
    30. pattern:
    31. # 日志输出格式
    32. console: "%d{yyyy-MM-dd HH:mm:ss} %clr(%5p) [%thread] %clr(%logger){cyan} : %msg%n"
    33. level:
    34. # trace < debug < info < warn < error < fatal
    35. # 全局日志级别
    36. root: info
    37. # 指定包日志级别
    38. com.example.awesomespring: warn
    39. 复制代码

    pom.xml

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    3. <modelVersion>4.0.0modelVersion>
    4. <parent>
    5. <groupId>org.springframework.bootgroupId>
    6. <artifactId>spring-boot-starter-parentartifactId>
    7. <version>2.7.2version>
    8. <relativePath/>
    9. parent>
    10. <groupId>com.examplegroupId>
    11. <artifactId>awesome-springartifactId>
    12. <version>0.0.1-SNAPSHOTversion>
    13. <name>awesome-springname>
    14. <description>awesome-springdescription>
    15. <properties>
    16. <java.version>11java.version>
    17. properties>
    18. <dependencies>
    19. <dependency>
    20. <groupId>org.springframework.bootgroupId>
    21. <artifactId>spring-boot-starter-webartifactId>
    22. dependency>
    23. <dependency>
    24. <groupId>org.projectlombokgroupId>
    25. <artifactId>lombokartifactId>
    26. <optional>trueoptional>
    27. dependency>
    28. <dependency>
    29. <groupId>org.mybatis.spring.bootgroupId>
    30. <artifactId>mybatis-spring-boot-starterartifactId>
    31. <version>2.2.2version>
    32. dependency>
    33. <dependency>
    34. <groupId>com.github.pagehelpergroupId>
    35. <artifactId>pagehelper-spring-boot-starterartifactId>
    36. <version>1.4.3version>
    37. dependency>
    38. <dependency>
    39. <groupId>mysqlgroupId>
    40. <artifactId>mysql-connector-javaartifactId>
    41. <version>8.0.29version>
    42. dependency>
    43. <dependency>
    44. <groupId>com.alibabagroupId>
    45. <artifactId>druidartifactId>
    46. <version>1.2.11version>
    47. dependency>
    48. <dependency>
    49. <groupId>org.springframework.bootgroupId>
    50. <artifactId>spring-boot-starter-testartifactId>
    51. <scope>testscope>
    52. dependency>
    53. dependencies>
    54. <build>
    55. <resources>
    56. <resource>
    57. <directory>src/main/resourcesdirectory>
    58. <includes>
    59. <include>**/*.propertiesinclude>
    60. <include>**/*.ymlinclude>
    61. <include>**/*.xmlinclude>
    62. includes>
    63. <filtering>truefiltering>
    64. resource>
    65. resources>
    66. <plugins>
    67. <plugin>
    68. <groupId>org.mybatis.generatorgroupId>
    69. <artifactId>mybatis-generator-maven-pluginartifactId>
    70. <version>1.4.1version>
    71. <configuration>
    72. <verbose>trueverbose>
    73. <overwrite>trueoverwrite>
    74. <configurationFile>${basedir}/src/main/resources/mybatis/generator/generatorConfig.xml
    75. configurationFile>
    76. configuration>
    77. plugin>
    78. <plugin>
    79. <groupId>org.springframework.bootgroupId>
    80. <artifactId>spring-boot-maven-pluginartifactId>
    81. <configuration>
    82. <excludes>
    83. <exclude>
    84. <groupId>org.projectlombokgroupId>
    85. <artifactId>lombokartifactId>
    86. exclude>
    87. excludes>
    88. configuration>
    89. plugin>
    90. plugins>
    91. build>
    92. project>


     

  • 相关阅读:
    A记录 CNAME记录是什么 | DNS 查询的过程 | DNS 根服务器是什么 | 配置域名 CNAME 原理
    ELK学习(一)
    idea无法识别加载pom.xml文件
    Docker镜像、容器、仓库及数据管理
    docker <容器数据卷 -v > -- 对容器内数据持久化(备份)
    Web前端小组考核总结
    chrome 相关设置
    java springboot在当前测试类中添加临时属性 不影响application和其他范围
    智能导诊系统:基于机器学习和自然语言处理技术,可快速推荐合适的科室和医生
    Salesforce-Visualforce-6.静态资源(Static Resources)
  • 原文地址:https://blog.csdn.net/Trouvailless/article/details/126315399