springboot使用mybatis-plus

本文详细介绍了如何在SpringBoot项目中使用Mybatis-Plus,包括环境初始化、常用注解、条件构造器与接口、分页插件的使用,以及乐观锁和悲观锁的实现原理和优化思路。此外,还讲解了枚举类在Mybatis-Plus中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot使用mybatis-plus

1. 初始化

1.1环境初始化

  • 引入依赖
  • 添加插件
  • 在application中配置数据源
  • 添加日志
  • 添加mapper注解,表明mapper接口的位置

1.2 通用service

  • 创建接口继承IService接口
public interface UserService extends IService<User> { }
  • 创建类继承ServiceImpl,并实现自定义的接口,自定义的可以用来扩展功能
@Service public class UserServiceImpl extends ServiceImpl<mapper, pojo> implements UserService { }

2.常用注解

2.1 @TableName

  • 实现实体类与表的对应

2.2 @TableId

  • 声明主键,并规定主键的自增策略

2.3 @TableField

  • 实现属性与表中字段的映射
  • mybatis-plus会将将下划线命名风格转化为驼峰命名风格
  • 也可使用TableField实现映射关系

2.4 @TableLogic

  • 实现逻辑删除
    • 逻辑删除:仅仅是将数据标记成删除状态,数据依旧真实存在
  • @TableLogic : 声明用于用于标记逻辑删除的字段

3.条件构造器和常用接口

3.1 wapper介绍

3.1.1 it
  • lt 小于
3.1.2 le
  • 小于等于
3.1.3 like
  • notlike

    • NOT LIKE ‘%值%’
  • likeLeft

    • LIKE ‘%值’
  • likeRight

    • like ‘值%’

3.2 querywrapper

3.2.1 组装查询条件和排序
3.2.2 实现条件的优先级
  • SQL中的优先级是小括号表示的

  • 在wrapper

    • 使用or

    适合于或者的关系

    • 使用lambda表达式

    适合于优先去判断并且是否满足要求

    queryWrapper.like("username", "a").and(i -> i.gt("age", 20).or().isNull("email"));
    
3.2.3 select查询(特定字段的查询)

``queryWrapper.select(“username”, “age”);`

3.2.4 实现子查询
@Test public void test06() { 
    //查询id小于等于3的用户信息 
    //SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE (id IN (select id from t_user where id <= 3)) 
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    //in
    queryWrapper.inSql("id", "select id from t_user where id <= 3"); 
    List<User> list = userMapper.selectList(queryWrapper); 
    list.forEach(System.out::println); }
inSql("id", "select id from table where id < 3")`--->`id in (select id from table where id < 3)
3.2.5 无视规则将SQL语句拼接到最后
  • last()

3.3 updateWrapper

3.3.1 set
  • sql set字段
3.3.2 setSQL
  • 设置set部分的SQL

setSql("name = '老李头'")

4. condition

  • 在真正开发的过程中,组装条件是常见的功能,而这些条件数据来源于用户输入,是可选的,因

    此我们在组装这些条件时,必须先判断用户是否选择了这些条件,若选择则需要组装该条件,若

    没有选择则一定不能组装,以免影响SQL执行的结果

  • 为true,将条件添加到SQL中,本质上是方法的重载而已

4.1 condition使用实例

queryWrapper .like(StringUtils.isNotBlank(username), User::getName, username) .ge(ageBegin != null, User::getAge, ageBegin);

4.2 LamdaUpdateWrapper

  • 确定更新的字段

updateWrapper ..set(User::getAge, 18)

5.分页插件

5.1 添加配置类

@Configuration @MapperScan("com.atguigu.mybatisplus.mapper") 
//可以将主类中的注解移到此处
public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }

5.2 使用分页插件

@Test public void testPage(){ 
    //设置分页参数 
    Page<User> page = new Page<>(1, 5); 	
    userMapper.selectPage(page, null); 
    //获取分页数据 
    List<User> list = page.getRecords(); list.forEach(System.out::println); 
    System.out.println("当前页:"+page.getCurrent()); 
    System.out.println("每页显示的条数:"+page.getSize()); 
    System.out.println("总记录数:"+page.getTotal()); 
    System.out.println("总页数:"+page.getPages()); 
    System.out.println("是否有上一页:"+page.hasPrevious()); 
    System.out.println("是否有下一页:"+page.hasNext()); }

6.乐观锁与悲观锁

  • 乐观锁:
    • 用户更新数据后,会进行更新版本号
    • 更新数据,会将版本号转为条件
  • 悲观锁
    • 必须等待前一位,用户完成,下一位才进行可以操作

6.1 实现原理

  • 在修改数据,会去校对版本号是否一致,如果不一致,不修改,返回0;如果一致,修改,返回1;

6.2 优化思路

  • 如果修改失败,重新获取数据,再提交修改

7.枚举类

7.1 声明枚举类属性
public enum GradeEnum {

    PRIMARY(1, "小学"),  SECONDORY(2, "中学"),  HIGH(3, "高中");

    GradeEnum(int code, String descp) {
        this.code = code;
        this.descp = descp;
    }

    @EnumValue//标记数据库存的值是code
    private final int code;
    //。。。
}
7.2 实体类使用枚举类
public class User {
    /**
     * 名字
     * 数据库字段: name varchar(20)
     */
    private String name;

    /**
     * 年龄,IEnum接口的枚举处理
     * 数据库字段:age INT(3)
     */
    private AgeEnum age;


    /**
     * 年级,原生枚举(带{@link com.baomidou.mybatisplus.annotation.EnumValue}):
     * 数据库字段:grade INT(2)
     */
    private GradeEnum grade;
}
7.3 通用配置扫描枚举
mybatis-plus:
    # 支持统配符 * 或者 ; 分割
    typeEnumsPackage: com.baomidou.springboot.entity.enums
com.baomidou.mybatisplus.annotation.EnumValue}):
     * 数据库字段:grade INT(2)
     */
    private GradeEnum grade;
}
7.3 通用配置扫描枚举
mybatis-plus:
    # 支持统配符 * 或者 ; 分割
    typeEnumsPackage: com.baomidou.springboot.entity.enums
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值