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的

4年前 评论
pardon110 4年前

再添加一个Service层就好了

4年前 评论

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

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!