springboot 3 下连接 mysql 数据库以及整合 mybatis-plus

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在 Springboot 3.x版本下整合 mysql 以及mybatis-plus,并进行简单测试,解决实现过程中所遇到的常见 Bug。

👏 Hi! 我是 Yumuing,一个技术的敲钟人

👨‍💻 每天分享技术文章,永远做技术的朝拜者

📚 欢迎关注我的博客:Yumuing's blog

测试示例

在 Springboot 3.x版本下整合 mysql 以及mybatis-plus,并进行简单测试,解决实现过程中所遇到的常见 Bug。

引入依赖

<!-- 数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
<!-- mybatis-plus 3.5.3 才支持 spring boot 3-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3</version>
</dependency>

配置 application.yml

# mysql 配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/community?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
    username: root
    password: yumuing
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      maximum-pool-size: 15
      minimum-idle: 5
      idle-timeout: 30000
# mybatis-plus 配置

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
    auto-mapping-behavior: full
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    use-generated-keys: true
  mapper-locations: classpath*:mapper/**/*Mapper.xml
  type-aliases-package: top.yumuing.community.entity

创建 MySQL 数据库

创建 community 数据库,运行以下 SQL 代码完成数据表创建:

INSERT INTO user (id, name, email) VALUES
(1, 'Jone', 'test1@baomidou.com'),
(2, 'Jack','test2@baomidou.com'),
(3, 'Tom','test3@baomidou.com'),
(4, 'Sandy', 'test4@baomidou.com'),
(5, 'Billie','test5@baomidou.com');

Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0
mysql> DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int DEFAULT NULL,
  `name` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `age` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

测试 MySQL 连接

@Resource
DataSource dataSource;

@Test
void contextLoadsOne() throws Exception{
   
    System.out.println("获取的数据库连接为:"+dataSource.getConnection());
}

控制台输出以下内容即为 MySQL 连接配置成功:

获取的数据库连接为:HikariProxyConnection@54056059 wrapping com.mysql.cj.jdbc.ConnectionImpl@5611bba

测试整合 Mybatis-plus 简单配置

@Resource
private UserMapper userMapper;

@Test
void contextLoadsTwo() {
   
    List<User> list = userMapper.selectList(null);
    list.forEach(item-> System.out.println(item));
}

控制台输出以下内容即为配置 Mybatis-plus 成功

User(id=1, name=张三, age=20)
User(id=2, name=李四, age=22)
User(id=3, name=王五, age=30)

当然,我们也可以使用 MybatisX 插件对 mapper.class、mapper.xml、service.class、serviceImpl.class 进行生成,步骤如下:

MybatisX使用

并且,我们也能够使用 MybatisX 插件实现 xml 文件中,mapper 对应的 SQL 代码,在 mapper.class 中写出想要在 xml 中生成代码的方法名,一定要以 select、insert、update等等进行开头,之后就会有对应提示,选中即可,完成后,往前几格子,方法名变红,选择报错点右键选中以下内容即可生成相关代码:

屏幕截图_20230208_000238

xml 文件中 selectAllByIdOrderByAge 生成代码如下:

<sql id="Base_Column_List">
    id,name,age
</sql>
<select id="selectAllByIdOrderByAge" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List"/>
    from user
    where
    id = #{id,jdbcType=NUMERIC}
    order by age
</select>

测试代码如下:

@Test
void cotextLoadsFour(){
   
    List<User> users = userMapper.selectAllByIdOrderByAge(3);
    users.forEach(item-> System.out.println(item));
}

Bug 总结

Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

springboot 3版本整合 mybatis 3.0.5版本控制台报错 Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required,NestedIOException 这个类在 Spring 6 版本中直接删除了。对的,直接删除了。而 MyBatis 老版本还没有同步更新,所以直接就报红了。而整合 mybatis 的 mybatis-plus 自然也会报红。

2022 年 11 月26 日凌晨,mybatis-spring-boot 正式发布 3.0.0 版本,完全支持 Spring Boot 3 了。mybatis-plus 也在 2022.12.28 的 3.5.3 支持了 Spring Boot 3 。最好解决办法就是升级版本。

Could not autowire. No beans of ‘DataSource’ type found

  1. 检查项目结构,主启动类位置是否正确
  2. 把自动装配@Autowired换成@Resource

Driver com.mysql.jdbc.Driver claims to not accept jdbcUrl

该报错是配置文件路径错误,重点检查url路径,3306后的 test 为数据库名,注意修改成数据库已有数据库名

mysql8.x版本URL为 jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8

Cannot resolve method 'assertEquals' in 'Assert'

在测试方法中,使用该方法报错,没引入 import org.junit.Assert; 的Assert 包,解决方法如下:

  1. 引入 junit 依赖

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    
  2. 导入正确包 import org.junit.Assert; 的Assert

Injection of resource dependencies failed

测试方法控制台输出:Injection of resource dependencies failed

确定报错对象为 userMapper,发现没有指定 MapperScan,解决如下:

在启动类加入:@MapperScan("top.yumuing.community.mapper") 即可

Could not autowire. No beans of 'DataSource' type found.

编译报错:Could not autowire. No beans of 'DataSource' type found. 代码如下:

@Autowired
DataSource dataSource;

修改 @Autowired 为 @Resource 即可解决

Could not autowire. No beans of 'UserMapper' type found.

@Autowired
private UserMapper userMapper;

修改 @Autowired 为 @Resource 即可解决

欢迎关注我的博客: https://yumuing.top

求点赞转发

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
98 3
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
3月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。
|
2月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
2月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
2月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
341 7
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
179 6
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
119 1

推荐镜像

更多