SpringBoot 中的 MyBatis

1. 整合 MyBatis#

Maven Repository 下查询 Mysql 和 MyBatis 对应的 SpringBoot 版本。

在 SpringBoot 项目下的 pom.xml 文件下添加依赖。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.connector.version}</version>
</dependency>

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>${mybatis.version}</version>
</dependency>

2. 设置 MyBatis#

application.properties 文件中配置 MyBatiste,具体配置项查看 MyBatis 官方文档

#mysql
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/laravel_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#mybatis
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.mybatis.po
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.cache-enabled=false
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

3. 准备工作#

在项目下创建 com.example.mybatis.pocom.example.mybatis.daocom.example.mybatis.controller 包(因为只是为了演示 MyBatis 功能,所以简化项目结果没有创建 service 包),在 resource 目录下创建 mapper 文件夹,项目目录如下:

SpringBoot 中的 MyBatis

3.1. 数据库表结果#

CREATE  TABLE `users` ( 
    `id` INT  UNSIGNED  NOT  NULL  PRIMARY  KEY auto_increment, 
    `name` VARCHAR  (  12  )  NOT  NULL, 
    `password` VARCHAR  (  80  )  NOT  NULL,
    `last_token` text, 
    `status` TINYINT  NULL  DEFAULT  0, 
    `created_at` TIMESTAMP  NULL  DEFAULT  NULL, 
    `updated_at` TIMESTAMP  NULL  DEFAULT  NULL  
)  ENGINE  =  INNODB  DEFAULT  CHARSET  = utf8mb4 COLLATE  = utf8mb4_general_ci;

3.2. 准备 Po#

package com.example.mybatis.po;

import java.io.Serializable;
import java.util.Date;

public class UserPo implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;
    private String name;
    private String password;
    private String lastToken;
    private Byte status;
    private Long createdAt;
    private Long updatedAt;

    ......
}

3.3. 准备 Dao#

package com.example.mybatis.dao;

import com.example.mybatis.po.UserPo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

@Mapper
@Repository
public interface UserDao {
    ......
}

3.4. 准备 Mapper 映射文件#

<?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.example.mybatis.dao.UserDao">
    ......
</mapper>

3.5. 准备 Controller#

package com.example.mybatis.controller;

import com.example.mybatis.dao.UserDao;
import com.example.mybatis.po.UserPo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
  private UserDao userDao;

    ......
}

4. 使用 MyBatiste#

4.1. 查询#

UserDao 文件中创建 selectUserById 接口方法(注意方法名命名规则)。

UserPo selectUserById(@Param("id") Long id);

resource->mapper->UserDao.xml 文件夹下,创建映射语句。

<select id="selectUserById" resultType="com.example.mybatis.po.UserPo">
    SELECT
    *
  FROM USERS
    WHERE id = #{id}
</select>

UserController 文件中创建根据 ID 查询用户接口 getUser

@GetMapping("")
public UserPo getUser(@RequestParam("id") Long id){
    return userDao.selectUserById(id);
}

Postman 调用

SpringBoot 中的 MyBatis

4.2. 插入#

UserDao 文件中创建 insertUser 接口方法(注意方法名命名规则)。

void insertUser(@Param("userPo") UserPo userPo);

resource->mapper->UserDao.xml 文件夹下,创建映射语句。

<insert id="insertUser" parameterType="com.example.mybatis.po.UserPo">
        INSERT INTO USERS (name, password, last_token, status, created_at, updated_at)
        VALUES (#{userPo.name}, #{userPo.password}, #{userPo.lastToken}, #{userPo.status}, #{userPo.createdAt}, #{userPo.updatedAt})
    </insert>

UserController 文件中创建根据 ID 查询用户接口 addUser

@PostMapping("/add")
    public String addUser(
            @RequestParam("name") String name,
            @RequestParam("password") String password){
        Long crtTime = System.currentTimeMillis();

        UserPo userPo = new UserPo();
        userPo.setName(name);
        userPo.setPassword(password);
        userPo.setCreatedAt(crtTime);
        userPo.setUpdatedAt(crtTime);

        userDao.insertUser(userPo);
        return "插入成功";
    }

Postman 调用

SpringBoot 中的 MyBatis

4.3. 更新#

UserDao 文件中创建 updateUser 接口方法(注意方法名命名规则)。

void insertUser(@Param("userPo") UserPo userPo);

resource->mapper->UserDao.xml 文件夹下,创建映射语句。

<insert id="insertUser" parameterType="com.example.mybatis.po.UserPo">
        INSERT INTO USERS (name, password, last_token, status, created_at, updated_at)
        VALUES (#{userPo.name}, #{userPo.password}, #{userPo.lastToken}, #{userPo.status}, #{userPo.createdAt}, #{userPo.updatedAt})
    </insert>

UserController 文件中创建根据 ID 查询用户接口 updateUser

@PostMapping("/add")
    public String addUser(
            @RequestParam("name") String name,
            @RequestParam("password") String password){
        Long crtTime = System.currentTimeMillis();

        UserPo userPo = new UserPo();
        userPo.setName(name);
        userPo.setPassword(password);
        userPo.setCreatedAt(crtTime);
        userPo.setUpdatedAt(crtTime);

        userDao.insertUser(userPo);
        return "插入成功";
    }

Postman 调用

SpringBoot 中的 MyBatis

4.4. 删除#

UserDao 文件中创建 deleteUser 接口方法(注意方法名命名规则)。

void deleteUser(@Param("id") Long id);

resource->mapper->UserDao.xml 文件夹下,创建映射语句。

<delete id="deleteUser">
        DELETE FROM USERS WHERE id = #{id}
    </delete>

UserController 文件中创建根据 ID 查询用户接口 deleteUser

@PostMapping("/delete")
    public String deleteUser(@RequestParam("id") Long id){
        UserPo userPo = userDao.selectUserById(id);
        if(userPo == null){
            return "该用户不存在";
        }

        userDao.deleteUser(id);
        return "删除成功";
    }

Postman 调用

SpringBoot 中的 MyBatis

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 4

mapper 使用 xml 文件和 java 类的区别是什么?我刚接触这个。。别人视频是写的 java 类来实现 mapper 的

5年前 评论
pardon110 5年前

再添加一个 Service 层就好了

5年前 评论

dao 层每个 mapper 可以不加 @Mapper 注解,直接在启动器类里面加 @MapperScan ("mapper 所在包")

5年前 评论