Mybatisplus-插件使用

(建议这些共用的字段放到BaseBean.java)

本文章描述的仅乐观锁,逻辑删除,自动填充,分页查询,代码自动生成,wrapper条件构造器

在使用这些功能时,要先把环境配置好。

全部功能,都可以在mybatis-plus官网看到,上面几乎包括了全部讲解。

依赖

      <!--mybatis-plus--Spring boot加载使用-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>
        <!--mybatis-plus的一些插件使用 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.0</version>
        </dependency>

application.yml配置

mybatis-plus:
  global-config:             #逻辑删除配置
    db-config:
      logic-delete-value: 0 # 逻辑已删除值(默认为 0)
      logic-not-delete-value: 1 # 逻辑未删除值(默认为 1)
  type-aliases-package: com.example.mapper  #mapper包的地址
  mapper-locations: mapper/*.xml            #mapper.xml在resources的包下地址
  configuration:
    #这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

数据库设计

 插件推荐:mybatisX,有好用的功能,可以在mybatis-plus官网查看功能

 插件功能之一,代码自动生成器。

IDEA连接数据库,选择我们要操作的表,点这个功能

生成结果展示

注意生成的mapper没有@Mapper注解,要自己加注解,将mapper添加到ioc容器 

 自动填充使用

 User.java,注意时间的类型时LocalDateTime

    @TableField(value = "creat_time",fill = FieldFill.INSERT)
    private LocalDateTime creatTime;

  
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

MyMetaObjectHandler.java 

package com.example.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        this.strictInsertFill(metaObject, "creatTime", LocalDateTime.class, LocalDateTime.now());
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
}

测试使用


@SpringBootTest
class Test2ApplicationTests {
    @Autowired
    private UserService userService;

    @Test
    void contextLoads() {
        //自动填充使用
        User x = new User();
        x.setName("自动填充测试");
        x.setAge(20);
        userService.save(x);
    }

}

结果

 逻辑删除使用,根据自己设置0还是1删除,要和数据库对应。

 yml里的配置

 User.java

    @TableField(value = "staus")
    @TableLogic //逻辑删除注解
    private Integer staus;

 测试使用(我的数据库id设置了double型)

@SpringBootTest
class Test2ApplicationTests {
    @Autowired
    private UserService userService;

    @Test
    void contextLoads() {
        //逻辑删除测试使用
  
        userService.removeById(1d);

    }

}

结果

 

乐观锁使用

 User.java

   @TableField(value = "version")
    @Version
    private Integer version;

配置,添加插件

package com.example.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

测试使用

不知道为什么用不了,可能是版本的问题,不过这个乐观锁也没必要配置,后期学习会用别的方法替代。乐观锁会影响效率。

结果

条件构造器的使用,只讲query和update两种构造器的区别

建议使用Lambda的构造器,区别

LambadQueryWrapper的使用

.select()方法,只查寻我需要的字段

  @Autowired
    private UserService userService;

    @Test
    void contextLoads() {
        //LambdaQueryWrapper的特别方法
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.select(User::getId, User::getName, User::getAge).eq(User::getName, "测试使用");
        List<User> users = userService.list(queryWrapper);
        users.forEach(System.out::println);

    }

结果

 LambadUpdateWrapper的使用

.set()方法

    @Autowired
    private UserService userService;

    @Test
    void contextLoads() {
        //LambdaQueryWrapper的特别方法
        LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(User::getName, "update测试").set(User::getAge, 99);
        userService.update(updateWrapper);

    }

结果

 分页插件的使用

配置,添加插件

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }

mybatis-plus自带的分页方法

测试使用

   @Autowired
    private UserService userService;

    @Test
    void contextLoads() {
        IPage<User> userIPage=new Page<>(2,2);
        userService.page(userIPage);
        
    }

结果

 自定义分页mapper方法,就是你的对你的Sql语句自动加上limit (page)

总结

package com.example.pojo;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.Data;

import java.time.LocalDateTime;

@Data
public class BaseBean {
    @TableField(value = "staus")
    @TableLogic
    private Integer staus;

    @TableField(value = "creat_time", fill = FieldFill.INSERT)
    private LocalDateTime creatTime;


    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    @TableField(value = "version")
    @Version
    private Integer version;

}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: MyBatis Plus 是一个增强的 MyBatis 框架,提供了许多常用的注解来简化操作。以下是一些常用的 MyBatis Plus 注解: - `@TableName`:标注实体类对应的数据库表名。 - `@TableId`:标注实体类中对应的主键字段。 - `@TableField`:标注实体类中对应的数据库字段。 - `@Version`:标注乐观锁字段。 - `@Transient`:标注不需要映射到数据库表中的字段。 - `@KeySequence`:标注使用数据库序列生成主键的实体类。 - `@SqlParser`:标注是否需要 MyBatis Plus 的执行分析插件。 ### 回答2: MyBatisPlus是一个基于MyBatis的轻量级ORM框架,提供了一些常用注解来简化数据库操作。 1. @TableName:用于指定实体类对应的数据库表名,可以在类级别上使用。 2. @TableId:用于指定实体类的主键字段,并可以设置主键生成策略。 3. @TableField:用于指定实体类字段与数据库表字段的映射关系,可以指定字段名、是否进行主键策略等。 4. @Version:用于实现乐观锁,指定实体类中的版本字段。 5. @EnumValue:用于枚举字段与数据库中存储值的映射关系。 6. @TableLogic:用于逻辑删除,实体类中指定一个逻辑删除的字段。 7. @KeySequence:用于指定主键序列的名称,主要用于Oracle数据库。 8. @SqlParser:用于指定在进行SQL解析时的一些属性,如过滤条件等。 9. @SqlJoin:用于指定查询时的多表关联查询。 10. @SqlStatement:用于自定义SQL的注解,可以指定SQL语句和对应的操作类型。 这些注解可以在实体类中使用,通过对实体类进行注解配置,MyBatisPlus可以自动根据注解生成对应的SQL语句,简化了数据库操作的编写。同时,这些注解提供了一些额外的功能,如乐观锁、逻辑删除等,方便开发者进行数据库操作和管理。总之,MyBatisPlus的常用注解可以简化开发者对数据库的操作,提高开发效率。 ### 回答3: MyBatisPlus是一个用于简化MyBatis操作的开源框架,它提供了许多常用的注解来增强MyBatis的功能,使开发更加便捷和高效。 1. @TableName注解:用于标识实体类与数据库表之间的映射关系,通过指定表名可以方便地进行CRUD操作。 2. @TableField注解:用于标识实体类中的字段,可以指定字段名、是否为主键、是否为自增等属性,方便进行数据库操作。 3. @TableId注解:用于标识实体类中的主键字段,可以指定主键的生成策略,包括自增、UUID、雪花算法等,简化主键的处理。 4. @Result注解:用于指定查询结果的映射关系,可以通过指定列名、Java属性名等方式进行映射,确保查询结果正确转换为实体对象。 5. @Insert注解:用于标识插入操作,可以直接将实体对象插入到数据库中,提高插入效率。 6. @Update注解:用于标识更新操作,可以根据条件更新实体对象的属性值,避免手动拼接更新语句。 7. @Delete注解:用于标识删除操作,可以根据条件删除数据库中的数据,简化删除数据的操作。 8. @Select注解:用于标识查询操作,可以根据条件查询数据库中的数据,方便地进行数据查询。 总之,MyBatisPlus提供了一系列常用的注解,可以简化开发人员的操作,提高开发效率。使用这些注解,我们可以更加方便地完成数据库操作,减少了手动sql编写的工作量,提高了开发速度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚霞虽美不如你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值