引言:
本文主要介绍SpringBoot如何集成mybatis框架,本文是由作者一步一操作书写完成,欢迎学习。
MyBatis简单介绍:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
Mybatis具有简单易学、灵活、解除sql与程序代码的耦合、提供映射标签,支持对象关系组建维护、提供xml标签,支持编写动态sql等优点。
创建项目:
一、新建一个Spring Initializr项目
1、File->New->Project
2、选择Spring Initializr地址为 https://start.spring.io
3、填写Group包名 等信息。
4、选择组件时根据需要,这里选择Spring Web,Mybatis,MySQL。
5、确定项目名完成即可。
6、生成项目后我们可以看到SpringBoot集成MyBatis所需相关依赖并添加junit依赖如下:
<!--Springboot集成mybatis相关依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<!-- Springboot的测试支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
二、修改resources下的配置文件application.properties
本文不使用application.properties文件 而使用更加简洁的application.yml文件。将resources文件夹下原有的application.properties文件后缀改成yml,(备注:其实SpringBoot底层会把application.yml文件解析为application.properties),本文创建了两个yml文件(application.yml和application-dev.yml),分别来看一下内容
1、application.yml
spring:
profiles:
active: dev
2、 application-dev.yml
server:
port: 8080
servlet:
context-path: /
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*DAOMapper.xml
type-aliases-package: com.hbc.springboot.entity
创建两个文件的原因是项目中可以有不同环境,开发环境、测试环境、生产环境等等,每个环境参数不同,就可以通过yml文件进行分别配置。
并且配置文件名满足application-{profile}.yml的格式,其中{profile}对应你的环境标识,比如:
application-dev.yml:开发环境
application-test.yml:测试环境
application-prod.yml:生产环境
至于哪个具体的配置文件会被加载,需要在application.yml文件中通过spring.profiles.active属性来设置,其值对应{profile}值。
三、在入口类配置
@MapperScan("com.hbc.springboot.dao")
用来扫描dao.
四、创建包controller、entity、dao、service。resources下创建mapper文件夹,用于写sql语句,也可以用注解的方式直接写在mapper文件里。
目录结构如下
1、创建一个名为test的数据库,并创建一个名为user的表。
2、entity下新建实体类user.java 并提供get、set、toString方法。
package com.hbc.springboot.entity;
/**
* @description: 用户实体类
* @author: hbc
*/
public class User {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
2、dao中创建UserDAO
package com.hbc.springboot.dao;
import com.hbc.springboot.entity.User;
import java.util.List;
/**
* @description: 用户DAO层
* @author: hbc
*/
public interface UserDAO {
List<User> findAllUser();
}
3、mapper中创建UserDAOMapper.xml用于书写sql语句。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="com.hbc.springboot.dao.UserDAO">
<select id="findAllUser" resultType="User">
SELECT id,name FROM user;
</select>
</mapper>
4、可以在SpringbootApplicationTests测试dao层接口
package com.hbc.springboot;
import com.hbc.springboot.dao.UserDAO;
import com.hbc.springboot.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = SpringbootApplication.class)
public class SpringbootApplicationTests {
@Autowired
private UserDAO userDAO;
@Test
public void testUser(){
List<User> allUser = userDAO.findAllUser();
System.err.println(allUser);
}
}
5、运行结果如下
访问数据库成功。
6、通过接口访问,由于本文测试接口,所以直接注入dao层。
package com.hbc.springboot.controller;
import com.hbc.springboot.dao.UserDAO;
import com.hbc.springboot.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* @description: 用户controller层
* @author: hbc
* @date: 2020-04-16 11:09
*/
@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {
@Autowired
private UserDAO userDAO;
@RequestMapping("/queryAllUser")
public List<User> queryAllUser(){
List<User> allUser = userDAO.findAllUser();
return allUser;
}
}
7、浏览器输入访问地址:http://localhost:8080/user/queryAllUser,得到如下结果
访问成功。
总结
SpringBoot集成MyBatis步骤比较简单,有一些需要注意的问题。
例如:
com.mysql.jdbc.Driver 是 mysql-connector-java 5中的,
com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6中的。
并且JDBC连接Mysql6 com.mysql.cj.jdbc.Driver, 需要指定时区serverTimezone,例如:
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
以上SpringBoot集成MyBatis的基本框架就搭建好了。