Mybatis-Plus系統化學習之環境准備與簡單使用


1.背景

平時在開發中會經常用到單表的CRUD操作

其實,這些單表的CRUD,完全不需要我們寫sql,可以使用mybatis-plus自動生成,不但高效而且不容用出錯!

2.mybatis-plus的強大

mybatis可以根據數據庫的設計一鍵生成實體、mapper、service、controller,

如果自己定義了模板,還可以實現對單表的上傳、下載、單表的接口訪問等

3.環境准備springboot整合mybatis-plus

1.准備數據庫,示例中數據庫名稱為mp-data

2.導入數據到mp-data中用於測試使用

案例中以系統用戶為例講解,導入數據腳本如下

/*
Navicat MySQL Data Transfer

Source Server         : 127.0.0.1
Source Server Version : 50525
Source Host           : localhost:3306
Source Database       : mp-data

Target Server Type    : MYSQL
Target Server Version : 50525
File Encoding         : 65001

Date: 2020-11-06 21:40:57
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
  `id` int(32) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `name` varchar(64) DEFAULT NULL,
  `version` int(64) DEFAULT NULL,
  `gender` int(32) DEFAULT NULL,
  `age` int(32) DEFAULT NULL,
  `position` varchar(64) DEFAULT NULL,
  `account` varchar(255) DEFAULT NULL,
  `password` varchar(225) DEFAULT NULL,
  `status` varchar(64) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL COMMENT '類型',
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES ('1', '張九', '3', '0', '100', '運維部經理', 'sff', '123456', '啟用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('2', '李四', '2', '0', '45', '項目經理', 'agfsg', '123456', '啟用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('3', '王五', '4', '0', '76', '項目經理', 'asgag', '123456', '啟用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('4', '趙六', '5', '0', '12', '運維工程師', '5sf', '123456', '啟用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('5', '張無忌', null, '0', '15', '運維工程師', 'as5f', '123456', '啟用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('6', '趙敏', null, '1', '14', '運維工程師', 'asefga45', '123456', '啟用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('7', '金毛獅王', null, '1', '45', '運維工程師', '54a5', '123456', '啟用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('8', '孫悟空', null, '1', '76', '運維工程師', '64asf', '123456', '啟用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('9', '豬八戒', null, '1', '14', '運維工程師', 'asg45', '123456', '啟用', '2019-01-12 12:00:00', null, null);
View Code

 

3.構建springboot maven項目,名稱為mp-demo,結構如下

4.引入pom.xm中引入jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ldp</groupId>
    <artifactId>mp-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mp-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>

        <!--鏈接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.2</version>
        </dependency>

       <!--  mybatis-plus包-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>

       <!--數據庫驅動包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <!-- xml放在java目錄下-->
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <!--指定資源的位置(xml放在resources下,可以不用指定)-->
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>
</project>
View Code

5.springboot主配置文件application.yml,其中有mybatis-plus的配置,有說明認真看一下,如下

# 配置端口
server:
  port: 8099
  servlet:
    context-path: /api

spring:
  # 配置數據源
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mp-data?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&
    username: root
    password: admin

# mybatis-plus相關配置
mybatis-plus:
  # xml掃描,多個目錄用逗號或者分號分隔(告訴 Mapper 所對應的 XML 文件位置)
  mapper-locations: classpath:mapper/*.xml
  # 以下配置均有默認值,可以不設置
  global-config:
    db-config:
      #主鍵類型 AUTO:"數據庫ID自增" INPUT:"用戶輸入ID",ID_WORKER:"全局唯一ID (數字類型唯一ID)", UUID:"全局唯一ID UUID";
      id-type: auto
      #字段策略 IGNORED:"忽略判斷"  NOT_NULL:"非 NULL 判斷")  NOT_EMPTY:"非空判斷"
      field-strategy: NOT_EMPTY
      #數據庫類型
      db-type: MYSQL
  configuration:
    # 是否開啟自動駝峰命名規則映射:從數據庫列名到Java屬性駝峰命名的類似映射
    map-underscore-to-camel-case: true
    # 如果查詢結果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
    call-setters-on-nulls: true
    # 這個配置會將執行的sql打印出來,在開發或測試的時候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

logging:
  config: classpath:logback.xml
View Code

6.日志文件logback.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!-- 定義日志的根目錄 -->
    <property name="LOG_HOME" value="logs"/>
    <!-- 控制台輸出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}-[%t]-[ %-5level ] [ %logger{50} ] - %msg%n</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!-- aop日志輸出-mms -->
    <appender name="log-all" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{MM-dd HH:mm:ss.SSS}-[%t]-[%-5level]-[%logger{30}] - %msg%n</pattern>
            <charset>utf8</charset>
        </encoder>
        <file>./${LOG_HOME}/log-all.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/log-all-%d{yyyy-MM-dd}-%i.log.zip</fileNamePattern>
            <maxHistory>30</maxHistory>
            <totalSizeCap>6GB</totalSizeCap>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <!--輸出到error-all-->
    <appender name="error-all" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/error-all.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/error-all-%d{yyyy-MM-dd}-%i.log.zip</fileNamePattern>
            <MaxHistory>30</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} -[%t]- [ %-5level ] - %msg%n</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 基礎日志輸出級別 -->
    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="log-all"/>
        <appender-ref ref="error-all"/>
    </root>

</configuration>
View Code

7.操作的數據庫實體對象SysUser.java如下

注意為了后面編寫代碼方便,開啟了鏈式編程,即增加了注解:@Accessors(chain = true),表示開啟鏈式編程默認是關閉的;

package com.ldp.entity;


import lombok.Data;
import lombok.experimental.Accessors;

import java.util.Date;

/**
 * @author 姿勢帝-博客園
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 11/06 8:55
 * @description
 */
@Data
@Accessors(chain = true)
public class SysUser  {

    private Integer id;

    private Integer version;

    private Integer age;

    private Integer gender;

    private String name;

    private String position;

    private String account;

    private String password;

    private String status;

    private String type;

    private Date createTime;

    private Date updateTime;
    
}
View Code

8.SysUserMapper.java接口,主要是繼承了BaseMapper<SysUser>,全靠它自動幫我們完成了單表的CRUD

package com.ldp.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ldp.entity.SysUser;

/**
 * @author 姿勢帝-博客園
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 11/06 8:54
 * @description
 */
public interface SysUserMapper extends BaseMapper<SysUser> {
}
View Code

9.啟動類文件如下,主要是啟動類上加了掃描mapper接口的配置

@MapperScan({"com.ldp.mapper"})
package com.ldp;

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


@SpringBootApplication
@MapperScan({"com.ldp.mapper"})
public class MpDemoApplication {
    /**
     * maven倉庫地址
     * https://mvnrepository.com/
     */
    public static void main(String[] args) {
        SpringApplication.run(MpDemoApplication.class, args);
    }

}
View Code

到此基本環境就准備完了,別看我什么代碼都沒寫,只是弄了一個結構,

但是我告訴你SysUser表的所有增刪改查都已經實現了,

下面大家可以看一下測試怎么使用SysUserMapper完成增刪改查的,草雞簡單額

3.基本crud實現

什么代碼都不用寫,基本增刪改查就已經有了

測試代碼如下:

package com.ldp.demo01;

import com.ldp.entity.SysUser;
import com.ldp.mapper.SysUserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

/**
 * @author 姿勢帝-博客園
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 11/06 9:43
 * @description mybatis-plus 快速入門使用基本的CRUD
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class BaseCrudTest {
    @Autowired
    private SysUserMapper sysUserMapper;

    /**
     * 增加
     * <p>
     * ==>  Preparing: INSERT INTO sys_user ( age, name ) VALUES ( ?, ? )
     * ==> Parameters: 18(Integer), 李東平(String)
     */
    @Test
    public void test() {
        int row = sysUserMapper.insert(new SysUser().setName("李東平").setAge(18));
        System.out.println("受影響行數:" + row);
    }

    /**
     * 根據id刪除
     * <p>
     * ==>  Preparing: DELETE FROM sys_user WHERE id=?
     * ==> Parameters: 18(Integer)
     */
    @Test
    public void deleteById() {
        int row = sysUserMapper.deleteById(18);
        System.out.println("受影響行數:" + row);
    }

    /**
     * 根據id修改
     * <p>
     * ==>  Preparing: UPDATE sys_user SET name=? WHERE id=?
     * ==> Parameters: 李東平->ldp(String), 20(Integer)
     * <==    Updates: 1
     */
    @Test
    public void updateById() {
        int row = sysUserMapper.updateById(new SysUser().setName("李東平->ldp").setId(20));
        System.out.println("受影響行數:" + row);
    }

    /**
     * 根據id查詢
     * 
     * ==>  Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user WHERE id=?
     * ==> Parameters: 20(Integer)
     */
    @Test
    public void selectById() {
        SysUser sysUser = sysUserMapper.selectById(20);
        System.out.println("sysUser:" + sysUser);
    }

    /**
     * 查詢所有
     * <p>
     * ==>  Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user
     * ==> Parameters:
     */
    @Test
    public void selectList() {
        List<SysUser> users = sysUserMapper.selectList(null);
        System.out.println(users);
    }

}
View Code

mybatis-plus系統化學習教程:https://www.cnblogs.com/newAndHui/p/14141950.html

完美!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM