Spring Boot入门系列(五) 使用Mybatis(Annotation版)

文章使用版本为 Spring Boot 2.1.x

前言

在 Spring Boot 入门系列(四) 使用JdbcTemplate访问数据库 中我们介绍了 JdbcTemplate 的简单用法,当项目比较小或者不怎么需要使用数据库时,JdbcTemplate 是个不错的选择,但是如果项目比较大时,我们希望使用一些更加强大的框架,比如今天我们介绍的 MyBatis。

Mybatis通常有两种使用方式

  • 在接口文件上写注解来映射SQL语句
  • 通过XML文件来映射SQL语句

今天我们先来学习第一种方式,使用注解

添加依赖

在spring boot下使用 mybatis,首先我们要添加 mybatis 的依赖,其中 pagehelper 是第三方的一个分页插件。

       
           org.mybatis.spring.boot
           mybatis-spring-boot-starter
           2.1.0
       

       
       
           com.github.pagehelper
           pagehelper-spring-boot-starter
           1.2.12
       

       
           mysql
           mysql-connector-java
           runtime
       

配置application.yml

application.yml的配置包括两部分,一部分是数据源的配置,另一部分就是Mybatis的各种配置。

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/spring_boot_learn?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&useSSL=true
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root
    hikari:
      minimum-idle: 2
      maximum-pool-size: 5
mybatis:
  configuration:
    default-executor-type: reuse
    default-statement-timeout: 2

新建接口类

package org.schhx.springbootlearn.dao;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.schhx.springbootlearn.module.User;

public interface UserMapper {

    @Insert("insert into user (id, username, age) values(#{id}, #{username}, #{age})")
    int insert(User record);

    @Delete("delete from user where id = #{id}")
    int deleteByPrimaryKey(String id);

    @Update("update user set username = #{username}, age = #{age} where id = #{id}")
    int updateByPrimaryKey(User record);

    @Select("select * from user where id = #{id}")
    User selectByPrimaryKey(String id);
}

扫描接口类

现在我们还需要把接口类交给Spring来管理,扫描接口类的方式有两种

  • 在接口类上加上注解 @Mapper
  • 在项目启动类上加注解 @MapperScan(basePackages = {"org.schhx.springbootlearn.dao"}),它会扫描指定包下的所有接口类。

建议使用第二种方式。

测试

到此为止,我们已经把所有的配置都配置完毕,可以通过一个测试文件来测试是否能够正常访问数据库。

package org.schhx.springbootlearn.dao;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.schhx.springbootlearn.module.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

import java.util.UUID;

import static org.junit.Assert.*;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    @Transactional
    public void insert() throws Exception {
        User user = new User()
                .setId(UUID.randomUUID().toString())
                .setUsername("张三")
                .setAge(20);
        int result = userMapper.insert(user);
        Assert.assertEquals(1, result);
    }

    @Test
    @Transactional
    public void deleteByPrimaryKey() throws Exception {
        User user = new User()
                .setId(UUID.randomUUID().toString())
                .setUsername("张三")
                .setAge(20);
        userMapper.insert(user);
        int result = userMapper.deleteByPrimaryKey(user.getId());
        Assert.assertEquals(1, result);

    }

    @Test
    @Transactional
    public void updateByPrimaryKey() throws Exception {
        User user = new User()
                .setId(UUID.randomUUID().toString())
                .setUsername("张三")
                .setAge(20);
        userMapper.insert(user);
        user.setUsername("李四")
                .setAge(30);
        userMapper.updateByPrimaryKey(user);
        User result = userMapper.selectByPrimaryKey(user.getId());
        Assert.assertEquals(user, result);

    }

    @Test
    public void selectByPrimaryKey() throws Exception {
    }

}

完整示例

  • github

你可能感兴趣的:(Spring Boot入门系列(五) 使用Mybatis(Annotation版))