SpringBoot(9) - - SpringBoot整合Mybatis

項目路徑: https://github.com/zhaopeng01/springboot-study/tree/master/study9

Mybatis是對jdbc的封裝,他讓數據庫底層操作變得透明,Mybatis操作都是圍繞一個sqlsessionFactory實例開展,Mybatis通過配置文件關聯到各實體類的Mapper文件,Mapper文件中配置了每個類對數據庫所需進行的sql語句映射,在每次與數據庫交互時,通過sqlSessionFactory,拿到sqlSession,在執行sql命令

本文是基於SpringBoot 2.x 以上版本進行的整合

添加了一些其他的功能

PageHelper 分頁插件

搭建

在這裏插入圖片描述

添加基本依賴
在這裏插入圖片描述
在這裏插入圖片描述

其他依賴

在基本依賴後面添加一些其他依賴

 <!--添加其他依賴-->
        <!-- 分頁插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>
        <!-- alibaba的druid數據庫連接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>

目錄結構:

在這裏插入圖片描述

在啓動類中使用@MapperScan

@MapperScan可以指定要掃描的Mapper類的包的路徑

package com.zyc;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.zyc.mapper")
public class Study9Application {

    public static void main(String[] args) {
        SpringApplication.run(Study9Application.class, args);
    }
}

配置文件

我這裏用的是yml,這裏也可以根據自己喜歡的用properties

server:
  port: 8080


spring:
    datasource:
        name: mysql_test
        type: com.alibaba.druid.pool.DruidDataSource
        #druid相關配置
        druid:
          #監控統計攔截的filters
          filters: stat
          driver-class-name: com.mysql.jdbc.Driver
          #基本屬性
          url: jdbc:mysql://127.0.0.1:3306/zyc?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
          username: root
          password: 123456
          #配置初始化大小/最小/最大
          initial-size: 1
          min-idle: 1
          max-active: 20
          #獲取連接等待超時時間
          max-wait: 60000
          #間隔多久進行一次檢測,檢測需要關閉的空閒連接
          time-between-eviction-runs-millis: 60000
          #一個連接在池中最小生存的時間
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 'x'
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          #打開PSCache,並指定每個連接上PSCache的大小。oracle設爲true,mysql設爲false。分庫分表較多推薦設置爲false
          pool-prepared-statements: false
          max-pool-prepared-statement-per-connection-size: 20
## 該配置節點爲獨立的節點,有可能容易將這個配置放在spring的節點下,導致配置無法被識別
mybatis:
  mapper-locations: classpath:mapper/*.xml  #注意:一定要對應mapper映射xml文件的所在路徑
  type-aliases-package: com.zyc.model  # 注意:對應實體類的路徑

#pagehelper
pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql
    returnPageInfo: check

創建表

CREATE TABLE users(
  userId INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  userName VARCHAR(255) NOT NULL ,
  password VARCHAR(255) NOT NULL ,
  phone VARCHAR(255) NOT NULL
) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;

實體類

package com.zyc.entity;

public class Users {
    private Integer userId;

    private String userName;

    private String password;

    private String phone;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

創建Mapper

package com.zyc.mapper;

import com.zyc.entity.Users;

import java.util.List;

public interface UserMapper {

    int insert(Users users);

    List<Users> selectUsers();
}

創建映射文件

<?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.zyc.mapper.UserMapper">
    <sql id="BASE_TABLE">
    users
  </sql>

    <sql id="BASE_COLUMN">
    userId,userName,password,phone
  </sql>

    <insert id="insert" parameterType="com.zyc.entity.Users">
        INSERT INTO
        <include refid="BASE_TABLE"/>
        <trim prefix="(" suffix=")" suffixOverrides=",">
            userName,password,
            <if test="phone != null">
                phone,
            </if>
        </trim>
        <trim prefix="VALUES(" suffix=")" suffixOverrides=",">
            #{userName, jdbcType=VARCHAR},#{password, jdbcType=VARCHAR},
            <if test="phone != null">
                #{phone, jdbcType=VARCHAR},
            </if>
        </trim>
    </insert>

    <select id="selectUsers" resultType="com.zyc.entity.Users">
        SELECT
        <include refid="BASE_COLUMN"/>
        FROM
        <include refid="BASE_TABLE"/>
    </select>
</mapper>

在這裏namespace一定要對應自己的mapper接口對應的包路徑

service接口

package com.zyc.service;

import com.github.pagehelper.PageInfo;
import com.zyc.entity.Users;

public interface UserService {

    int addUser(Users user);

    PageInfo<Users> findAllUser(int pageNum, int pageSize);
}

service實現類

package com.zyc.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zyc.entity.Users;
import com.zyc.mapper.UserMapper;
import com.zyc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public int addUser(Users user) {

        return userMapper.insert(user);
    }

    /*
     * 在service層傳入參數,然後將參數傳遞給一個插件的一個靜態方法即可;
     * pageNum 開始頁數
     * pageSize 每頁顯示的數據條數
     * */
    @Override
    public PageInfo<Users> findAllUser(int pageNum, int pageSize) {
        //將參數傳給這個方法就可以實現物理分頁了,非常簡單。
        PageHelper.startPage(pageNum, pageSize);
        List<Users> userDomains = userMapper.selectUsers();
        PageInfo result = new PageInfo(userDomains);
        return result;
    }

}

controller

package com.zyc.controller;

import com.zyc.entity.Users;
import com.zyc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

/**
 * @Description: 測試用戶controller
 * @author zhaopeng
 * @email [email protected]
 */

@Controller
@RequestMapping(value = "/user")
public class UserController {

    @Autowired
    private UserService userService;

    @ResponseBody
    @PostMapping("/add")
    public int addUser(@RequestBody Users user){
        return userService.addUser(user);
    }

    @ResponseBody
    @GetMapping("/all")
    public Object findAllUser(
            @RequestParam(name = "pageNum", required = false, defaultValue = "1")
                    int pageNum,
            @RequestParam(name = "pageSize", required = false, defaultValue = "10")
                    int pageSize){
        return userService.findAllUser(pageNum,pageSize);
    }
}

最終項目路徑

在這裏插入圖片描述

然後啓動項目在這裏使用的是postman來進行的測試

添加一條數據
在這裏插入圖片描述
查詢數據

在這裏插入圖片描述

好的到這裏本篇文章就先到此了,創作不易,如果那裏有不合適的地方還請大家多多指教,寫這篇博的目的主要就是爲了方便自己以後的一個回憶和朋友學習時的一個參考,希望爲大家可以帶來幫助 ~ ~&

虛心的去學習,自信的去工作~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章