• pom.xml

     <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.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
    </dependency>
    <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
    </dependency>
    <dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
    </dependency>
    <dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    </dependency>
    </dependencies>

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

    # DataSource Config
    spring:
    datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:tcp://192.168.180.115:19200/~/mem/test
    username: root
    password: test

    # Logger Config
    logging:
    level:
    com.mp.crud: debug
  • dao层

    public interface UserMapper extends BaseMapper<User> {

    }
  • 实体类

     @Data
    @Accessors(chain = true)
    @TableName("user")
    public class User {

    private Long id;
    private String name;
    private Integer age;
    private String email;

    @TableField(exist = false)
    private Integer count;
    }
  • 配置类

     @Configuration
    @MapperScan("com.mp.crud.mapper")
    public class MybatisPlusConfig {

    }
  • 测试类

     @SpringBootTest
    @RunWith(SpringRunner.class)
    class CrudApplicationTests {

    @Resource
    private UserMapper mapper;

    @Test
    public void aInsert() {
    User user = new User();
    user.setName("小羊");
    user.setAge(3);
    user.setEmail("abc@mp.com");
    assertThat(mapper.insert(user)).isGreaterThan(0);
    // 成功直接拿会写的 ID
    assertThat(user.getId()).isNotNull();
    }


    @Test
    public void bDelete() {
    assertThat(mapper.deleteById(3L)).isGreaterThan(0);
    assertThat(mapper.delete(new QueryWrapper<User>()
    .lambda().eq(User::getName, "Sandy"))).isGreaterThan(0);
    }


    @Test
    public void cUpdate() {
    //UPDATE user SET email=? WHERE id=?
    assertThat(mapper.updateById(new User().setId(1L).setEmail("ab@c.c"))).isGreaterThan(0);
    //UPDATE user SET name=?, age=? WHERE (id = ?)
    assertThat(
    mapper.update(
    new User().setName("mp"),
    Wrappers.<User>lambdaUpdate()
    .set(User::getAge, 3)
    .eq(User::getId, 2)
    )
    ).isGreaterThan(0);
    User user = mapper.selectById(2);
    assertThat(user.getAge()).isEqualTo(3);
    assertThat(user.getName()).isEqualTo("mp");

    mapper.update(
    null,
    Wrappers.<User>lambdaUpdate().set(User::getEmail, null).eq(User::getId, 2)
    );
    assertThat(mapper.selectById(1).getEmail()).isEqualTo("ab@c.c");
    user = mapper.selectById(2);
    assertThat(user.getEmail()).isNull();
    assertThat(user.getName()).isEqualTo("mp");

    mapper.update(
    new User().setEmail("miemie@baomidou.com"),
    new QueryWrapper<User>()
    .lambda().eq(User::getId, 2)
    );
    user = mapper.selectById(2);
    assertThat(user.getEmail()).isEqualTo("miemie@baomidou.com");

    mapper.update(
    new User().setEmail("miemie2@baomidou.com"),
    Wrappers.<User>lambdaUpdate()
    .set(User::getAge, null)
    .eq(User::getId, 2)
    );
    user = mapper.selectById(2);
    assertThat(user.getEmail()).isEqualTo("miemie2@baomidou.com");
    assertThat(user.getAge()).isNull();
    }


    @Test
    public void dSelect() {
    mapper.insert(
    new User().setId(10086L)
    .setName("miemie")
    .setEmail("miemie@baomidou.com")
    .setAge(3));
    assertThat(mapper.selectById(10086L).getEmail()).isEqualTo("miemie@baomidou.com");
    User user = mapper.selectOne(new QueryWrapper<User>().lambda().eq(User::getId, 10086));
    assertThat(user.getName()).isEqualTo("miemie");
    assertThat(user.getAge()).isEqualTo(3);

    List<User> users = mapper.selectList(Wrappers.<User>lambdaQuery().select(User::getId));
    System.out.println(users);

    mapper.selectList(Wrappers.<User>lambdaQuery().select(User::getId))
    .forEach(x -> {
    assertThat(x.getId()).isNotNull();
    assertThat(x.getEmail()).isNull();
    assertThat(x.getName()).isNull();
    assertThat(x.getAge()).isNull();
    });
    mapper.selectList(new QueryWrapper<User>().select("id", "name"))
    .forEach(x -> {
    assertThat(x.getId()).isNotNull();
    assertThat(x.getEmail()).isNull();
    assertThat(x.getName()).isNotNull();
    assertThat(x.getAge()).isNull();
    });
    }

    @Test
    public void orderBy() {
    List<User> users = mapper.selectList(Wrappers.<User>query().orderByAsc("age"));
    System.out.println(users);
    //assertThat(users).isNotEmpty();
    }

    @Test
    public void selectMaps() {
    List<Map<String, Object>> mapList = mapper.selectMaps(Wrappers.<User>query().orderByAsc("age"));
    assertThat(mapList).isNotEmpty();
    assertThat(mapList.get(0)).isNotEmpty();
    //{ID=1189005852158324737, EMAIL=abc@mp.com, NAME=小羊, AGE=3}
    System.out.println(mapList.get(0));
    }

    @Test
    public void selectMapsPage() {
    IPage<Map<String, Object>> page = mapper.selectMapsPage(new Page<>(1, 5), Wrappers.<User>query().orderByAsc("age"));
    assertThat(page).isNotNull();
    assertThat(page.getRecords()).isNotEmpty();
    assertThat(page.getRecords().get(0)).isNotEmpty();
    }

    @Test
    public void orderByLambda() {
    //SELECT id,name,email,age FROM user ORDER BY age ASC
    List<User> users = mapper.selectList(Wrappers.<User>lambdaQuery().orderByAsc(User::getAge));
    List<User> users1 = mapper.selectList(Wrappers.<User>query().orderByAsc("age"));
    System.out.println(users1);
    //assertThat(users).isNotEmpty();
    }

    @Test
    public void testSelectMaxId() {
    // SELECT max(id) as id FROM user
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.select("max(id) as id");
    //User(id=1189005852158324737, name=null, age=null, email=null, count=null)
    User user = mapper.selectOne(wrapper);
    System.out.println(user);
    System.out.println("maxId=" + user.getId());
    List<User> users = mapper.selectList(Wrappers.<User>lambdaQuery().orderByDesc(User::getId));
    Assert.assertEquals(user.getId().longValue(), users.get(0).getId().longValue());
    }

    @Test
    public void testGroup() {
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.select("age, count(*)")
    .groupBy("age");
    List<Map<String, Object>> maplist = mapper.selectMaps(wrapper);
    for (Map<String, Object> mp : maplist) {
    System.out.println(mp);
    }
    /**
    * lambdaQueryWrapper groupBy orderBy
    */
    LambdaQueryWrapper<User> lambdaQueryWrapper = new QueryWrapper<User>().lambda()
    .select(User::getAge)
    .groupBy(User::getAge)
    .orderByAsc(User::getAge);
    for (User user : mapper.selectList(lambdaQueryWrapper)) {
    System.out.println(user);
    }
    }

    @Test
    public void testTableFieldExistFalse(){
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.select("age, count(age) as count")
    .groupBy("age");
    List<User> list = mapper.selectList(wrapper);
    list.forEach(System.out::println);
    list.forEach(x->{
    Assert.assertNull(x.getId());
    Assert.assertNotNull(x.getAge());
    Assert.assertNotNull(x.getCount());
    });
    mapper.insert(
    new User().setId(10088L)
    .setName("miemie")
    .setEmail("miemie@baomidou.com")
    .setAge(3));
    User miemie = mapper.selectById(10088L);
    Assert.assertNotNull(miemie);

    }

    }
  • 测试结果(我处只运行了部分的测试方法)

SpringBoot整合Mybatisplus3.x之CRUD(一)的更多相关文章

  1. SpringBoot 整合 MyBatis,实现 CRUD 示例

    目录 前言 创建项目/模块 SpringBoot Console Application CommandLineRunner SpringBoot 集成 MyBatis 创建数据库/表 配置数据源/连 ...

  2. SpringBoot整合MyBatis-Plus3.1详细教程

    作者:Sans_ juejin.im/post/5cfa6e465188254ee433bc69 一.说明 Mybatis-Plus是一个Mybatis框架的增强插件,根据官方描述,MP只做增强不做改 ...

  3. SpringBoot整合MybatisPlus3.X之SQL执行分析插件(十四)

    pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...

  4. SpringBoot整合MybatisPlus3.X之乐观锁(十三)

    主要适用场景 意图: 当要更新一条记录的时候,希望这条记录没有被别人更新 乐观锁实现方式: 取出记录时,获取当前version 更新时,带上这个version 执行更新时, set version = ...

  5. SpringBoot整合MybatisPlus3.X之自定义Mapper(十)

    pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...

  6. SpringBoot整合MybatisPlus3.X之SQL注入器(九)

    pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...

  7. SpringBoot整合MybatisPlus3.X之Wrapper(五)

    官方文档说明: 以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中 以下代码块内的多个方法均为从上往下补全个别boolean类型的入参,默认为true 以下出现 ...

  8. SpringBoot整合MybatisPlus3.X之分页插件(四)

    注:详细请看2.X博客中,3.X直接上代码. 建议装一个MybatisX插件,可以在Mapper和Xml来回切换 pom.xml <dependencies> <dependency ...

  9. SpringBoot整合MybatisPlus3.X之逻辑删除(三)

    pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...

随机推荐

  1. Spring IOC(2)----如何注册bean定义

    前面说到IOC容器在刷新之前的一些初始化工作,现在来看看在refresh()方法中,是怎样来加载注册我们自己的bean定义的. refresh()方法中有很多功能,从注释中就可以看出来 我们本次重点关 ...

  2. .netcore+vue+elementUI 前后端分离---支持前端、后台业务代码扩展的快速开发框架

    框架采用.NetCore + Vue前后端分离,并且支持前端.后台代码业务动态扩展,框架内置了一套有着20多种属性配置的代码生成器,可灵活配置生成的代码,代码生成器界面配置完成即可生成单表(主表)的增 ...

  3. 浅拷贝&深拷贝的对比

    js中两种数据类型 浅拷贝:拷贝就是拷贝指向对象的指针,意思就是说:拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间,浅拷贝只是一种简单的拷贝,让几个对象公用一个内存,然而当内存销毁的 ...

  4. JVM(三)初始化

    字节码指令和符号引用.直接引用 1.主动引用和被动引用 主动引用:虚拟机规定只有满足四个情况的的情况下,才会进行主动引用.    被动引用:除过四种情况的引用是被动引用.     只有主动引用才会初始 ...

  5. SpringBoot注入Mapper失败

    SpringBoot注入Mapper失败,可能是因为没有加扫描Mapper层的注解 方式一:在所有mapper接口使用@Mapper注解 @Mapper public interface UserMa ...

  6. 【SQL】sql查询同一字段相同属性列的值合计

    select  type,sum(value) as valueSum from t group by type

  7. R-forestplot包| HR结果绘制森林图

    本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/2W1W-8JKTM4S4nml3VF51w 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号 ...

  8. [插件化开发] 1. 初识OSGI

    初识 OSGI 背景 当前product是以solution的方式进行售卖,但是随着公司业务规模的快速夸张,随之而来的是新客户的产品开发,老客户的产品维护,升级以及修改bug,团队的效能明显下降,为了 ...

  9. lnmp环境搭设

    安装nginx============================ 1添加nginx的rpm信息 rpm -Uvh http://nginx.org/packages/centos/7/noarc ...

  10. idea2019版与maven3.6.2版本不兼容引发的血案

    昨天遇到了点问题解决浪费了一些时间(导致更新内容较少)回顾下问题 项目出现Unable to import maven project: See logs for details 翻了好多博客 莫名的 ...