SpringBoot邊學邊用(二)SpringBoot 整合 Mybatis(xml檔案形式)

孫迎港發表於2020-12-08

 

在SpringBoot整合MyBatis時,存在兩種常用方式:基於xml檔案形式與註解形式。xml的可維護性高,在實際開發中表結構往往很複雜,所以在實際開發中建議大家用xml

建立資料表

CREATE TABLE `customer` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `job` varchar(255) NOT NULL,
  `phone` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Records of customer
-- ----------------------------
INSERT INTO `customer` VALUES ('1', '小明', '醫生','13567344567');
INSERT INTO `customer` VALUES ('2', '小紅', '教師','18756576778');

新增專案依賴

我們選擇使用MyBatis運算元據庫,所以需要新增一些依賴,在專案pom.xml檔案<dependencies></dependencies>標籤內新增如下程式碼

        <!--mybatis-spring介面卡-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
        <!--mysql驅動包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

建立專案目錄結構

在專案啟動類同級包下新建所需包,並在resources中建立Mapper資料夾

建立實現方法

Customer.java

在com.syg.demo.po下建立資料表Customer對應的實體

package com.syg.demo.po;
​
public class Customer {
    private Integer id;
    private String username;
    private String job;
    private String phone;
​
    public Integer getId() {
        return id;
    }
​
    public void setId(Integer id) {
        this.id = id;
    }
​
    public String getUsername() {
        return username;
    }
​
    public void setUsername(String username) {
        this.username = username;
    }
​
    public String getJob() {
        return job;
    }
​
    public void setJob(String job) {
        this.job = job;
    }
​
    public String getPhone() {
        return phone;
    }
​
    public void setPhone(String phone) {
        this.phone = phone;
    }
}

CustomerDao.java

在com.syg.demo.dao下建立mapper介面,通過@Mapper註解使SpringBoot自動建立customerDao物件加入到容器中

package com.syg.demo.dao;
​
import com.syg.demo.po.Customer;
import org.apache.ibatis.annotations.Mapper;
​
@Mapper
public interface CustomerDao {
    public Customer findCustomerById(Integer id);
}

CustomerMapper.xml

在resources中的Mapper資料夾下,建立mapper介面對應的對映檔案CustomerMapper.xml,實現對資料庫的具體操作,其中<mapper>標籤中的namespace繫結上邊建立的CustomerDao

<?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.syg.demo.dao.CustomerDao">
    <select id="findCustomerById" parameterType="Integer" resultType="Customer">
        select * from customer where id = #{id}
    </select>
</mapper>

CustomerService

在com.syg.demo.service下建立Service層介面方法

package com.syg.demo.service;
​
import com.syg.demo.po.Customer;
​
public interface CustomerService {
    public Customer findCustomerById(Integer id);
}

CustomerServiceImpl

在com.syg.demo.service.impl下建立CustomerServiceImpl具體實現Service介面方法,使用@Service表示為Service層,同時使SpringBoot自動建立customerService物件加入到容器中,在方法中使用@Autowired註解呼叫容器中的customerDao物件,並呼叫其查詢方法

package com.syg.demo.service.impl;
​
import com.syg.demo.dao.CustomerDao;
import com.syg.demo.po.Customer;
import com.syg.demo.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
​
@Service
public class CustomerServiceImpl implements CustomerService {
​
    @Autowired
    private CustomerDao customerDao;
    //查詢客戶
    public Customer findCustomerById(Integer id){
        return this.customerDao.findCustomerById(id);
    }
}

CustomerController

在com.syg.demo.controller下建立CustomerController,使用@RestController註解表示為Controller層,在方法中使用@Autowired註解呼叫容器中的customerService物件,並呼叫其實現的查詢方法,通過@GetMapping定義GET方式訪問的路由地址,方法定義的引數id由url傳遞

package com.syg.demo.controller;
​
import com.syg.demo.po.Customer;
import com.syg.demo.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
​
@RestController
public class CustomerController {
​
    @Autowired
    private CustomerService customerService;
​
    @GetMapping("/findCustomerById")
    public Customer findCustomerById(Integer id){
        return customerService.findCustomerById(id);
    }
}

編寫相關配置

開啟resources目錄下application.properties檔案,編寫如下配置:

#修改伺服器埠
server.port=8081
​
#指定資料庫驅動
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#資料庫jdbc連線url地址
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
#資料庫賬號
spring.datasource.username=root
spring.datasource.password=123456
​
#mybatis相關
#實體類包路徑
mybatis.type-aliases-package=com.syg.demo.po
#掃描mapper對映檔案
mybatis.mapper-locations=classpath:Mapper/*.xml

訪問測試

重新執行專案

開啟路由器,輸入url地址:http://localhost:8081/findCustomerById?id=1

可以成功訪問到Id為1的資料

快速構建xml檔案

通過本節內容,許多讀者可能會有疑惑,隨著業務邏輯的增加,xml檔案的編寫會越來越複雜,如果都要我們手動編寫,要花費多少時間啊?

這裡可以用mybatis generator自動生成就會變得很方便,由於篇幅內容有限,將在專欄後續章節中介紹

 

閱讀更多技術文章,及時獲取內容更新,請掃碼關注微信公眾號-大資料School!

歡迎評論區留下你的精彩評論~ 覺得文章不錯可以分享到朋友圈讓更多的小夥伴看到哦~ 客官!在看一下唄

相關文章