Spring boot:使用Mybatis访问MySQL
Contents
项目环境
- 操作系统:Mac OSX Catalina 10.15.1
- IDE: IntelliJ IDEA CE(社区版)
- mysql: MySQL Community Server 8.0.19
- mybatis-spring-boot-starter:2.1.1
- mysql-connector-java
MySQL安装
2.1. 下载MySQL
官网下载地址
下载并安装dmg文件, 安装过程会要求设置密码,为了方便使用,可以选择传统的密码加密方式
Use Legacy Password Encryption,设置root密码
支持手动启动/停止数据库服务,选择Initialize Database可以修改密码加密方式和密码,下文会介绍如果使用命令行完成这些任务。
2.2. 使用Shell脚本启动/停止DB Server
使用脚本之前,请先配置mysql环境变量,以使用zsh为例,我们需要在.zshrc文件中添加:
1 | #mysql |
保存之后执行source命令:
1 | source .zshrc |
启动mysql:
1 | sudo /usr/local/mysql/support-files/mysql.server start |
停止mysql:
1 | sudo /usr/local/mysql/support-files/mysql.server stop |
重启mysql:
1 | sudo /usr/local/mysql/support-files/mysql.server restart |
保存命令行至shell文件中,方便后续使用
1 | chmod 777 mysql-start.sh chmod 777 mysql-restart.sh chmod 777 mysql-stop.sh |
2.3. 登录MySQL
执行命令行:
1 | mysql -u root -p |
输入初始设置的密码,登录成功会进入mysql>命令行输入界面,若出现无权限提示,需要重置密码
1 | ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) |
2.4. 重置密码
- 停止MySQL server
- 使用安全模式启动MySQL server, 添加–skip-grant-tables参数关闭登录时密码校验
1
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
- 无密码登录MySQL
1
sudo /usr/local/mysql/bin/mysql -u root
- 在mysql>输入命令修改root登录密码
1
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new pwd';
- 若遇到下面的错误提示,请刷新权限表之后重新执行密码修改命令
1
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
- 刷新权限表
1
mysql> flush privileges;
使用MySQL
3.1. 创建数据库表
- 首先创建一个独立的DB用于开发
mysql> create database dev_db; - 切换到新创建的DB
mysql> use database dev_db; - 在dev_db下新建表t_member
mysql> create table t_member(id int, name varchar(255), book_count int, min_duration int, max_duration int, av_duration int, times_per_week int); - 手动插入几条测试数据
1
2
3mysql> insert into t_member values(1, "小明", 10, 30, 65, 45, 3);
mysql> insert into t_member values(2, "小红", 5, 10, 30, 25, 2);
mysql> insert into t_member values(3, "小强", 25, 30, 120, 68, 7);
3.2. 安装GUI工具
- 推荐安装Sequel Pro最新测试版本,因为稳定版本在loading数据库时会出现卡死,详细原因参见GitHub issue: #2699
- 使用Standard或TCP/IP方式连接MySQL server并添加到收藏列表
连接成功后可以切换DB和查看表
在工程中配置MyBatis和MySQL
4.1. pom.xml配置依赖
添加mybatis-spring-boot-starter和mysql-connector-java依赖
1 | <dependency> |
4.2. 配置数据库
在resources/application.properties中添加配置:
1 | mybatis.type-aliases-package=com.example.domains |
使用Mybatis访问MySQL
5.1. 创建Mapper接口
在每个接口声明之前需要使用@Mapper注解,由于MyBatis动态代理机制的存在,我们无需手动实现Mapper接口
1 | package com.example.demo01.mapper; |
为了免去每个接口文件都要添加@Mapper注解,MyBatis提供统一扫描包的方式鉴别Mapper接口
1 |
|
5.2. 依赖注入Mapper并使用
使用@Autowired注解,注入Mapper依赖,然后就可以直接使用Mapper实例调用接口方法
1 |
|
5.3. 接口测试
运行DemoApplication, 用Chrome测试一下接口
附录:
issue 1: java: 变量 memberMapper 未在默认构造器中初始化
private MemberMapper memberMapper; 变量声明时未使用@Autowired注解
issue 2: This application has no explicit mapping for /error, so you are seeing this as a fallback.
代码里面url mapping是正确的,原因是Controller所在的包没有包含在Application所在的包里面,正确的目录结构是这样的:
issue 3: 更改目录结构之后工程文件出现警告Cannot resolve symbol, 但是应用可以正常运行,需要清理缓存
其中一种解决方法:进入File > Invalidate Caches & Restart