作者:一一哥
在上一节中,我带大家学习了Spring Boot中整合JPA,那接下来这一章节中,我继续带领大家学习如何在Spring Boot中整合Mybatis。
MyBatis是一款优秀的持久层框架,它本来是apache的一个开源项目iBatis。在2010年的时候,这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis;2013年11月又迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。
Mybatis 初期使用比较麻烦,需要各种配置文件、实体类、Dao 层映射关联、还有一大推其它配置。
然后 Mybatis 就发现了这种弊端,为了解决这种弊端,就开发了generator逆向工程,可以根据表结构自动生成实体类、配置文件和 Dao 层代码,可以减轻一部分开发量。
后期也进行了大量的优化,可以使用注解进一步简化开发,自动管理 Dao 层和配置文件等。
到了今天Mybatis进一步简化到极致,那就是mybatis-spring-boot-starter 的出现。我们可以利用 Spring Boot 整合 Mybatis,即使完全不用配置文件,也可以简单配置轻松实现数据库操作。
SpringBoot中整合Mybatis有2种实现方式:
由于注解方式更为简易普遍,所以本案例讲解以注解方式实现的案例。
我们按照之前的经验,创建一个web程序,并将之改造成Spring Boot项目,具体过程略。

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>Spring Boot 会自动加载 spring.datasource.* 相关配置,数据源就会自动注入到 sqlSessionFactory 中,sqlSessionFactory 会自动注入到 Mapper 中。
spring:
datasource:
url: jdbc:mysql://localhost:3306/db4?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: syc
driver-class-name: com.mysql.jdbc.Driver #驱动
mybatis:
type-aliases-package: com.yyg.boot.mapperspring.datasource.url: 数据库连接字符串;
spring.datasource.username: 数据库用户名;
spring.datasource.password: 数据库密码;
spring.datasource.driver-class-name: 驱动类型(注意MySQL 8.0的值是com.mysql.cj.jdbc.Driver和之前不同);
mybatis.type-aliases-package 配置mapper包名。
用druid提供的DataSource来替换默认的DataSource。
package com.yyg.boot.config;
import com.alibaba.druid.pool.DruidDataSource;
import lombok.Data;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* @Author 一一哥Sun
* @Date Created in 2020/3/30
* @Description 第二种配置数据源的方式
*/
@Data
@ComponentScan
@Configuration
@ConfigurationProperties(prefix="spring.datasource")
@MapperScan("com.yyg.boot.mapper")
public class DbConfig {
private String url;
private String username;
private String password;
@Bean
public DataSource getDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}可以在这个类上添加@MapperScan("com.yyg.boot.mapper"),指定Mapper接口所在包位置。
package com.yyg.boot.domain;
import lombok.Data;
import lombok.ToString;
/**
* @Author 一一哥Sun
* @Date Created in 2020/3/30
* @Description Description
*/
@Data
@ToString
public class User {
private Long id;
private String username;
private String birthday;
private String sex;
private String address;
}package com.yyg.boot.mapper;
import com.yyg.boot.domain.User;
import org.apache.ibatis.annotations.*;
/**
* @Author 一一哥Sun
* @Date Created in 2020/3/31
* @Description 在Mybatis的Mapper接口中,增删改查都有对应的注解.@Insert,@Select,@Delete,@Update
*/
public interface UserMapper {
@Select("select * from user where id = #{id}")
User queryUserById(@Param(value = "id") int id);
@Insert("insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})")
void insertUser(User user);
@Update("UPDATE user SET sex=#{sex} WHERE username=#{username}")
void updateUser(User user);
@Delete("DELETE FROM user WHERE id =#{id}")
void deleteById(@Param("id") int id);
}package com.yyg.boot.web;
import com.yyg.boot.domain.User;
import com.yyg.boot.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Author 一一哥Sun
* @Date Created in 2020/3/31
* @Description Description
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/{id}")
public User findUserById(@PathVariable("id") Integer id) {
return userMapper.queryUserById(id);
}
@PostMapping("")
public String addUser(@RequestBody User user) {
userMapper.insertUser(user);
return "success";
}
@PostMapping("/update")
public String updateUser(@RequestBody User user) {
userMapper.updateUser(user);
return "success";
}
@DeleteMapping("/{id}")
public String delUserById(@PathVariable("id") Integer id) {
userMapper.deleteById(id);
return "success";
}
}也可以在入口类上添加@MapperScan("com.yyg.boot.mapper"),指定Mapper接口所在包位置。
package com.yyg.boot;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author 一一哥Sun
* @Date Created in 2020/3/31
* @Description Description
*/
@SpringBootApplication
//@MapperScan("com.yyg.boot.mapper")
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}测试查询方法:

测试添加方法:

可以看到数据库中多了一个id=28的新的记录。

测试修改方法:

可以看到数据库中的sex数据被修改了。

测试删除方法:

看数据库的表中,已经没有了id为28的数据!

原文作者:;如有侵权,请联系管理员删除。