SpringBoot 中的 MyBatis

Mr_Yan發表於2019-06-30

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

相關文章