Spring全家桶学习笔记 04 | 轻松整合Mybatis

本节利用Mybatis实现数据库相关操作,数据库选择mysql

Mybatis的配置分为两个版本,注解版与XML版,两种版本使用场景有些许不同。

注解版

  • 配置依赖

mybatis-spring-boot-starter 是mybatis针对spring推出的框架,简单易用。在pom.xml中最好指定一下它的版本。而Mysql模块与Web模块不用多说。


    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        2.0.0
    
     
        mysql
        mysql-connector-java
    

  • applicaiton.properties

mybatis.type-aliases-package 用于配置类型别名的包名,在映射时只需要写类名就足够了

spring.datasource.urlusernamepassword 不用多说,注意所用数据库的名称及参数

spring.datasource.driver-class-name 用于配置mysql驱动

mybatis.type-aliases-package=com.example.datasource-demo.model 

spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

这些配置会被Spring Boot自动加载从而将数据源注入进 SqlSessionFactory 中。同时SqlSessionFactory也会自动注入到 Mapper 中。

  • 表结构

user表结构
  • 实体类

此处我使用了 Lombok 插件,引入了 @Data 注解,可以免去 get / set

user实体
  • Mapper

注解版最大的特点就是Sql语句可以直接以注解的形式写在mapper接口中

userMapper

那么如何让SpringBoot识别到这个mapper呢?添加 @Mapper 注解是一个方式,但需要在每一个Mapper上都添加一个注解,更简便的方式是在启动类中添加注解,自动扫描mapper包。

MapperScan
  • Controller

为了测试方便,简单写了一个delete接口,别忘了为Controller加上@RestController注解

    @RequestMapping(value = "/delete/{id}")
    public void delete(@PathVariable("id") Long id) {
        userMapper.delete(id);
    }
  • 测试结果

    1. user表中数据
    user表
    1. 测试delete接口


      delete接口
    2. id为1的字段被删除


      此时表中数据

XML版

application.yml

yml文件与properties文件同是配置文件,区别在于前者通过树形结构分层,使得层次更加分明,后者则相对比较直接,当工程中同时存在application.properties文件和 application.yml文件时,yml文件中的配置优先级会更高,所以保险起见,工程中只用一种类型即可。

application.yml配置内容:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml
  type-aliases-package: com.example.datasource-demo.model

可以见到,相比于注解版,配置文件中新增了mybatis的内容,config-location 指定了配置文件的路径,mapper-locations 指定了映射xml文件的路径,type-aliases-package 在上文解释过。

mybatis-config.xml

在applicaiton.yml中我们配置了config-location ,这个配置文件需要我们自行创建,特别注意头文件不能遗漏




    
        
        
        
        
        
        
    

UserMapper

xml版与注解版最大的不同就是sql语句是存放在独立的映射xml文件中的,根据我们在配置文件中的路径创建UserMapper.xml文件





    
        
        
        
        

    

    
        id, username, password, nick_name
    

    

    

而UserMapper接口只需要定义接口方法即可,无需注解

public interface UserMapper {
    
    List getAll();
 
    User getOne(Long id);

}

运行项目,结果与注解版并无二致

// http://localhost:8080/getUser?id=2

{
  "code": 200,
  "message": "查询用户成功",
  "data": {
    "id": 2,
    "username": "jerry",
    "password": "123123",
    "nickName": "Jerry"
  }
}

如何选择

两种模式各有特点与适用场景,注解版适合简单快速的模式,适合无需大量多表连接查询的情况,而xml模式则更适合传统中大型项目,灵活地生成Sql。

你可能感兴趣的:(Spring全家桶学习笔记 04 | 轻松整合Mybatis)