SpringBoot中引入MyBatisPlus的常规操作

一、前言

近来参与一个电力大数据项目,开发小组决定在 DAO 层使用 MyBatisPlus
——国产、新颖、强大、轻量。

官方API地址:http://mp.baomidou.com/#/?id=%E7%AE%80%E4%BB%8B

二、通用 CRUD

通过本项目(表少,数据量大,非常适合)
发现 MyBatisPlus 在 单表CRUD 方面
比原来的的 MyBatis 的有着绝对优势:

VS PS MyBatis MyBatisPlus
代码生成器 数据库有些表的字段发声改变 ① 再次运行逆向工程的代码 ②生成一堆代码,还最好不要动它 ①只需要修改 Bean 即可(反射实现的)② 生成少量的代码,可以人为新增内容
CRUD 无规律特殊时 手动写 Mapper 层 sql 通过条件构造器,实现零 sql !

下面列出本文相关代码,其他代码如 Druid数据源配置、MyBatisPlus分页配置、sql输出配置,可以到 github 上查看:
https://github.com/larger5/SpringBoot_MybatisPlus.git

package com.cun.plus;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.cun.plus.entity.User;
import com.cun.plus.mapper.UserMapper;
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.ArrayList;
import java.util.HashMap;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class PlusApplicationTests {

  @Autowired
  private UserMapper userMapper;

  /**
   * 1、增加 insert
   */
  @Test
  public void insertTest() {
    User user = new User();
    user.setUsername("绿茶");
    user.setPassword("lvcha");
    // 返回对数据库影响操作数:1
    Integer insert1 = userMapper.insert(user); // 非空属性才会出现在 sql 中
    // 可以立刻获取插入新记录的 id
    System.out.println(user.getId());
    // 同上
    Integer insert2 = userMapper.insertAllColumn(user); // 所有属性都会出现在 sql 中
    // 同上
    System.out.println(user.getId());
  }

  /**
   * 2、修改 update
   */
  @Test
  public void updateTest() {
    User user = new User();
    user.setId(45);
    user.setUsername("cun");
    //user.setPassword("666");
    // 返回对数据库影响操作数:1
    Integer integer1 = userMapper.updateById(user); // 属性空则不修改
    System.out.println(integer1);
    // 同上
    Integer integer2 = userMapper.updateAllColumnById(user); // 属性空则字段空
    System.out.println(integer2);
  }

  /**
   * 3、查询 select
   */
  @Test
  public void selectTest() {
    // 根据id 查询一条记录
    User user = userMapper.selectById(46);
    System.out.println(user.getUsername());

    ArrayList<Integer> idList = new ArrayList<>();
    idList.add(61);
    idList.add(63);
    // 根据多个id 批量查询
    List<User> users = userMapper.selectBatchIds(idList);
    System.out.println(users.get(0).getUsername() + users.get(1).getUsername());

    User user1 = new User();
    user1.setId(61);
    user1.setUsername("cun");
    // 根据多个条件返回一个对象,若有多个符合条件的记录则将报错
    User user2 = userMapper.selectOne(user1);
    System.out.println(user2.getPassword());

    // 根据多个条件返回对象组,注意Map 中的key 必须和数据库表字段一直
    HashMap<String, Object> columnMap = new HashMap<>();
    columnMap.put("username", "cun");
    List<User> users1 = userMapper.selectByMap(columnMap);
    System.out.println(users1.size());

  }

  /**
   * 4、删除 delete
   */
  @Test
  public void deleteTest() {
    // 根据一个id 删除,返回对数据库影响操作数:1
    Integer integer1 = userMapper.deleteById(65);// 根据id删除一条记录
    System.out.println(integer1);

    ArrayList<Integer> idList = new ArrayList<>(); // 根据id集合批量删除
    idList.add(64);
    idList.add(66);
    // 根据多个id 批量删除,返回对数据库影响操作数:2
    Integer integer2 = userMapper.deleteBatchIds(idList);
    System.out.println(integer2);

    HashMap<String, Object> columnMap = new HashMap<>();
    columnMap.put("username", "cun");
    // 根据多个条件删除,返回对数据库影响操作数
    Integer integer3 = userMapper.deleteByMap(columnMap);
    System.out.println(integer3);
  }

  /**
   * 5、伪分页(获取全部数据再分页)
   */
  @Test
  public void pageTest() {
    // 分页查询,注意如果设置了 PaginationInterceptor 分页插件则会报错,
    List<User> users2 = userMapper.selectPage(new Page<User>(1, 2), null); //当前页、每页大小
    System.out.println(users2.get(0).getUsername() + users2.get(1).getUsername());
    System.out.println(users2.size());
  }

  /**
   * 6、条件构造器
   */
  @Test
  public void wrapperTest(){
    List<User> users = userMapper.selectList(new EntityWrapper<User>()
        .eq("username", "linhongcun")
    );
    System.out.println(users.size());
  }

}

三、代码生成器

上述的代码通过 MyBatisPlsus 自动写好的通用 Mapper 层,在 Service 层里边写相关的业务逻辑
其实,使用了 MyBatisPlus 代码生成器,自动生成 Entity、Dao、Service、Controller 层!
我们通常是在 Controller 层里边写相关的业务逻辑,使用的方法和 Mapper 的类似。

package com.cun.plus;

import com.baomidou.mybatisplus.enums.IdType;
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.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class MpG {
  public static void main(String[] args) {
    //1. 全局配置
    GlobalConfig config = new GlobalConfig();
    config.setActiveRecord(false) // 是否支持AR模式
        .setAuthor("linhongcun") // 作者
        .setOutputDir("C:\\data\\mp") // 生成路径
        .setFileOverride(true) // 文件覆盖
        .setIdType(IdType.AUTO) // 主键策略
        .setServiceName("%sService") // 设置生成的service接口的名字的首字母是否为I
        // IUserService
        .setBaseResultMap(true)
        .setBaseColumnList(true);

    //2. 数据源配置
    DataSourceConfig dsConfig = new DataSourceConfig();
    dsConfig.setDbType(DbType.MYSQL) // 设置数据库类型
        .setDriverName("com.mysql.jdbc.Driver")
        .setUrl("jdbc:mysql://120.79.197.130:3307/testspring?useSSL=true&verifyServerCertificate=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8")
        .setUsername("root")
        .setPassword("123");

    //3. 策略配置
    StrategyConfig stConfig = new StrategyConfig();
    stConfig.setCapitalMode(true) //全局大写命名
        .setDbColumnUnderline(true) // 指定表名 字段名是否使用下划线
        .setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
        .setTablePrefix("tb_")
        .setInclude("tb_user"); // 生成的表

    //4. 包名策略配置
    PackageConfig pkConfig = new PackageConfig();
    pkConfig.setParent("com.cun.plus")
        .setMapper("mapper")
        .setService("service")
        .setController("controller")
        .setEntity("entity")
        .setXml("mapper");

    //5. 整合配置
    AutoGenerator ag = new AutoGenerator();
    ag.setGlobalConfig(config)
        .setDataSource(dsConfig)
        .setStrategy(stConfig)
        .setPackageInfo(pkConfig);

    //6. 执行
    ag.execute();
  }
}

四、相关依赖

// 选择 freemarker 引擎,默认 Veloctiy
  // mpg.setTemplateEngine(new FreemarkerTemplateEngine());
 <!-- mybatis-plus-->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>2.3</version>
    </dependency>
    <!-- 代码生成器默认使用如下模版引擎 -->
    <dependency>
      <groupId>org.apache.velocity</groupId>
      <artifactId>velocity-engine-core</artifactId>
      <version>2.0</version>
    </dependency>

五、其他

使用 MyBatis 的一个弊端,就是得依靠使用代码生成器,使得逻辑基本写在 controller 层,而不是 service 层,不合时宜。

多表+分页,详见:

最简单的 MyBatis Plus 的多表联接、分页查询实现方法

到此这篇关于SpringBoot中引入MyBatisPlus的常规操作的文章就介绍到这了,更多相关SpringBoot引入MyBatisPlus内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot集成mybatisplus实例详解

    集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用mapper的xml文件的. 目录 pom.xml文件 <?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-insta

  • Springboot整合MybatisPlus的实现过程解析

    这篇文章主要介绍了Springboot整合MybatisPlus的实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3

  • springboot集成mybatisplus的方法

    介绍: Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生.(摘自mybatis-plus官网)Mybatis虽然已经给我们提供了很大的方便,但它还是有不足之处,MP的存在就是为了稍稍弥补Mybatis的不足.在我们使用Mybatis时会发现,每当要写一个业务逻辑的时候都要在DAO层写一个方法,再对应一个SQL,即使是简单的条件查询.即使仅仅改变了一个条件都要在DAO层新增一个方法,针对这个问题,MP这样

  • SpringBoot集成MybatisPlus报错的解决方案

    这篇文章主要介绍了SpringBoot集成MybatisPlus报错的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题 启动的时候总是报如下错误: java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class 解决方案 需要一个mybatis-spring-boot-starter的包,在pom文件加上之后,完

  • SpringBoot整合MyBatisPlus配置动态数据源的方法

    MybatisPlus特性 •无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 •损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 •强大的 CRUD 操作:内置通用 Mapper.通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 •支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错 •支持多种数据库:支持 MySQL.MariaDB.Ora

  • SpringBoot+MybatisPlus+代码生成器整合示例

    项目目录结构: 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.or

  • SpringBoot中引入MyBatisPlus的常规操作

    一.前言 近来参与一个电力大数据项目,开发小组决定在 DAO 层使用 MyBatisPlus --国产.新颖.强大.轻量. 官方API地址:http://mp.baomidou.com/#/?id=%E7%AE%80%E4%BB%8B 二.通用 CRUD 通过本项目(表少,数据量大,非常适合) 发现 MyBatisPlus 在 单表CRUD 方面 比原来的的 MyBatis 的有着绝对优势: VS PS MyBatis MyBatisPlus 代码生成器 数据库有些表的字段发声改变 ① 再次运行

  • SpringBoot中整合MyBatis-Plus的方法示例

    MyBatis 框架相信大家都用过,虽然 MyBatis 可以直接在 xml 中通过 SQL 语句操作数据库,很是灵活.但正其操作都要通过 SQL 语句进行,就必须写大量的 xml 文件,很是麻烦.于是 MyBatis-Plus 应运而生,作为 MyBatis 的增强工具,更是为我们开发效率得到了质的飞跃. 一.简介 1.MyBatis MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工

  • Python中关于列表的常规操作范例以及介绍

    目录 1.列表的介绍 2.打印出列表的数据 1.我们可以根据下标取值进行打印 2.使用for循环遍历 3.使用while循环遍历 3.列表的添加操作 1.append()方法 2.extend()方法 3.insert()方法 4.列表的修改操作 5.列表的查找操作 1.in 方法 2.not in 方法 3.index 方法 4.count 方法 6.列表中的删除操作 1.del 方法 2.pop 方法 3.remove 方法 7.列表的排序操作 8.小练习送给你们 (一) (二) 1.列表的

  • Python中关于字典的常规操作范例以及介绍

    目录 1.字典的介绍 2.访问字典的值 (一)根据键访问值 (二)通过get()方法访问值 3.修改字典的值 4.添加字典的元素(键值对) 5.删除字典的元素 6.字典常见操作 1.len 测量字典中键值对的个数 2. keys 返回一个包含字典所有KEY的列表 3. values 返回一个包含字典所有value的列表 4. items 返回一个包含所有(键,值)元祖的列表 5. 遍历字典的key(键) 6. 遍历字典的value(值) 7. 遍历字典的items(元素) 8. 遍历字典的ite

  • springboot中使用mybatisplus自带插件实现分页的示例代码

    目录 springboot中使用mybatisplus自带插件实现分页 1.导入mybatisplus分页依赖 2.添加MybatisPlusConfig配置类 3.测试分页 springboot中使用mybatisplus自带插件实现分页 1.导入mybatisplus分页依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifa

  • SpringBoot中利用MyBatis进行数据操作的示例

    本例所用环境: SpringBoot MySQL MyBatis jdk1.8 Maven 首先我们先创建一个SpringBoot 项目. 数据库连接配置 ##数据库连接配置(部署到哪台,对应的ip需修改) spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis?connectTimeout=1000&useSSL=false&useUnicode=true&characterEncoding=UTF-8 spring.d

  • 浅谈Springboot下引入mybatis遇到的坑点

    一. springBoot + Mybatis 配置完成后,访问数据库遇到的问题 首先出现这个问题,肯定是xml文件与mapper接口没有匹配上,甚至是xml文件根本没有被扫描到. 于是会从配置上进行检查: 1. xml中的namespace命名是否与mapper接口路径一致,需保证一致. 2. application.properties或者application.yml文件中配置mybatis的属性对否,如下: 第一行 typeAliasesPackage是实体类的包路径: 第二行mappe

  • SpringBoot中的main方法注入service

    一.SpringBoot中的main方法注入service 在springboot中使用main方法常规无法注入service,因为以后也可能会有这种情况,所以采取工具类的方式进行,该工具类为固定写法,直接复制就行 @Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext = null; @O

  • Java中使用MyBatis-Plus操作数据库的实例

    目录 MyBatis-Plus 官网 使用 测试数据插入数据库 测试查询所有 测试删除数据 测试修改数据 MyBatis-Plus MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. MyBatis可以直接在xml中通过SQL语句操作数据库,很灵活.但其操作都要通过SQL语句进行,就必须写大量的xml文件,很麻烦.mybatis

  • 浅谈Python中os模块及shutil模块的常规操作

    如下所示: #os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表.这个列表以字母顺序. 它不包括 '.' 和'..' 即使它在文件夹中. #只支持在 Unix, Windows 下使用 import os, sys # 打开文件 path=r'C:\Users\Administrator.SKY-20180518VHY\Desktop\rx\ore' dirs = os.listdir( path ) print(dirs) # 输出所有文件和文件夹 for fil

随机推荐