共计 5863 个字符,预计需要花费 15 分钟才能阅读完成。
前言
本篇文章将对如何搭建一个 Mybatis
测试工程进行介绍,并在此基础上介绍 Springboot 整合Mybatis
。
注释
一. Mybatis 工程搭建
1. 创库建表
首先创立一个名为 test 的MySQL
数据库,并在 test 数据库中创立一张 book 表,建表语句如下所示。
CREATE TABLE book(id INT(11) PRIMARY KEY AUTO_INCREMENT,
b_name VARCHAR(255) NOT NULL,
b_price FLOAT NOT NULL
)
而后往 book 表插入三条数据,插入语句如下所示。
INSERT INTO book (b_name, b_price) VALUES ("Math", 20.5)
INSERT INTO book (b_name, b_price) VALUES ("English", 21.5)
INSERT INTO book (b_name, b_price) VALUES ("Water Margin", 30.5)
上述数据用于 Mybatis
工程搭建好之后,测试是否基于 Mybatis
对数据库中数据进行操作。
2. 增加依赖
须要在 POM 文件中增加 Mybatis
的依赖,以及数据库驱动的依赖。POM文件中增加的依赖如下所示。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
在引入 MySQL
数据库驱动时,须要留神装置的 MySQL
数据库版本与驱动版本要匹配,具体的关系能够查看下表。
Connector/J Version | Driver Type | JDBC Version | MySQL Server Version | 状态 |
---|---|---|---|---|
5.1 | 4 | 3.0,4.0,4.1,4.2 | 5.6,5.7,8.0 | 可用 |
8.0 | 4 | 4.2 | 5.6,5.7,8.0 | 举荐应用 |
因为装置的 MySQL
数据库版本为 8.0.26,所以依据官网举荐,应用的驱动版本为 8.0.16,而 8.0 版本的 MySQL
数据库驱动在配置 dataSource 时,driver属性须要设置为com.mysql.cj.jdbc.Driver
,有别于 5.1 的com.mysql.jdbc.Driver
。
3. 配置文件
增加好 Mybatis
相干依赖之后,须要编写 Mybatis
的配置文件mybatis-config.xml
,如下所示。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="useGeneratedKeys" value="true"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.mybatis.learn.dao"/>
</mappers>
</configuration>
如果不分明配置文件的各个标签以及含意,能够参考 MyBatis XML 配置,外面有对于 Mybatis
配置的具体阐明。
4. 实体类
新建一个 Book
实体类,用于和 book 表进行映射,如下所示。
@Data
public class Book {
private long id;
private String bookName;
private float bookPrice;
}
5. 映射接口和映射文件
因为在 mybatis-config.xml
中注册映射文件时是基于 <package name="com.mybatis.learn.dao"/>
这样的形式进行注册,这种形式要求映射接口和映射文件须要同名且在同一目录下,所以这里编写一个映射接口名为 BookMapper
,以及编写一个映射文件名为BookMapper.xml
。映射接口BookMapper
如下所示。
public interface BookMapper {List<Book> selectAllBooks();
}
映射文件 BookMapper.xml
如下所示。
<?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.mybatis.learn.dao.BookMapper">
<resultMap id="bookResultMap" type="com.mybatis.learn.entity.Book">
<result column="b_name" property="bookName"/>
<result column="b_price" property="bookPrice"/>
</resultMap>
<select id="selectAllBooks" resultMap="bookResultMap">
SELECT
b.id, b.b_name, b.b_price
FROM
book b
</select>
</mapper>
因为 maven 默认不会将 src/main/java 下的非 Java
文件进行打包,所以须要在 POM 文件中再作如下配置,以实现将映射文件也一并打包。
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
6. 工程构造
整个工程构造如下所示。
其中 MybatisTest
类用于测试查问性能,如下所示。
public class MybatisTest {public static void main(String[] args) throws Exception {
String resource = "mybatis-config.xml";
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream(resource));
SqlSession sqlSession = sqlSessionFactory.openSession();
BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
List<Book> books = bookMapper.selectAllBooks();
books.forEach(book -> System.out.println(book.toString()));
}
}
这里特地留神 Resources.getResourceAsStream()
这个办法,该办法的正文如下。
Returns a resource on the classpath as a Stream object.
即 Resources.getResourceAsStream()
这个办法会去加载 classpath 下的配置文件,那么在 MybatisTest
测试类中,就会去 classpath 下加载名为 mybatis-config.xml
的配置文件。当初先将整个工程编译一下,并去查看编译后的目录构造,如下所示。
所以能够胜利读取到 Mybatis
的配置文件。
当初执行 MybatisTest
测试类,后果如下。
上述结果表明整个测试工程搭建胜利,能够通过 Mybatis
对数据库进行操作。
二. Springboot 整合 Mybatis
Mybatis
提供了和 Springboot 整合的启动器,基于启动器,能够不便的应用 Mybatis
,本节将对Springboot 整合 Mybatis
进行介绍。
首先在 POM 文件中引入 Mybatis
启动器,如下所示。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
最初测试时采纳基于 rest 工具调用接口的形式来触发对数据库的操作,因而还须要引入 web 依赖,如下所示。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.1</version>
</dependency>
在应用了 mybatis-spring-boot-starter
启动器之后,无需再独自为 Mybatis
提供配置文件,对于 Mybatis
的配置间接写在 application.yml 中即可,如果在 application.yml 中没有对 Mybatis
进行任何配置,那么 Mybatis
的所有配置项将应用默认值。同时 dataSource 的配置不必再配置到 Mybatis
中,依照 Springboot 配置数据源的形式进行配置即可。application.yml文件内容如下所示。
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
username: root
password: root
mybatis:
configuration:
use-generated-keys: true
本节中,映射接口 BookMapper
,映射文件BookMapper.xml
与实体类 Book
和第一节中完全一致,所以这里不再赘述,然而须要在 Springboot 的启动类加上 @MapperScan
注解来指定映射文件所在的目录,如下所示。
@SpringBootApplication
@MapperScan("com.mybatis.learn.dao")
public class MybatisLearnApplication {public static void main(String[] args) {SpringApplication.run(MybatisLearnApplication.class, args);
}
}
至此整合曾经完结,整个工程构造如下所示。
service层和 controller 层用于测试。MybatisService
的实现如下所示。
@Service
public class MybatisService {
@Autowired
private BookMapper bookMapper;
public List<Book> selectAllBooks() {return bookMapper.selectAllBooks();
}
}
在胜利实现整合之后,能够从 Spring
容器中获取每个映射接口的映射实例,所以在 MybatisService
中通过注入的形式获取到了映射接口 BookMapper
的映射实例。MybatisController
的实现如下所示。
@RestController
public class MybatisController {
@Autowired
private MybatisService mybatisService;
@RequestMapping(value = "/api/v1/selectall", method = RequestMethod.GET)
public ResponseEntity<List<Book>> selectAllBooks() {
List<Book> books;
try {books = mybatisService.selectAllBooks();
} catch (Exception e) {return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
}
return new ResponseEntity<>(books, HttpStatus.OK);
}
}
最初基于 rest 工具调用接口,后果如下所示。
总结
本篇文章介绍了如何在一个 Maven
工程中通过引入 Mybatis
依赖包来搭建一个连贯数据库的测试工程,而后对 Springboot 整合 Mybatis
进行了案例演示,无论哪种形式,通过 Mybatis
操作数据库都相较于传统 JDBC
形式具备更不便更弱小的个性。