java1234开源博客系统
博客信息

Mybatis-Plus通用Mapper CRUD之insertt

发布时间:『 2020-08-11 22:17』  博客类别:mybatis-plus  阅读(6032) 评论(0)

Mybatis-Plus通用Mapper CRUD之insert添加


BaseMapper介绍

Mybatis-Plus框架的BaseMapper给我们提供了常用的CRUD接口,我们可以点进接口看下:

1.jpg

BaseMapper提供了我们CRUD的所有接口方法;


我们用insert方法来添加数据吧

/**
 * 插入一条记录
 *
 * @param entity 实体对象
 */
int insert(T entity);

这个是BaseMapper提供的insert方法,参数是实体类型,返回值是操作的记录条数(比如添加了一条数据,返回的就是1,删除了5条数据返回的就是5,更新了0条数据,返回就是0);


我们写一个测试方法:

@Test
public void insert(){
  Department department=new Department();
  department.setName("测试名称2");
  department.setRemark("测试备注");
  departmentMapper.insert(department);
}

运行报错:

2.jpg

具体报错信息:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class com.java1234.entity.Department' with value '1293142150845599745' Cause: java.lang.IllegalArgumentException: argument type mismatch


默认的id是 long类型 ,所以转换报错,这里的话 我们需要配置下主键策略;


@TableId注解方式配置主键策略

实体里注解配置:

@TableId(type = IdType.AUTO)

private Integer id; // 编号


这里的IdType枚举,我们点进去看看:

package com.baomidou.mybatisplus.annotation;

import lombok.Getter;

/**
 * 生成ID类型枚举类
 *
 * @author hubin
 * @since 2015-11-10
 */
@Getter
public enum IdType {
    /**
     * 数据库ID自增
     */
    AUTO(0),
    /**
     * 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
     */
    NONE(1),
    /**
     * 用户输入ID
     * <p>该类型可以通过自己注册自动填充插件进行填充</p>
     */
    INPUT(2),

    /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 分配ID (主键类型为number或string),
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
     *
     * @since 3.3.0
     */
    ASSIGN_ID(3),
    /**
     * 分配UUID (主键类型为 string)
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
     */
    ASSIGN_UUID(4),
    /**
     * @deprecated 3.3.0 please use {@link #ASSIGN_ID}
     */
    @Deprecated
    ID_WORKER(3),
    /**
     * @deprecated 3.3.0 please use {@link #ASSIGN_ID}
     */
    @Deprecated
    ID_WORKER_STR(3),
    /**
     * @deprecated 3.3.0 please use {@link #ASSIGN_UUID}
     */
    @Deprecated
    UUID(4);

    private final int key;

    IdType(int key) {
        this.key = key;
    }
}

我们设置成AUTO也就是值是0 自增;

 

然后重启执行测试方法,发现已经插入成功了;

这种方式对代码是具有侵入性的;不建议使用;


全局配置主键策略

application.yml:

mybatis-plus:
  global-config:
    db-config:
      id-type: 0

一次配置,到处有效;省心省力;以后就用这种啦;


实体与表名映射

@TableName("t_department")

实体Department默认找的表是department,

我们前面加了@TableName("t_department")来映射,比较麻烦;

我们可以通过全局来同意配置加前缀,通过table-prefix

mybatis-plus:
  global-config:
    db-config:
      id-type: 0
      table-prefix: t_


一次配置,到处有效;省心省力;以后就用这种啦;


insert方法返回值

insert返回的是操作的记录条数,比如添加了一条数据,返回的就是1,删除了5条数据返回的就是5,更新了0条数据,返回就是0

所以我们可以通过返回值判断执行情况:

@Test
public void insert(){
  Department department=new Department();
  department.setName("测试名称2");
  department.setRemark("测试备注");
  int affectRows=departmentMapper.insert(department);
  if(affectRows>0){
    System.out.println("插入成功");
  }else{
    System.out.println("插入失败");
  }
}

执行下:
插入成功

获取插入数据的主键id值

以前用Mybatis插入后获取主键id比较麻烦,得额外配置;

mybatis-plus的话,实体id自动更新为主键值;

@Test

public void insert(){

  Department department=new Department();

  department.setName("测试名称2");

  department.setRemark("测试备注");

  int affectRows=departmentMapper.insert(department);

  if(affectRows>0){

    System.out.println("插入成功");

  }else{

    System.out.println("插入失败");

  }

  System.out.println("主键是:"+department.getId());

}

执行:

插入成功

主键是:9



关键字:   无
关注Java1234微信公众号
博主信息
Java1234_小锋
(知识改变命运,技术改变世界)
Powered by Java1234 V3.0 Copyright © 2012-2016 Java知识分享网 版权所有