手把手教你springboot集成mybatis
wptr33 2024-12-15 17:12 41 浏览
手把手教你springboot集成mybatis
很多小伙伴工作多年,但是在每次开始一个新项目的时候都要重新开始搭建项目。另一个就是新手小伙伴对于项目如何从零开始搭建的还存在疑问。在这片文章中,正好一次性解决这两个问题。
这是该项目的github地址,大家可以点击下载使用,也欢迎大家start,谢谢。
首先,我们需要创建一个springboot项目。创建方式分为两种:
1. 创建springboot项目
- 使用企业版idea创建
直接选择【Finish】完成。此时创建了一个空的springboot项目。
- 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功能
- <!-- spring + spring mvc一套 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 复制代码
- 加上这个依赖后,可以使用spring和spring mvc的功能,比如@RestController,@Service,@Autowired,@RequestMapping等等,IOC和AOP的功能都可以使用。
- 数据库引擎 mysql driver
- <!-- 【数据库】mysql driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29</version> </dependency> 复制代码
- 目前基本上使用的mysql都是8版本的,所以这里引入8版本的mysql driver;如果有需要引入其他数据库引擎的,可以到maven repository中找合适的依赖。
- 数据库链接池
- <!--【数据库】数据库连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.11</version> </dependency> 复制代码
- 一般像数据库链接这样的资源都是比较重的,也就是说,数据库链接创建和销毁需要消耗很多资源,并且数据库链接是经常使用的。那么对于这种情况,一般我们会将数据库链接进行池化,这也就是我们使用druid的原因。如果小伙伴想使用其他的池化工具,比如dbcp,c3p0,HikariCP等等,也是可以替换的。
- mybatis依赖
- <!--【数据库】持久层框架 mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> 复制代码
- mybatis其实就是一个基于数据库driver实现数据增删查改功能,并且将操作结果更加友好传递给java应用层的工具。如果没有mybatis的话,我们也可以自己基于driver去操作数据库,但是使用体验确实不好,或者我们自己重新创造一个类似的mybatis框架。
- 分页依赖
- <!--【数据库】分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.3</version> </dependency> 复制代码
- 在业务需求上,我们的某些列表功能往往需要对数据进行分页查询。所以我们提前把这个工具引入进来,它可以在我们执行查询操作的时候,对查询功能实现自动分页,无需开发者过多干预。
- lombok工具
- <!--【工具】lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> 复制代码
- 这个工具很有用,它让我们避免了写过多的get,set方法,可以自动生成构造函数,hashcode方法,equals方法等等,这就是典型的效率工具,所以强烈推荐使用。
3. 添加插件
- mybatis-generator插件
- <!-- 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> <!-- mybatis-generator配置文件路径 --><configurationFile>${basedir}/src/main/resources/mybatis/generator/generatorConfig.xml </configuration> </plugin> 复制代码
- 这是一个代码生成工具,它可以帮我们生成大多数的mybatis代码,比如生成单表的增删查改功能,还有就是单表的复杂条件查询功能。所以这也是一个效率功能,可以少写很多代码。
- 插件添加完成后,可以在maven视图中可以看到mybatis-generator插件:
但是这个插件还不能正常运行,需要后面我们配置好后才行。
4. 配置项目
我们配置了依赖和插件后,需要把一些对应的项目配置也写好,这样才能让这个项目正常运行起来。
配置文件的话,我目前选择比较好用的yml格式的application.yml,小伙伴们也可以把项目中的application.properties重命名一下,改成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 复制代码
- 博客中不方便对外透露我自己的数据库相关ip、端口等数据,所以就用中文替代,小伙伴可以根据自己的数据库的配置作出对应的修改。
- 配置完毕后,我们的项目就可以正确链接数据库,并且也已经使用了链接池化的功能了。
- mybatis配置
- # 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.*" 复制代码
- 此外,根据以上配置,我们还需要在resources创建mybatis文件夹,以便我们存放对应的mybatis-config.xml文件以及Mapper.xml文件;
- 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
复制代码
至此,我们就可以正常运行mybatis-generator插件了,现在我们打开maven视图,双击mybatis-generator插件:
完成后,我们会发现项目中已经自动生成了对应的数据表实体类,Mapper接口,Mapper.xml等文件。
另外还需要注意的是,因为我们生成的Mapper.xml是在resources里面,这些文件是需要在项目打包的时候一起打进去的,所以我们还需要配置一下pom.xml中的build操作,把自动生成的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>
复制代码
最终,我们的项目基本配置完毕,最后一步,让springboot扫描所有的mybatis接口,我们需要在springboot启动类加上@MapperScan(basePackages = "mapper类所放的包名")注解;这样springboot就会把所有的Mapper接口全部扫描进去,达到我们在springboot中集成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>
作者:梦想实现家_Z
链接:https://juejin.cn/post/7124971051024384008
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关推荐
- [常用工具] git基础学习笔记_git工具有哪些
-
添加推送信息,-m=messagegitcommit-m“添加注释”查看状态...
- centos7安装部署gitlab_centos7安装git服务器
-
一、Gitlab介1.1gitlab信息GitLab是利用RubyonRails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。...
- 太高效了!玩了这么久的Linux,居然不知道这7个终端快捷键
-
作为Linux用户,大家肯定在Linux终端下敲过无数的命令。有的命令很短,比如:ls、cd、pwd之类,这种命令大家毫无压力。但是,有些命令就比较长了,比如:...
- 提高开发速度还能保证质量的10个小窍门
-
养成坏习惯真是分分钟的事儿,而养成好习惯却很难。我发现,把那些对我有用的习惯写下来,能让我坚持住已经花心思养成的好习惯。...
- 版本管理最好用的工具,你懂多少?
-
版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。...
- Git回退到某个版本_git回退到某个版本详细步骤
-
在开发过程,有时会遇到合并代码或者合并主分支代码导致自己分支代码冲突等问题,这时我们需要回退到某个commit_id版本1,查看所有历史版本,获取git的某个历史版本id...
- Kubernetes + Jenkins + Harbor 全景实战手册
-
Kubernetes+Jenkins+Harbor全景实战手册在现代企业级DevOps体系中,Kubernetes(K8s)、Jenkins和Harbor组成的CI/CD流水...
- git常用命令整理_git常见命令
-
一、Git仓库完整迁移完整迁移,就是指,不仅将所有代码移植到新的仓库,而且要保留所有的commit记录1.随便找个文件夹,从原地址克隆一份裸版本库...
- 第三章:Git分支管理(多人协作基础)
-
3.1分支基本概念分支是Git最强大的功能之一,它允许你在主线之外创建独立的开发线路,互不干扰。理解分支的工作原理是掌握Git的关键。核心概念:HEAD:指向当前分支的指针...
- 云效Codeup怎么创建分支并进行分支管理
-
云效Codeup怎么创建分支并进行分支管理,分支是为了将修改记录分叉备份保存,不受其他分支的影响,所以在同一个代码库里可以同时进行多个修改。创建仓库时,会自动创建Master分支作为默认分支,后续...
- git 如何删除本地和远程分支?_git怎么删除远程仓库
-
Git分支对于开发人员来说是一项强大的功能,但要维护干净的存储库,就需要知道如何删除过时的分支。本指南涵盖了您需要了解的有关本地和远程删除Git分支的所有信息。了解Git分支...
- git 实现一份代码push到两个git地址上
-
一直以来想把自己的博客代码托管到github和coding上想一次更改一次push两个地址一起更新今天有空查资料实践了下本博客的github地址coding的git地址如果是Gi...
- git操作:cherry-pick和rebase_git cherry-pick bad object
-
在编码中经常涉及到分支之间的代码同步问题,那就需要cherry-pick和rebase命令问题:如何将某个分支的多个commit合并到另一个分支,并在另一个分支只保留一个commit记录解答:假设有两...
- 模型文件硬塞进 Git,GitHub 直接打回原形:使用Git-LFS管理大文件
-
前言最近接手了一个计算机视觉项目代码是屎山就不说了,反正我也不看代码主要就是构建一下docker镜像,测试一下部署的兼容性这本来不难但是,国内服务器的网络环境实在是恶劣,需要配置各种镜像(dock...
- 防弹少年团田柾国《Euphoria》2周年 获世界实时趋势榜1位 恭喜呀
-
当天韩国时间凌晨3时左右,该曲在Twitter上以“2YearsWithEuphoria”的HashTag登上了世界趋势1位。在韩国推特实时趋势中,从上午开始到现在“Euphoria2岁”的Has...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
程序员的开源月刊《HelloGitHub》第 71 期
-
详细介绍一下Redis的Watch机制,可以利用Watch机制来做什么?
-
假如有100W个用户抢一张票,除了负载均衡办法,怎么支持高并发?
-
Java面试必考问题:什么是乐观锁与悲观锁
-
如何将AI助手接入微信(打开ai手机助手)
-
SparkSQL——DataFrame的创建与使用
-
redission YYDS spring boot redission 使用
-
一文带你了解Redis与Memcached? redis与memcached的区别
-
如何利用Redis进行事务处理呢? 如何利用redis进行事务处理呢英文
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)