Spring Boot入門(七):使用MyBatis訪問MySql數據庫(xml方式)

本系列博客帶你一步一步的學習Spring Boot,如幫助到你,不勝榮幸,若有錯誤,歡迎指正!html

本篇博客咱們講解下在Spring Boot中使用MyBatis訪問MySql數據庫(xml方式)的簡單用法。java

本系列其它文章以下所示:mysql

Spring Boot入門(一):使用IDEA建立Spring Boot項目並使用yaml配置文件git

Spring Boot入門(二):使用Profile實現多環境配置管理&如何獲取配置文件值github

Spring Boot入門(三):使用Scheduled註解實現定時任務web

Spring Boot入門(四):開發Web Api接口經常使用註解總結spring

Spring Boot入門(五):使用JDBC訪問MySql數據庫sql

Spring Boot入門(六):使用MyBatis訪問MySql數據庫(註解方式)數據庫

1. 前期準備

假設你的機器已經安裝好了MySql,咱們先執行以下語句建立數據庫和表:apache

CREATE DATABASE springbootaction_db;

create table author
(
  author_id   int auto_increment comment '做者id' primary key,
  author_name varchar(20) not null comment '姓名',
  pen_name    varchar(20) not null comment '筆名'
)
comment '做者';

2. 修改pom文件

pom文件引入mybatis的starter pom和mysql的驅動,因後面要編寫控制器,所以也引入下阿里巴巴的fastjson:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.35</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

說明:引入了mybatis-spring-boot-starter後,能夠再也不引用spring-boot-starter-jdbc,由於前者已經依賴於後者。

3. 配置數據源

在resources/application.yml中配置數據源:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springbootaction_db
    username: root
    password:

4. 修改配置文件

在application.yml中添加mybatis配置:

mybatis:
  mapper-locations: classpath:mybatis/*.xml
  type-aliases-package: com.zwwhnly.springbootaction.mybatis.entity

其中,mapper-locations爲mybatis xml文件的路徑,type-aliases-package爲定義的實體所在的包名。

5. 定義數據庫實體

定義數據庫實體Author:

package com.zwwhnly.springbootaction.mybatis.entity;

import com.alibaba.fastjson.annotation.JSONField;

public class Author {
    @JSONField(name = "author_id")
    private Integer authorId;
    @JSONField(name = "author_name")
    private String authorName;
    @JSONField(name = "pen_name")
    private String penName;

    public Integer getAuthorId() {
        return authorId;
    }

    public void setAuthorId(Integer authorId) {
        this.authorId = authorId;
    }

    public String getAuthorName() {
        return authorName;
    }

    public void setAuthorName(String authorName) {
        this.authorName = authorName;
    }

    public String getPenName() {
        return penName;
    }

    public void setPenName(String penName) {
        this.penName = penName;
    }
}

6. 編寫Dao層代碼

定義接口AuthorMapperV2:

package com.zwwhnly.springbootaction.mybatis.xml;

import com.zwwhnly.springbootaction.mybatis.entity.Author;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface AuthorMapperV2 {

    int add(@Param("author_name") String authorName, @Param("pen_name") String penName);

    int update(@Param("author_name") String authorName, @Param("pen_name") String penName, @Param("id") Integer id);

    int delete(Integer id);

    Author findAuthor(@Param("id") Integer id);

    List<Author> findAuthorList();
}

注意:接口要添加@Mapper註解。

7. 編寫Service層代碼

定義類AuthorServiceV2:

package com.zwwhnly.springbootaction.mybatis.xml;

import com.zwwhnly.springbootaction.mybatis.entity.Author;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class AuthorServiceV2 {
    @Autowired
    private AuthorMapperV2 authorMapperV2;

    public int add(String authorName, String penName) {
        return this.authorMapperV2.add(authorName, penName);
    }

    public int update(String authorName, String penName, Integer id) {
        return this.authorMapperV2.update(authorName, penName, id);
    }

    public int delete(Integer id) {
        return this.authorMapperV2.delete(id);
    }

    public Author findAuthor(Integer id) {
        return this.authorMapperV2.findAuthor(id);
    }

    public List<Author> findAuthorList() {
        return this.authorMapperV2.findAuthorList();
    }
}

注意:類添加@Service註解。

8. 添加mybatis xml文件

在resources目錄下,新建mybatis文件夾,而後新建AuthorMapper.xml文件,分別實現上面定義的新增,修改,刪除,獲取單個做者信息,獲取做者列表功能:

<?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.zwwhnly.springbootaction.mybatis.xml.AuthorMapperV2">
    <resultMap id="authorMap" type="Author">
        <result property="authorId" column="author_id"/>
        <result property="authorName" column="author_name"/>
        <result property="penName" column="pen_name"/>
    </resultMap>

    <insert id="add">
        INSERT INTO author(author_name, pen_name)
        VALUES(#{author_name}, #{pen_name});
    </insert>
    <update id="update">
        UPDATE author
        SET author_name = #{author_name,jdbcType=VARCHAR},
        pen_name = #{pen_name,jdbcType=VARCHAR}
        WHERE author_id = #{id,jdbcType=INTEGER};
    </update>
    <delete id="delete">
        DELETE FROM author
        WHERE author_id = #{id};
    </delete>
    <select id="findAuthor" resultMap="authorMap" resultType="Author">
       SELECT author_id, author_name, pen_name
       FROM author
       WHERE author_id = #{id};
    </select>
    <select id="findAuthorList" resultMap="authorMap">
        SELECT author_id, author_name, pen_name
        FROM author;
    </select>
</mapper>

9. 編寫Controller代碼

新建控制器AuthorControllerV2:

package com.zwwhnly.springbootaction.controller;

import com.alibaba.fastjson.JSONObject;
import com.zwwhnly.springbootaction.mybatis.entity.Author;
import com.zwwhnly.springbootaction.mybatis.xml.AuthorServiceV2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping(value = "/mybatis/author")
public class AuthorControllerV2 {
    @Autowired
    private AuthorServiceV2 authorServiceV2;

    /**
     * 查詢做者列表
     */
    @RequestMapping(value = "getAuthorListV2", method = RequestMethod.GET)
    public Map<String, Object> getAuthorList() {
        List<Author> authorList = this.authorServiceV2.findAuthorList();
        Map<String, Object> param = new HashMap<>();
        param.put("total", authorList.size());
        param.put("rows", authorList);
        return param;
    }

    /**
     * 查詢單個做者信息
     */
    @RequestMapping(value = "/getAuthorV2/{authorId:\\d+}", method = RequestMethod.GET)
    public Author getAuthor(@PathVariable Integer authorId) {
        Author author = this.authorServiceV2.findAuthor(authorId);
        if (author == null) {
            throw new RuntimeException("查詢錯誤");
        }
        return author;
    }

    /**
     * 新增
     */
    @RequestMapping(value = "addV2", method = RequestMethod.POST)
    public void add(@RequestBody JSONObject jsonObject) {
        String authorName = jsonObject.getString("authorName");
        String penName = jsonObject.getString("penName");

        try {
            this.authorServiceV2.add(authorName, penName);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("新增錯誤");
        }
    }

    /**
     * 更新
     */
    @RequestMapping(value = "/updateV2/{authorId:\\d+}", method = RequestMethod.PUT)
    public void update(@PathVariable Integer authorId, @RequestBody JSONObject jsonObject) {
        Author author = this.authorServiceV2.findAuthor(authorId);
        String authorName = jsonObject.getString("authorName");
        String penName = jsonObject.getString("penName");

        try {
            this.authorServiceV2.update(authorName, penName, author.getAuthorId());
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("更新錯誤");
        }
    }

    /**
     * 刪除
     */
    @RequestMapping(value = "/deleteV2/{authorId:\\d+}", method = RequestMethod.DELETE)
    public void delete(@PathVariable Integer authorId) {
        try {
            this.authorServiceV2.delete(authorId);
        } catch (Exception e) {
            throw new RuntimeException("刪除錯誤");
        }
    }
}

10. 使用Postman驗證

10.1 驗證新增

由於新增是Post請求,所以這裏咱們使用下Postman工具:

調用完接口,發現數據庫新增數據成功。

而後用一樣的方法新增下魯迅的信息。

10.2 驗證更新

調用更新接口將魯迅的名字從周做人修改成周樹人:

調用完接口,發現數據庫更新數據成功。

10.3 驗證獲取列表

在瀏覽器訪問http://localhost:8080/mybatis/author/getAuthorListV2,返回數據以下:

{
  "total": 2,
  "rows": [
    {
      "authorId": 1,
      "authorName": "王衛國",
      "penName": "路遙"
    },
    {
      "authorId": 2,
      "authorName": "周樹人",
      "penName": "魯迅"
    }
  ]
}

10.4 驗證獲取單個數據

在瀏覽器訪問http://localhost:8080/mybatis/author/getAuthorV2/1,返回以下數據:

{
  "authorId": 1,
  "authorName": "王衛國",
  "penName": "路遙"
}

10.5 驗證刪除

調用刪除接口,將魯迅的數據刪除:

此時訪問http://localhost:8080/mybatis/author/getAuthorListV2,返回數據只有1條了:

{
  "total": 1,
  "rows": [
    {
      "authorId": 1,
      "authorName": "王衛國",
      "penName": "路遙"
    }
  ]
}

11. 源碼

源碼地址:https://github.com/zwwhnly/springboot-action.git,歡迎下載。

12. 參考

Spring Boot 揭祕與實戰(二) 數據存儲篇 - MyBatis整合

歡迎掃描下方二維碼關注我的公衆號:申城異鄉人。

相關文章
相關標籤/搜索