手把手教你springboot集成mybatis
wptr33 2024-12-15 17:12 18 浏览
手把手教你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
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关推荐
- 在python中用于处理用户界面的方法除了Tkinter外还有哪几种?
-
Python是一种通用编程语言,它本身不直接提供UI(用户界面)功能,也就是说,如果你只安装了python,那恐怕只能用命令行来运行命令,那谁受得了啊。要知道linux就是因为用户界面不够强大,...
- 【AI大模型】:结合wxauto实现智能微信聊天机器人
-
文章目录...
- wxPython - 布局管理简介及绝对位置布局
-
实战wxPython系列-009一个典型的GUI程序的窗口界面中,一般是由各种控件(或者部件)组成,这些部件一般都会按一定的布局呈现在窗口中。布局方式可以分为绝对定位布局和相对定位布局,绝对定位布局中...
- wxpython入门第五步(组件)(wxpython控件大全)
-
Widgets在本节中,我们将介绍wxPython中的基本widgets。每个组件都会有一个小的代码示例。wxPython中有很多不同的组件,包括按钮、复选框、滑块和列表框。wx.Buttonwx....
- python+kivy实现极致的跨平台跨终端开发体验
-
这几天查找python资料的时候,偶然发现了一个专为python打造的gui框架:kivy。这是一个很优秀的,基于python的GUI框架。可以利用Python快速编程的特点,快速编写应用程序。它可以...
- Python GUI库大盘点,9款热门框架供您选择!
-
GUI(图形用户界面,GraphicalUserInterface)是一种允许用户通过图形元素(如图标、按钮、窗口等)与电子设备进行交互的用户界面。...
- 第10天 | 25天学会wxPython,事件处理
-
事件,就是程序在运行中发生的事儿,桌面应用软件都是事件驱动的。事件可以是用户的操作,如鼠标点击或按键按下,也可以由系统产生,如定时关机。事件会触发相应的行为,即事件函数。...
- 从零开始搭建HTTPS服务(如何搭建http服务)
-
搭建HTTPS服务的最初目的是为了开发微信小程序,因为wx.request只允许发起HTTPS请求,并且还必须和指定的域名进行网络通信。要从零开始搭建一个HTTPS的服务需要下面4...
- 如何将AI助手接入微信(打开ai手机助手)
-
Dify平台搭建好后就可以创建各种应用,如聊天助手、文本生成、Agent、工作流等,那这些AI助手我们能不能分享给朋友使用,如接入微信、企微等?工具介绍DifyOnWeCha...
- python gui编程框架推荐以及介绍(python开发框架)
-
Python的GUI编程框架有很多,这里为您推荐几个常用且功能强大的框架:Tkinter:Tkinter是Python的标准GUI库,它是Python内置的模块,无需额外安装。它使用简单,功能较为基础...
- Python 程序发送微信(python程序如何发布)
-
在一些日常办公场景中,需要定时自动通知指定账户的微信信息及文件,如果账户很多,可能存在遗漏的情况,借助于以下的Python程序,则可以满足要求。运行时,需保证本地微信已安装并处于登录状态。#se...
- 美化Python GUI界面!让你的窗口拥有Win11般的质感 | pywinstyles
-
1.PythonGUI外观个性化的福音在使用Python开发GUI时,我们经常会使用如Tkinter、PyQt等常见的库,然而这些库的默认界面总显得有些...普通。而如果你想让你的PythonG...
- 推荐10款Python图形界面(GUI)框架
-
图形用户界面(GUI)是用户打开应用程序或网站时的第一印象,这通常包括图标、按钮、图形、显示文本等多种视觉元素,是用户体验的重要组成部分。Python就有大量用于开发GUI的框架,下面给大家介绍10个...
- 开发图形界面Tkinter、wxPython、PyQt、PySide选哪一个?
-
学习Python,就不得不提一下Python的图形界面开发,如果只用命令行写程序,用户体验不太好,难以胜任复杂的人机交互场景。Python的图形界面开发库常用的有:Tkinter、wxPython...
- 利用Python开发App实战(如何用python开发app)
-
我很早之前就想开发一款app玩玩,无奈对java不够熟悉,之前也没有开发app的经验,因此一直耽搁了。最近想到尝试用python开发一款app,google搜索了一番后,发现确实有路可寻,目前也有了一...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
面试官:git pull是哪两个指令的组合?
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git 执行pull错误如何撤销 git pull fail
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mysql max (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)