SpringBoot整合MyBatis
一、前言
随着时代的改变,Java技术发生了不少变迁,本文主要是用JDK21和最新版的MyBatis,整合的完整实例,可用于项目的初步搭建使用
二、在Spring网站下载demo
注意选择web mvc,和mybatis

三、mysql数据库中的表结构与项目结构

项目结构

四、pom.xml文件与application.properties文件
pom.xml文件
<?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 https://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>3.4.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>21</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter-test</artifactId> <version>3.0.4</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> <scope>runtime</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build> </project>
application.properties文件
spring.application.name=demo
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/
spring.datasource.url=jdbc:mysql://localhost:3306/chapter05
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
mybatis.mapper-locations=classpath:mappers/**Mapper.xml
五、实体、dao层与mapper文件
实体
public class Book { private Integer id; private String name; private String author; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name == null ? null : name.trim(); } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author == null ? null : author.trim(); } @Override public String toString() { return "Book{" + "id=" + id + ", name='" + name + '\'' + ", author='" + author + '\'' + '}'; } }
dao层
mapper文件,我们这边使用mybatis-generator生成
@Mapper public interface BookMapper { int deleteByPrimaryKey(Integer id); int insert(Book record); int insertSelective(Book record); //@Select("SELECT * FROM book WHERE id = #{id}") Book selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(Book record); int updateByPrimaryKey(Book record); }
六、controller层、service层
service层
@Service public class BookService { @Autowired private BookMapper bookMapper; public Book getBook(){ return bookMapper.selectByPrimaryKey(1); } }
controller层
这里还是用传统的@Autowired注入,现在Spring官方提倡用构造器注入法[2]
@RestController public class BookController { @Autowired private BookService bookService;
//构造器注入法
// public BookController(BookService bookService){
// this.bookService = bookService;
// }
@RequestMapping("/getBook") public Book getBook(){ Book book = bookService.getBook(); return book; } }
七、DemoApplication与测试结果
@SpringBootApplication @MapperScan("com.example.demo.dao") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
结果:

Reference
[1] 王松,《Spring Boot + Vue 全栈开发实战》, 42-88页
[2] wljslmz, 为什么Spring和IDEA不推荐使用@Autowired注解,有哪些替代方案, https://www.cnblogs.com/ryelqy/p/17794467.html

浙公网安备 33010602011771号