目录
一、MyBatis-plus 快速入门
1、原理
2、实体类命名规则
3、常见注解
4、主键 id 策略
5、使用 @TableField 的常见场景
6、常用配置
二、核心功能
1、条件构造器
2、自定义 SQL
3、IService 接口
一、MyBatis-plus 快速入门
1、原理
- MyBatisPlus 通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。
- 主要作用是定义 DAO 层的数据库操作方法,例如数据的增删改查等。基本使用示例:
public interface xxxMapper extends BaseMapper<xxx实体类>{}
2、实体类命名规则
- 类名使用驼峰命名,转变下划线的方式,作为表名。
- 变量名使用驼峰命名,转变下划线的方式,作为字段名。
- 固定以字段名为 id 的字段作为主键。
3、常见注解
- 可以通过注解的方式,映射实体类和数据表的关系。
- @TableName:用于指定表名。
- @Tableld:用于指定表中的主键字段信息。
- @TableField:用于指定表中的普通字段信息。
4、主键 id 策略
- 主键在 MyBatis-plus 中称为 IdType, 可以通过注解的方式,设置不同的 id 策略。
- ldType 枚举:
- AUTO:主键自增。示例:@TableId(value=id, type=IdType.AUTO)
- INPUT:通过 set 方法自行输入
- ASSIGN_ID:分配 id,通过接口 IdentifierGenerator 的方法 nextld 生成 id,默认实现类使用 DefaultldentifierGenerator 雪花算法。
5、使用 @TableField 的常见场景
- 成员变量名与数据库字段名不一致时。
- 成员变量名以 is 开头,且为布尔值时。
- 成员变量名与数据库关键字冲突时。示例:@TableField("`order`")
- 成员变量不是数据库字段时。示例:@TableField(exist = false)
6、常用配置
- MyBatisPlus 的配置项继承了 MyBatis 原生配置,同时也拥有一些自己特有的配置。
mybatis-plus:type-aliases-package: com.xxx.xxx #别名扫描包,配置默认包名。mapper-locations: "classpath*:/mapper/**/*.xml"configuration: map-underscore-to-camel-case: true #是开启下划线和驼峰映射。cache-enabed: false #是否开启二级缓存global-config: db-config: id-type: assign_id #使用雪花算法生成 id。update-strategy: not_null #更新策略:只更新非空字段.
二、核心功能
1、条件构造器
- Querywrapper 和 LambdaQueryWrapper 通常用来构建 select、delete、update 的 where 条件部分。
- Updatewrapper 和 LambdaUpdatewrapper 通常只有在 set 语句比较特殊才使用。
- 尽量使用 LambdaQuerywrapper 和 LambdaUpdatewrapper 避免硬编码。
2、自定义 SQL
- 可以利用 MyBatisPlus 的 Wrapper 构建复杂的 Where 条件,然后自己定义 SQL 语句中剩下的部分。
- 基于 Wrapper 构建 where 条件。示例代码:
List<Long> ids = List.of(1L,2L,3L); int amount = 200;LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().in(User::getId,ids);userMapper.updateAmountByIds(wrapper, amount);
- 在 mapper 方法参数中用 @Param 注解声明 wrapper 变量名称,必须是 Constants.WRAPPER 。示例代码:
// UserMapper 接口中void updateAmountByIds(@Param(Constants.WRAPPER) QueryWrapper<User> wrapper, @Param("amount") int amount);
- 自定义SQL, 并使用 Wrapper 条件。示例代码:
<update id="updateAmountByIds">UPDATE 数据表名 SET amount = amount - #{amount} ${(Constants.WRAPPER).customSqlSegment} </update>
3、IService 接口
- 使用 service 接口需要先构建以下继承体系:
- 示例代码:
// service 接口 public interface IUserService extends IService<User> { }// service 实现类 @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService { }
- IService 提供批量处理操作(IService 和 BaseMapper 需一起使用),BaseMapper 则没有。