当前位置: 首页 > news >正文

谷粒商城学习笔记-18-快速开发-配置测试微服务基本CRUD功能

文章目录

  • 一,product模块整合mybatis-plus
    • 1,引入依赖
    • 2,product启动类指定mapper所在包
    • 3,在配置文件配置数据库连接信息
    • 4,在配置文件中配置mapper.xml映射文件信息
  • 二,单元测试
    • 1,编写测试代码,执行单元测试
  • 三,错误记录
    • 1,单元测试失败初步排查
    • 2,缺失驱动类依赖

本节的主要内容是product模块整合mybatis-plus,并进行单元测试,测试微服务基本CRUD功能。

一,product模块整合mybatis-plus

1,引入依赖

使用mybatis-plus,需要引入依赖。这一步在上一节已经在common模块引入,这里只做记录,无需再次引入。

		<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version></dependency>

2,product启动类指定mapper所在包

mybatis会根据Mapper代码文件中定义的接口生成代理类,需要告知Mapper接口文件所在的包。

MapperScan的作用是在应用的配置类中指定一个或多个包,Spring将会自动查找这些包下所有的接口,并将它们注册为Spring Bean。

意味着在这些包中的所有标注了@Mapper的接口都会被自动识别和实例化,而无需在Spring的XML配置文件中显式声明每一个Mapper。

@MapperScan(basePackages = "com.atguigu.gulimall.product.dao")

在这里插入图片描述

3,在配置文件配置数据库连接信息

在这里插入图片描述

spring:datasource:username: rootpassword: rooturl: jdbc:mysql://192.168.56.10:3306/gulimall_pms

4,在配置文件中配置mapper.xml映射文件信息

在这里插入图片描述

mybatis-plus:mapper-locations: classpath*:/mapper/**/*.xmlglobal-config:db-config:id-type: auto

关于配置mapper-locations: classpath*:/mapper/**/*.xml的说明:

  • 这个配置声明的是mybatis映射文件的路径
  • classpath中的号表示除了扫描当前项目的类路径,还会扫描所以来的包的类路径

下面的配置将主键设定为自增主键,在调用接口保存数据时,主键如果不指定,会自增。

global-config:db-config:id-type: auto

二,单元测试

1,编写测试代码,执行单元测试

在test文件夹下的测试类中,加入如下测试代码:

	@Autowiredprivate BrandService brandService;@Testpublic void testSaveBrand() {BrandEntity brandEntity = new BrandEntity();brandEntity.setName("华为");brandService.save(brandEntity);}

在这里插入图片描述
测运行testSaveBrand方法,测试通过说明配置正确。

在这里插入图片描述

数据库中也能看到一条对应的数据,说明单元测试成功,符合预期。

在这里插入图片描述

三,错误记录

1,单元测试失败初步排查

单元测试没跑成功,报错信息如下:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'attrAttrgroupRelationController': Unsatisfied dependency expressed through field 'attrAttrgroupRelationService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'attrAttrgroupRelationService': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'attrAttrgroupRelationDao' defined in file [D:\ideaprojects\gulimall2024\gulimall-product\target\classes\com\atguigu\gulimall\product\dao\AttrAttrgroupRelationDao.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.RuntimeException: Failed to load driver class com.mysql.cj.jdbc.Driver in either of HikariConfig class loader or Thread context classloader

看上面堆栈信息的最后面的信息, Factory method 'dataSource' threw exception,说明极有可能是数据库连接信息配置的有问题。

在这里插入图片描述

仔细检查配置文件,发现数据库url配置少了端口信息。

在这里插入图片描述

修改配置文件,重新执行单元测试,仍然失败。

2,缺失驱动类依赖

仔细看堆栈信息,发现有这样一行:Failed to load driver class com.mysql.cj.jdbc.Driver in either of HikariConfig class loader or Threa,没有驱动类,应该是少了MySQL Driver相关的依赖。

考虑到这个依赖是其他模块也需要的依赖,所以应该在common模块的pom.xml中声明依赖。

		<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope><version>5.1.38</version></dependency>

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从3D扫描到CAD模型【逆向工程】
  • 使用大模型进行SQL迁移的实践总结
  • 力扣8,字符串转换整数
  • 搭建基于 ChatGPT 的问答系统
  • 代码随想录算法训练营DAY60|并查集理论基础、寻找存在的路径
  • 攻防世界(PHP过滤器过滤)file_include
  • html+css+js随机验证码
  • 文学式开发工具 Jupyter Notebook
  • 设计模式探索:观察者模式
  • vue draggable组件,拖拽元素时,获取元素上在data或setup中定义的数据
  • 【matlab】随机森林客户流失预测
  • Java之网络面试经典题(一)
  • hcip暑假第二次作业
  • Elasticsearch 更新指定字段
  • C++类和对象(一)
  • create-react-app项目添加less配置
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • IDEA 插件开发入门教程
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Linux gpio口使用方法
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 解析带emoji和链接的聊天系统消息
  • 京东美团研发面经
  • 前端js -- this指向总结。
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • C# - 为值类型重定义相等性
  • kubernetes资源对象--ingress
  • Nginx实现动静分离
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #NOIP 2014#Day.2 T3 解方程
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Java)【深基9.例1】选举学生会
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (八)Flask之app.route装饰器函数的参数
  • (办公)springboot配置aop处理请求.
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (力扣)1314.矩阵区域和
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .net core docker部署教程和细节问题
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 快速重构概要1
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .net专家(高海东的专栏)
  • .vimrc 配置项
  • @RequestBody与@ModelAttribute
  • [20171101]rman to destination.txt