mybatisPlus

官网:http://mp.baomidou.com/
参考教程:http://mp.baomidou.com/guide/
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

基本步骤

  1. 引入依赖
  2. 创建实体类User
  3. UserMapper的interface接口,继承BaseMapper
  4. 启动类上添加@MapperScan注解

查看mp的sql输出日志

#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

insert

1、插入操作

注意:数据库插入id值默认为:全局唯一id
mybatisPlus

2、主键生成策略

(1)ID_WORKER
MyBatis-Plus默认的主键策略是:ID_WORKER 全局唯一ID
参考资料:分布式系统唯一ID生成方案汇总:https://www.cnblogs.com/haoxinyue/p/5208136.html
(2)自增策略
要想主键自增需要配置如下主键策略
需要在创建数据表的时候设置主键自增
实体字段中配置 @TableId(type = IdType.AUTO)

@TableId(type = IdType.AUTO)
private Long id;

要想影响所有实体的配置,可以设置全局主键配置

#全局设置主键生成策略
mybatis-plus.global-config.db-config.id-type=auto

其它主键策略:分析 IdType 源码可知

@Getter
public enum IdType {
    /**
     * 数据库ID自增
     */
    AUTO(0),
    /**
     * 该类型为未设置主键类型
     */
    NONE(1),
    /**
     * 用户输入ID
     * 该类型可以通过自己注册自动填充插件进行填充
     */
    INPUT(2),

    /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 全局唯一ID (idWorker)
     */
    ID_WORKER(3),
    /**
     * 全局唯一ID (UUID)
     */
    UUID(4),
    /**
     * 字符串全局唯一ID (idWorker 的字符串表示)
     */
    ID_WORKER_STR(5);

    private int key;

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

update

1、根据Id更新操作

注意:update时生成的sql自动是动态sql:UPDATE user SET age=? WHERE id=?

2、自动填充

mybatisPlus

项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。
我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作:
(1)数据库表中添加自动填充字段
在User表中添加datetime类型的新的字段 create_timeupdate_time

(2)实体上添加注解

@Data
public class User {
    ......
        
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    //@TableField(fill = FieldFill.UPDATE)
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

(3)实现元对象处理器接口
注意:不要忘记添加 @Component 注解

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);

    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

3、乐观锁

建议使用配置类,使用@Configuration,springboot工程启动的时候,配置类也会被加载
丢失更新:多人同时修改同一调数据,最后提交的把之前的提交数据覆盖掉
mybatisPlus
悲观锁-乐观锁:

悲观锁:一般是不用的,lucy在操作数据的时候,别人都不能操作,等lucy操作完成之后别人才可以操作(串行,只有一个人能操作)
乐观锁:依靠version版本号,

mybatisPlus
**主要适用场景:**当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
乐观锁实现方式:

  • 取出记录时,获取当前version
  • 更新时,带上这个version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果version不对,就更新失败
测试乐观锁,先查询再修改
		//查询
        User user = userMapper.selectById(1397578853580333057L);
        user.setAge(30);
        //修改
        int i = userMapper.updateById(user);

三、select

  • 根据id查询
  • 通过多个id批量查询
  • 简单的条件查询
  • 分页
    简单条件查询使用map封装条件;
    mybatisPlus

四、delete

  • 1、根据id删除记录
  • 2、批量删除
int result = userMapper.deleteBatchIds(Arrays.asList(8, 9, 10));
  • 3、简单的条件查询删除
map.put("name", "Helen");
    map.put("age", 18);

    int result = userMapper.deleteByMap(map);
  • 4、逻辑删除
    mybatisPlus
可加可不加,默认如此
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

查询已经被删掉的数据:自己写xml文件查询

QueryWrapper

一般使用QueryWrapper
1、ge、gt、le、lt、isNull、isNotNull
2、eq、ne
3、between、notBetween
4、allEq
5、like、notLike、likeLeft、likeRight
6、in、notIn、inSql、notinSql、exists、notExists

mybatisPlus

上一篇:宝塔打开重写功能


下一篇:elastalert 告警配置说明