文章目录


Spring Boot 整合 Mybatis

1.引入pom.xml的maven依赖

<!--   整合mybatis     -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>

返回顶部


2.mybatis 配置

【Spring Boot】整合 Mybatis_xml

如上图所示是spring boot项目的基本结构。首先我们在resources目录下创建子级目录mybatis,在其中新建mybatis配置文件mybatis-config.xml、mapper目录(用于存放对应的mapper.xml文件)

mybatis-config.xml配置信息:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//ybatis.org//DTD SQL Map Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="false"></setting>
<setting name="useGeneratedKeys" value="true"></setting>
<setting name="defaultExecutorType" value="REUSE"></setting>
<setting name="logImpl" value="STDOUT_LOGGING"></setting>
</settings>
</configuration>

在完成以上操作后,进行spring boot的配置,application.yaml文件配置如下:

# spring 配置
spring:
# 配置 thymeleaf
thymeleaf:
prefix: classpath:/templates
suffix: .html
servlet:
content-type: text/html
encoding: UTF-8
mode: HTML
cache: false

# 配置mvc
mvc:
static-path-pattern:/**

# 配置数据库
datasource:
url: jdbc:mysql://127.0.0.1:3306/dormitory?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&allowMultiQueries=true
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver

# mybatis 配置
mybatis:
config-location: classpath:mybatis/mybatis-config.xml # mybatis总配置文件路径
mapper-locations: classpath:mybatis/mapper/*.xml # 映射mapper文件所在路径

返回顶部


3.配置数据库

找到Database工具栏,点击 + 号,选择Mysql,然后进行配置,Test Connection 完成后即可。

【Spring Boot】整合 Mybatis_xml_02


【Spring Boot】整合 Mybatis_xml_03

如果遇到时区的问题,参考下图:

【Spring Boot】整合 Mybatis_spring boot_04

然后再次测试即可~

返回顶部


4.创建数据库实体类

【Spring Boot】整合 Mybatis_java_05

如图所示,在配置好mybatis后,我们利用数据库中的admin表进行测试(查询所有)!

首先,我们需要创建admin表的实体类Admin:

package com.zyx.bootweb.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
* @author 35192
* @date 2021-07-08 14:41
*/

@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Admin {
private Integer id;
private String name;
private String pwd;
private Character sex;
private String phone;
}

返回顶部


5.创建接口、映射文件

接着我们需要创建AdminMapper接口,对应AdminMapper.xml映射文件,如下图所示:

【Spring Boot】整合 Mybatis_java_06

注意:两个mapper文件名称保持一致!!!

package com.zyx.bootweb.mapper;

import com.zyx.bootweb.bean.Admin;
import java.util.List;

/**
* @author 35192
* @date 2021-07-23 16:01
*/

public interface AdminMapper {
// 查询所有管理员信息
List<Admin> findAll();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zyx.bootweb.mapper.AdminMapper">
<!-- 查询所有管理员信息 -->
<select id="findAll" resultType="com.zyx.bootweb.bean.Admin">
select * from admin
</select>
</mapper>

返回顶部


6.Service层

package com.zyx.bootweb.service;

import com.zyx.bootweb.bean.Admin;
import com.zyx.bootweb.mapper.AdminMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

/**
* @author 35192
* @date 2021-07-23 16:42
*/
@Service
public class AdminService {

@Autowired
AdminMapper adminMapper;

// 调用mapper映射---查询所有
public List<Admin> findAll(){
return adminMapper.findAll();
}
}

返回顶部


7.Junit测试

依赖配置:

<!--  spring boot 集成的测试启动器     -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 单元测试Junit依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>

MybatisTest测试类:

package com.zyx.bootweb.test;

import com.zyx.bootweb.bean.Admin;
import com.zyx.bootweb.service.AdminService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;

/**
* @author 35192
* @date 2021-07-23 16:44
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class MybatisTest {

@Autowired
AdminService adminService;

@Test
public void findAll(){
List<Admin> adminList = adminService.findAll();
for (Admin admin:adminList){
System.out.println(admin);
}
}
}

报错

【Spring Boot】整合 Mybatis_mybatis_07

上网查了一下,先说下出现问题的几种情形:

  1. 对应的Mapper目录写错了
  2. 少了配置文件
  3. 在应用入口类:XxxApplication.java 中没有加入 @MapperScan(basePackages = {“”})注解 (本人用的这种方式解决的!)
@MapperScan
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加,
  1. 注解方式不对,可使用@Mapper注解

根据报错提示,主要就是没有找到mybatis对应的mapper根据默认的路径com.zyx.bootweb没有找到,因为我这里放在了其下的mapper包中,所以要指明至mapper包下:com.zyx.bootweb.mapper。

修改后:

package com.zyx.bootweb;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = {"com.zyx.bootweb.mapper"})
public class BootWebApplication {

public static void main(String[] args) {
SpringApplication.run(BootWebApplication.class, args);
}

}

结果展示

【Spring Boot】整合 Mybatis_spring_08

返回顶部