本篇讲解下springboot集成mybatis的操作流程,springboot版本为2.7.0
1、工程结构
我们先创建一个maven工程(或springboot工程),并创建好必要的包目录和资源目录,工程结构如下:
spingboot-mybatis
--src
----main
java
com.xk.mybatis.springboot (包路径)
--controller (控制器层的包名)
--entity (实体层的包名)
--mapper (mapper接口层的包名)
--service (服务层的包名)
--App.java (启动类)
resources
mapper (存放xml映射文件的资源目录)
application.yml (系统启动所需的配置文件)
----test
--pom.xml
实际工程截图如下所示:
2、工程配置
本节用到一张简单的数据表,在cloud数据库下面创建订单表,如下:
CREATE TABLE `t_order` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
对应的实体类Order如下:
package com.xk.mybatis.springboot.entity;
/**
* @author xk
* @since 2023.04.24 14:18
*/
public class Order {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.1、引入mybatis-spring-boot-starter依赖
mybatis官方给出了如下的版本依赖表:
MyBatis-Spring-Boot-Starter | Spring Boot | MyBatis-Spring | Java |
---|---|---|---|
3.0 | 3.0 | 3.0 | 17 或更高 |
2.3.x | 2.5 - 2.7 | 2.1 | 8 或更高 |
2.2.x | 2.5 - 2.7 | 2.0(2.0.6 以上可开启所有特性) | 8 或更高 |
2.1.x | 2.1 - 2.4 | 2.0(2.0.6 以上可开启所有特性) | 8 或更高 |
由于我们的应用是先选择springboot版本,然后再基于springboot开发,因此,我们选择启动器对应的版本时,就结合自己使用的springboot的版本,来选择对应的starter版本。
在pom文件添加mybatis-spring-boot-starter启动器,该启动器会帮我们自动导入mybatis-spring-boot-autoconfigure.jar、mybatis.jar和mybatis-spring.jar这三个包,导入的启动器依赖具体内容如下:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
由于我们要通过mybatis查询mysql数据库,所以我们还要引入mysql的jdbc驱动包
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
2.1、编写xml映射文件
(1)首先,每一个xml映射文件都对应一个mapper接口文件,将xml文件中定义的select、insert、update和delete的元素的id值都当做方法名,然后在mapper接口创建相应同名的接口方法。
(2)在resources资源目录的mapper目录下创建OrderMapper.xml文件,写一个根据id查询订单的方法,其中namespace的值为该xml映射文件对应的mapper接口的全路径,内容如下:
<?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.xk.mybatis.springboot.mapper.OrderMapper">
<select id="findById" parameterType="Long" resultType="com.xk.mybatis.springboot.entity.Order">
select * from t_order where id=#{id};
</select>
</mapper>
2.2、编写mapper接口
2.1节我们定义了映射文件的namespace的值为com.xk.mybatis.springboot.mapper.OrderMapper,并且里面只定义了一个id为findById的查询语句,所以我们就在src下面的mapper包创建OrderMapper接口文件,接口里面定义findById方法,内容如下:
package com.xk.mybatis.springboot.mapper;
import com.xk.mybatis.springboot.entity.Order;
import org.apache.ibatis.annotations.Mapper;
/**
* @author xk
* @since 2023.04.24 14:21
*/
@Mapper
public interface OrderMapper {
/**
* 根据id获取订单
* @param id
* @return
*/
Order findById(Long id);
}
2.3、配置application.yml文件
application.yml里面主要配置数据源信息和mybatis的个性化配置,内容如下:
server:
port: 8080
servlet:
context-path: /mybatis
spring:
application:
name: springboot-mybatis
# 配置数据源
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/cloud?useUnicode=true&characterEncoding=utf-8
username: root
password: zdan
#mybatis配置信息
mybatis:
# xml映射文件所在的路径,一般用模糊匹配来指定最终的xml文件
mapper-locations: classpath:/mapper/*.xml
configuration:
#采用驼峰形式将数据表中以‘_’分隔的字段映射到java类的某个属性,比如表字段user_name可以映射为类里面的userName属性
map-underscore-to-camel-case: true
到此为止,mybatis的配置就结束了,mybatis-spring-boot-starter会为标记@Mapper接口的接口文件创建代理对象,并将代理对象放置到spring容器中,我们可以使用@Autowired或@Resource等注解,将其注入到其他bean对象中。
完整的pom文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>
<artifactId>springboot-mybatis</artifactId>
<groupId>com.xk</groupId>
<version>1.0</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!--mybatis启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
</dependencies>
</project>
下面我们来验证下我们的配置是否正确。
3、验证配置结果
3.1、创建service类
创建OrderService类,在类上标记@Service注解,并注入OrderMapper接口对应的bean对象
package com.xk.mybatis.springboot.service;
import com.xk.mybatis.springboot.entity.Order;
import com.xk.mybatis.springboot.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author xk
* @since 2023.04.24 14:26
*/
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
/**
* 根据订单id获取订单
* @param id
* @return
*/
public Order findById(Long id){
return orderMapper.findById(id);
}
}
3.2、创建controller类
创建OrderController控制器,对应暴露http接口,方便我们通过浏览器发送查询请求,内容如下:
package com.xk.mybatis.springboot.controller;
import com.xk.mybatis.springboot.entity.Order;
import com.xk.mybatis.springboot.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author xk
* @since 2023.04.24 14:25
*/
@RequestMapping("/order")
@RestController
public class OrderController {
@Autowired
private OrderService orderService;
@GetMapping("{id}")
public Order findById(@PathVariable Long id){
return orderService.findById(id);
}
}
3.3、验证接口
目前我们的t_order数据表有如下数据
浏览器访问http://localhost:8080/mybatis/order/1,查询订单id为1的订单数据,结果如下:
说明我们的mybatis配置成功。