• 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. Flask学习之旅--用 Python + Flask 制作一个简单的验证码系统

    一.写在前面 现在无论大大小小的网站,基本上都会使用验证码,登录的时候要验证,下载的时候要验证,而使用的验证码也从那些简简单单的字符图形验证码“进化”成了需要进行图文识别的验证码.需要拖动滑块的滑动验 ...

  2. Mybaits-从零开始-Spring、Spring MVC、MyBatis整合(未万待续)

    Spring.Spring MVC.MyBatis整合(未万待续)

  3. windows核心编程 第8章201页旋转锁的代码在新版Visual Studio运行问题

    // 全局变量,用于指示共享的资源是否在使用 BOOL g_fResourceInUse = FALSE; void Func1() { //等待访问资源 while(InterlockedExcha ...

  4. Build step 'Invoke top-level Maven targets' marked build as failure Finished解决

    最近用法 jenkins部署maven项目时候,突然出现Build step 'Invoke top-level Maven targets' marked build as failure Fini ...

  5. springboot WebMvcConfigurerAdapter替代

    过时应用: @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public vo ...

  6. linux 的vi/vim消除查找到的高亮字符串

    方法如下: 在Vi里面如果要搜索某个关键字,只要键入/xxx就可以了,比如,要搜索一个函数,就键入/snprintf 然后回车,一个文件中,所有出现这个字样的地方都会被高亮显示.按n键,就可以自动把光 ...

  7. thymeleaf 语法

    一.语法: 1. 简单表达式 (simple expressions) ${...}  变量表达式 *{...}  选择变量表达式 #{...}  消息表达式 @{...}  链接url表达式 2.字 ...

  8. Redis-->Ubutn上的安装教程

    Redis 安装 当前redis最新稳定版本是4.0.9 以下步骤可以跳过 最新稳定版本下载链接:http://download.redis.io/releases/redis-4.0.9.tar.g ...

  9. YiShaAdmin,基于.NET Core Web开源的后台快速开发框架

    YiShaAdmin YiShaAdmin 基于.NET Core Web开发,借鉴了很多开源项目的优点,让你开发Web管理系统和移动端Api更简单,所以我也把她开源了. 她可以用于所有的Web应用程 ...

  10. linux mint 19.2与Windows 10 双系统硬盘安装与卸载

    安装linux mint 和win10双系统: 1.win10系统下如果没有空闲分区,请从容量较大的分区用partition manager在选中的较大的分区下,调整大小.此步骤最好在pe下的part ...