學會Mybatis-Plus,從此告別加班,誰用誰知道!

前言:

MyBatis-Plus(簡稱MP)是一個MyBatis的增強工具,在MyBatis的基礎上只做增強不做改變,爲簡化開發、提高效率而生。它的願景就是成爲 MyBatis 最好的搭檔,就像魂鬥羅中的 1P、2P,基友搭配,效率翻倍。

要說起mp就得先說 mybatis和hibernate,mybatis的衆所周知他的好處就是sql寫起來很靈活,hibernate的好處就是不用寫sql通過實體類的關係配置,只要操作類就可以啦,,拋棄了數據庫中心的思想,完全的面向對象思想。所以有人就想有沒有集兩者優點的框架呢,於是mp(mybatis-Plus)誕生啦。

這篇文章通過mybatis-plus整合springboot來講解mybatis-plus的一些基本操作!

正文:

一、整合springboot和mybatis-plus

1.新建一個springboot項目

這個我在之前的博客寫過,傳送門https://blog.csdn.net/jdk_wangtaida/article/details/86293548

2.我的pom文件

<?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 http://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.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.dada</groupId>
    <artifactId>springboot_jsp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_jsp</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>RELEASE</version>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- mybatisPlus 核心庫 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!-- 數據庫連接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>
        <!-- 數據庫 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--添加 代碼生成器 依賴-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.我的application.yml文件

# 配置端口
server:
  port: 9202
spring:
  # 配置數據源
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/bendi?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
# 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

4.我的逆向工程類CodeGenerator

package com.dada.springboot_jsp.until;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class CodeGenerator {
    /**
     * 數據庫 URL
     */
    private static final String URL = "jdbc:mysql://localhost:3306/bendi?characterEncoding=utf8&useSSL=false";
    /**
     * 數據庫驅動
     */
    private static final String DRIVER_NAME = "com.mysql.jdbc.Driver";
    /**
     * 數據庫用戶名
     */
    private static final String USERNAME = "root";
    /**
     * 數據庫密碼
     */
    private static final String PASSWORD = "root";
    /**
     * @author 值
     */
    private static final String AUTHOR = "dada";
    /**
     * 需要生成的表名
     */
    public static final String[] INCLUDE_TABLES = {"user"};
    /**
     * 代碼所在服務名
     */
    public static final String SERVICE_NAME = "study";
    /**
     * 代碼生成的包名
     */
    public static String PACKAGE_NAME = "com.dada.springboot_jsp";

    /**
     * 代碼生成路徑
     */
    public static final String Output_Dir_NAME = "F:\\tower\\springboot_jsp\\src\\main\\java";

    public static void main(String[] args) {
            AutoGenerator mpg = new AutoGenerator();

            // 全局配置
            GlobalConfig gc = new GlobalConfig();
            gc.setOutputDir(Output_Dir_NAME);
            gc.setFileOverride(true);
            gc.setActiveRecord(true);
            gc.setEnableCache(true);// XML 二級緩存
            gc.setBaseResultMap(true);// XML ResultMap
            gc.setBaseColumnList(true);// XML columList
            gc.setAuthor(AUTHOR);

            // 自定義文件命名,注意 %s 會自動填充表實體屬性!
            gc.setMapperName("%sDao");
            gc.setXmlName("%sMapper");
            gc.setServiceName("%sService");
            gc.setServiceImplName("%sServiceImpl");
            gc.setControllerName("%sController");
            mpg.setGlobalConfig(gc);

            // 數據源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setDbType(DbType.MYSQL);
        /*dsc.setTypeConvert(new MySqlTypeConvert(){
            // 自定義數據庫表字段類型轉換【可選】
            @Override
            public DbColumnType processTypeConvert(String fieldType) {
                System.out.println("轉換類型:" + fieldType);
                return super.processTypeConvert(fieldType);
            }
        });*/

            dsc.setDriverName( DRIVER_NAME);
            dsc.setUrl(URL);
            dsc.setUsername(USERNAME);
            dsc.setPassword(PASSWORD);
            mpg.setDataSource(dsc);

            // 策略配置
            StrategyConfig strategy = new StrategyConfig();
            // strategy.setCapitalMode(true);// 全局大寫命名 ORACLE 注意
            // strategy.setTablePrefix(new String[] { "tlog_", "tsys_" });// 此處可以修改爲您的表前綴
            strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
            strategy.setInclude(INCLUDE_TABLES); // 需要生成的表
            // strategy.setExclude(new String[]{"test"}); // 排除生成的表
            mpg.setStrategy(strategy);

            // 包配置
            PackageConfig pc = new PackageConfig();
            pc.setParent(PACKAGE_NAME);
            pc.setModuleName(SERVICE_NAME);
            mpg.setPackageInfo(pc);

            // 執行生成
            mpg.execute();
        }


    }

5.建表語句和插入數據的語句

CREATE TABLE `user` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` varchar(32) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年齡',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';

INSERT INTO `user` VALUES (1, '阿達', 20);
INSERT INTO `user` VALUES (2, '小達', 19);
INSERT INTO `user` VALUES (3, '達達', 18);

6.執行逆向工程的類CodeGenerator,生成如下圖的目錄結構

二、我們先寫一個最簡單的demo

1.前端controller的代碼(記住這裏我也只寫了前端controller的代碼)

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 獲取所有User
     * @return
     */
    @RequestMapping("/getAllUser")
    public List<User> getAllUser(){
        List<User> list = userService.list();
        return list;
    }

}

 2.postman請求的例子

3.請求的結果

 

三、 MyBatis-Plus通用的CRUD

我們通過逆向工程生成的這一系列代碼,直接調用相應的service就可以幫我們完成基本增刪改查。(這裏就不對源碼進行解釋啦,主要講解使用的例子,感興趣的可以追一下代碼)

1.增

controller層代碼

 /**
     *新增User
     */
    @RequestMapping("/save")
    public Boolean save(@RequestBody User user){
        boolean save = userService.save(user);
        return save;
    }

postman請求的例子:

 請求結果:

2.改

 controller層代碼

 /**
     *修改User
     */
    @RequestMapping("/update")
    public Boolean update(@RequestBody User user){
        boolean save = userService.saveOrUpdate(user);
        return save;
    }

 postman請求的例子:

 請求結果:

 3.查

 controller層代碼

 /**
     *查詢detail
     */
    @RequestMapping("/detail")
    public User detail(@RequestBody User user){
        User userout = userService.getById(user);
        return userout;
    }

  postman請求的例子:

  請求結果:

四、似乎上面的mybatis也可以做到,彆着急,MP 最好用的就是條件構造器QueryWrapper

1.這裏我舉個根據名字查詢用戶的信息的例子

controller層代碼:

 /**
     *根據name查詢用戶信息
     */
    @RequestMapping("/selectByName")
    public User selectByName(@RequestBody User user){
        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
        userQueryWrapper.eq("name",user.getName());
        User one = userService.getOne(userQueryWrapper);
        return one;
    }

   postman請求的例子:

   請求結果:

後臺打印的日誌:

這裏我就簡單舉這些例子,更豐富的查詢方法,可以參考官方文檔,傳送門:https://mp.baomidou.com/guide/

總結:

 

我是阿達,一名喜歡分享知識的程序員,時不時的也會荒腔走板的聊一聊電影、電視劇、音樂、漫畫,這裏已經有3255位小夥伴在等你們啦,感興趣的就趕緊來點擊關注我把,哪裏有不明白或有不同觀點的地方歡迎留言!

發佈了98 篇原創文章 · 獲贊 950 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章