刚学完Springboot技术与mybatis整合,发表此文章主要是巩固自己的学习以及对其他刚接触Springboot的小白们有帮助,文章内容不仅包含了mybatis整合的步骤,也包含了整合过程中一些我遇到过的报错,这也是我第一次发文章,希望对大家有所帮助。
IDE:idea、DB:mysql、JDK:1.8
创建一个Springboot项目
创建完模块后pow.xml文件会自动导入相应的坐标
<dependencies>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.2.0version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
将原来的application.propertiess删除,创建application.yml配置文件(SpringBoot底层会把application.yml文件解析为application.properties),使用properties格式编写也可以
#2.配置相关信息
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: root
下面是我的数据库表结构, 我的数据库名称是ssm.db,表名是tbl_book
实体类编写
在java.com.itxhj.domain包下创建Book.class文件
public class Book {
private Integer id;
private String type;
private String name;
private String description;
@Override
public String toString() {
return "Book{" +
"id=" + id +
", type='" + type + '\'' +
", name='" + name + '\'' +
", description='" + description + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
映射接口编写
在java.com.itxhj.dao包下编写BookDao接口
因为主要目标是整合mybatis,所以这边我只编写了一个根据id查询的方法
注意需要添加@Mapper被容器识别
@Mapper
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
在测试类中测试编写的方法
@SpringBootTest
class Springboot05MybatisApplicationTests {
@Autowired
private BookDao bookDao;
@Test
void contextLoads() {
System.out.println(bookDao.getById(1));
}
}
运行测试类,测试成功
完美,成功的实现了Springboot整合mybatis,是不是觉得很方便,对比之前学的ssm整合mybatis,简直不要太快乐了,希望各位小伙伴都能拿成功走到这一步~
下面是我在整合过程中出现过的报错
该报错是数据库连接失败
解决方法:
1.检查数据库的配置文件的信息pow有没有导入对应的坐标(整合步骤中有)
2.特别注意数据库连接的密码是纯数字的话要用双引号!!!(就是你的application.yml文件中的password字段)
#2.配置相关信息
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: "123456"
出现这个报错是因为当前使用的SpringBoot版本是2.5.4,对应的坐标设置中Mysql驱动使用的是8x版本。当SpringBoot2.4.3(不含)版本之前会出现一个小BUG,就是MySQL驱动升级到8以后要求强制配置时区,如果不设置会出问题。这也是mysql5和mysql8的区别。
解决方法:
1.mysql数据库服务器设置时区
2.在jdbc配置url串中设置时区
下面是第2种解决方法:
在application.yml文件的url中末尾添加?serverTimezone=UTC修改时区
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
com.mysql.jdbc.Driver'. This is deprecated. The new driver class is
com.mysql.cj.jdbc.Driver’. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.这个是运行结果中出现的一个红色文字,虽然不是报错,但是建议大家修改一下。
意思是说数据库驱动过时的警告,根据提示修改配置即可,弃用com.mysql.jdbc.Driver,换用com.mysql.cj.jdbc.Driver。
# 在application.yml文件中修改
driver-class-name: com.mysql.cj.jdbc.Driver
整合操作需要勾选MyBatis技术和mysql,也就是导入MyBatis对应的starter以及mysql的驱动坐标
数据库连接相关信息转换成配置
数据库SQL映射需要添加@Mapper被容器识别到
MySQL 8.X驱动强制要求设置时区:
修改url,添加serverTimezone设定
修改MySQL数据库配置
驱动类过时,提醒更换为com.mysql.cj.jdbc.Driver