欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > mybatisplus介绍以及使用(上)

mybatisplus介绍以及使用(上)

2025/5/8 19:15:31 来源:https://blog.csdn.net/m0_65100923/article/details/142341892  浏览:    关键词:mybatisplus介绍以及使用(上)

目录

一、概念

1、什么是mybatisplus

2、为什么要使用mybatisplus

二、mybatisplus的使用

1、安装

2、常用注解

3、条件构造器 


一、概念

1、什么是mybatisplus

MyBatis-Plus(简称MP)是一个基于MyBatis的增强框架,旨在简化开发、提高效率。

2、为什么要使用mybatisplus

① mybatisplus为我们提供好了基础的增删改查sql,仅仅是针对单表操作的增删改查。

② 为我们提供了一些好用的插件,例如分页插件、乐观锁插件具体使用参考官网 

③ 为我们提供了一些好用的功能,比如代码生成、枚举映射、逻辑删除、主键生成等等具体参考官网 

二、mybatisplus的使用

1、安装

首先需要引入mybatisplus的起步依赖(其中包含mybatis,基于springboot的起步依赖原理)

      <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version> </dependency>

其次mapper和service层需要继承basemapper、Iservice,serviceimpl,注意其中的泛型需要指定,泛型的类型就是要操作的数据库表对应的实体类。

2、常用注解

① @TableName

  • 描述:表名注解,标识实体类对应的表

  • 使用位置:实体类

示例:

@TableName("user")
public class User {private Long id;private String name;
}

TableName注解除了指定表名以外,还可以指定很多其它属性:

属性类型必须指定默认值描述
valueString""表名
schemaString""schema
keepGlobalPrefixbooleanFALSE是否保持使用全局的 tablePrefix 的值(当全局 tablePrefix 生效时)
resultMapString""xml 中 resultMap 的 id(用于满足特定类型的实体类对象绑定)
autoResultMapbooleanFALSE是否自动构建 resultMap 并使用(如果设置 resultMap 则不会进行 resultMap 的自动构建与注入)
excludePropertyString[]{}需要排除的属性名 @since 3.3.1

 ② @tableId

说明:

  • 描述:主键注解,标识实体类中的主键字段

  • 使用位置:实体类的主键字段

示例:

@TableName("user")
public class User {@TableIdprivate Long id;private String name;
}

tableId注解支持的两个属性:

属性类型必须指定默认值描述
valueString""表名
typeEnumIdType.NONE指定主键类型

 IdType支持的类型有:

描述
AUTO数据库 ID 自增
NONE无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
INPUTinsert 前自行 set 主键值
ASSIGN_ID分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
ASSIGN_UUID分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)
ID_WORKER分布式全局唯一 ID 长整型类型(please use ASSIGN_ID)
UUID32 位 UUID 字符串(please use ASSIGN_UUID)
ID_WORKER_STR分布式全局唯一 ID 字符串类型(please use ASSIGN_ID)

这里比较常见的有三种:

  • AUTO:利用数据库的id自增长

  • INPUT:手动生成id

  • ASSIGN_ID:雪花算法生成Long类型的全局唯一id,这是默认的ID策略

③ @TableField

说明:

描述:普通字段注解

示例:

@TableName("user")
public class User {@TableIdprivate Long id;private String name;private Integer age;@TableField("isMarried")private Boolean isMarried;@TableField("concat")private String concat;
}

一般情况下我们并不需要给字段添加@TableField注解,一些特殊情况除外:

  • 成员变量名与数据库字段名不一致

  • 成员变量是以isXXX命名,按照JavaBean的规范,MybatisPlus识别字段时会把is去除,这就导致与数据库不符。

  • 成员变量名与数据库一致,但是与数据库的关键字冲突。使用@TableField注解给字段名添加``转义

支持的其它属性如下:

属性类型必填默认值描述
valueString""数据库字段名
existbooleanTRUE是否为数据库表字段
conditionString""字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s},参考(opens new window)
updateString""字段 update set 部分注入,例如:当在version字段上注解update="%s+1" 表示更新时会 set version=version+1 (该属性优先级高于 el 属性)
insertStrategyEnumFieldStrategy.DEFAULT举例:NOT_NULL
insert into table_a(<if test="columnProperty != null">column</if>) values (<if test="columnProperty != null">#{columnProperty}</if>)
updateStrategyEnumFieldStrategy.DEFAULT举例:IGNORED
update table_a set column=#{columnProperty}
whereStrategyEnumFieldStrategy.DEFAULT举例:NOT_EMPTY
where <if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if>
fillEnumFieldFill.DEFAULT字段自动填充策略
selectbooleanTRUE是否进行 select 查询
keepGlobalFormatbooleanFALSE是否保持使用全局的 format 进行处理
jdbcTypeJdbcTypeJdbcType.UNDEFINEDJDBC 类型 (该默认值不代表会按照该值生效)
typeHandlerTypeHander类型处理器 (该默认值不代表会按照该值生效)
numericScaleString""指定小数点后保留的位数

3、条件构造器 

①  MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。

②具体使用

QueryWrapper需要手写字段名,容易错。示例如下:

@Testpublic void test1() {//select id,username,info,balance from user where username like "%o%" and balance >= 1000List<User> users = userMapper.selectList(new QueryWrapper<User>().like("username", "o").ge("balance", 1000).select("id", "username", "info", "balance"));

LambdaQueryWrapper使用实体类的Lambda表达式,字段不会错。示例如下:

//select id,username,info,balance from user where username like "%o%" and balance >= 1000
List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getUsername, "o").ge(User::getBalance, 1000).select(User::getId, User::getBalance, User::getInfo, User::getUsername));System.out.println(userList);

LamdUpdateWrapper 相较于LamdQueryWrapper多了个set方法,用于修改语句 setSql 手写sql语句拼上去

示例如下:

//案例:在原来金额的基础上减去200userMapper.update(null, new LambdaUpdateWrapper<User>().setSql("balance = balance - 200").in(User::getId, Arrays.asList(1L, 2L, 4L)));

由于篇幅过长,剩余部分下篇续写。有何问题请各位大佬指出共同进步!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词