在第一次给自己的SpringBoot链接mysql的时候会出现很多问题
可能的问题和解决方案
本地的mysql没办法用root登陆
这个一般是因为mysql在初始的时候默认root角色不能用密码登陆的原因
可以用
sudo mysql
先用最高权限进入mysql然后查看一下root的信息
SELECT User, Host, plugin FROM mysql.user;
如果输出
+------+-----------+-------------+
| User | Host | plugin |
+------+-----------+-------------+
| root | localhost | auth_socket |
+------+-----------+-------------+
plugin 是 auth_socket,可以通过以下命令将其更改为使用密码认证:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
然后刷新一下权限
FLUSH PRIVILEGES;
退出
exit
再重新尝试用密码登陆
mysql -u root -p
应该就可以了
mysql链接的上idea但是链接不上项目
项目文件格式
先检查一下自己的项目文件中是否缺少了什么必要的文件
.
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── tutoring
│ │ │ ├── auth
│ │ │ │ ├── controller
│ │ │ │ ├── mapper
│ │ │ │ │ └── UserMapper.java
│ │ │ │ └── service
│ │ │ │ └── UserService.java
│ │ │ └── demo
│ │ │ ├── controller
│ │ │ │ └── HelloController.java
│ │ │ ├── entity
│ │ │ │ └── Users.java
│ │ │ └── TutoringSystemApplication.java
│ │ └── resources
│ │ ├── application.yml
│ │ ├── mapper
│ │ │ └── UserMapper.xml
│ │ ├── static
│ │ └── templates
│ └── test
│ ├── java
│ │ └── UserTest.java
│ └── resources
│ └── application.yml
└── target
├── classes
│ ├── application.yml
│ ├── com
│ │ └── tutoring
│ │ ├── auth
│ │ │ ├── mapper
│ │ │ │ └── UserMapper.class
│ │ │ └── service
│ │ │ └── UserService.class
│ │ └── demo
│ │ ├── controller
│ │ │ └── HelloController.class
│ │ ├── entity
│ │ │ └── Users.class
│ │ └── TutoringSystemApplication.class
│ └── mapper
│ └── UserMapper.xml
├── generated-sources
│ └── annotations
├── generated-test-sources
│ └── test-annotations
├── maven-archiver
│ └── pom.properties
├── maven-status
│ └── maven-compiler-plugin
│ ├── compile
│ │ └── default-compile
│ │ ├── createdFiles.lst
│ │ └── inputFiles.lst
│ └── testCompile
│ └── default-testCompile
│ ├── createdFiles.lst
│ └── inputFiles.lst
├── StudentTutoringPlatform-1.0-SNAPSHOT.jar
├── StudentTutoringPlatform-1.0-SNAPSHOT.jar.original
├── surefire-reports
│ ├── TEST-UserTest.xml
│ └── UserTest.txt
└── test-classes
├── application.yml
└── UserTest.class
这个是我自己的项目tree可以作为参考,一般我们会在test里面测试数据库的连接,test里面的resource文件一定要有配置文件application.yml,可以根据你自己想要测试的内容写进去也可以直接复制总项目的application.yml粘贴过去
test的application.yml的格式问题
- 记得一定要检查自己的yml格式,如果password的密码忘记加双引号最好加上,这可以避免后面出现的错误。
- 记得一定要检查自己的yml里的url时区是否配置是准确的,这个会直接影响到数据库的连接,要看自己的mysql数据库中的时区是否匹配的上。
- 如果不确定的话直接把url里面的时区删去就好了,一般不会出现什么问题。
- 检查yml里的mybatis的配置
mybatis:
mapper-locations: classpath:mapper/*.xml # MyBatis的Mapper XML文件位置
type-aliases-package: com.tutoring.demo.entity # 实体类所在的包
记得要配置完整并且准确文件位置
启动文件的问题
启动文件Application.java文件中,确定能够扫描到项目中所需要的文件
@SpringBootApplication(scanBasePackages = {"com.tutoring.auth", "com.tutoring.demo"})
也要能够扫描到需要使用的mapper文件
@MapperScan("com.tutoring.auth.mapper")
注意:这里的@MapperScan的效果和@Mapper的效果是差不多的,只是前者更加适合mapper文件比较多的情况,而且不容易扫描漏,@Mapper可能会让项目扫描不到
Test文件的问题
该有的注释不能缺少
@RunWith(SpringRunner.class) // 测试需要 Spring 上下文的支持的时候可以用
@SpringBootTest(classes = TutoringSystemApplication.class)
@ContextConfiguration(locations = {"classpath:mapper/*.xml"})
当这些都没有问题的时候
尝试用docker来启动mysql,记得把本地的mysql删除干净了。
docker启动的mysql环境干净不容易受到其他环境的因素影响可以避免很多问题。
先编写一个docker-compose.yml文件
version: "3"
services:
mysql:
image: mysql:8.0.39
container_name: mysql8
environment:
- MYSQL_ROOT_PASSWORD=13528815361z
- TZ=Asiz/Shanghai
ports:
- "3306:3306"
restart: on-failure
记得下好docker,和docker-compose,具体的下载这里就不赘述了
找到刚刚的文件所在的文件
打开终端进入到刚刚文件所在的地方
docker-compose up -d
如果发现镜像拉失败了可以在CSDN上搜索目前可以用的镜像源进行配置就好了。
启动后可以用
docker ps
来查看现在正在运行的容器,这样就启动好了,最后把这个数据库配置到项目中就可以了
如果还有什么问题欢迎在底下评论区评论喔!