前言
本篇文章将对如何搭建一个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表进行映射,如下所示。
@Datapublic 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: rootmybatis: 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
的实现如下所示。
@Servicepublic class MybatisService { @Autowired private BookMapper bookMapper; public List<Book> selectAllBooks() { return bookMapper.selectAllBooks(); }}
在胜利实现整合之后,能够从Spring
容器中获取每个映射接口的映射实例,所以在MybatisService
中通过注入的形式获取到了映射接口BookMapper
的映射实例。MybatisController
的实现如下所示。
@RestControllerpublic 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
形式具备更不便更弱小的个性。