赞
踩
本篇讲解下springboot集成mybatis的操作流程,springboot版本为2.7.0
我们先创建一个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
实际工程截图如下所示:
本节用到一张简单的数据表,在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; } }
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>
(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.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); }
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>
下面我们来验证下我们的配置是否正确。
创建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); } }
创建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); } }
目前我们的t_order数据表有如下数据
浏览器访问http://localhost:8080/mybatis/order/1,查询订单id为1的订单数据,结果如下:
说明我们的mybatis配置成功。
本文先分享到这里,觉得有收获的朋友,可以关注我,或者进行分享或收藏,有疑惑的也可以来私聊评论,我会及时进行回复~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。