【后端 · 初学】MyBatis - Plus入门

MyBatis-Plus 🚀 为简化开发而生 (baomidou.com)

使用基本步骤:

  1. 引入Mybatis-plus依赖,代替Mybatis依赖

    <dependency>
    	<groupId>com.baomidou</groupId>
    	<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    	<version>3.5.7</version>
    </dependency>
    
  2. 定义Mapper接口继承BaseMapper

    public interface AccountMapper extends BaseMapper<Account> {
    }
    
  3. 在实体类上添加注解声明 表信息

  4. 在application.yml中根据需要添加配置

MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。

  1. 类名驼峰转下划线作为表名
  2. 名为id的字段作为主键
  3. 变量名驼峰转下划线作为表的字段名

常见注解

  • @TableName指定表名

  • @TableId指定表中的主键字段信息

  • @TableField指定表中的普通字段信息

    • @TableField("username")表中为name
    • @TableField("'order'")与关键字冲突,使用转义字符
    • @TableField(exist=false)数据库表不存在

IdType枚举:

  • AUTO数据库自增长,一定要加@TableID(type=AUTO)
  • INPUT通过set方法自行输入
  • ASSIGN_ID分配ID,接口IdentifierGenerator的方法nextId来生成id,默认实现类为DefaultIdentifierGenerator雪花算法

常见配置

mybatis-plus:
  type-aliases-package: com.itheima.mp.domain.po # 别名扫描包
  mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,默认值
  configuration:
    map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射
    cache-enabled: false # 是否开启二级缓存
  global-config:
    db-config:
      id-type: assign_id # id为雪花算法生成
      update-strategy: not_null # 更新策略:只更新非空字段

注:全局配置优先级 < 注解

核心功能

1 条件构造器

MyBatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求。

在这里插入图片描述

  • QueryWrapperLambdaQueryWrapper通常用来构建select、delete、update的where条件部分
  • UpdateWrapperLambdaUpdateWrapper通常只有在set语句比较特殊才使用
  • 尽量使用LambdaQueryWrapperLambdaUpdateWrapper,避免硬编码
  1. 查询出名字中带o的,存款大于等于1000元的人的id、username、info、balance字段

    SELECT id,username,info,balance 
    FROM user 
    WHERE username LIKE ? AND balance >= ?
    
    // 1. 构建查询条件
    QueryWrapper<User> wrapper = new QueryWrapper<User>()
    							.select("id","username","info","balance")
    							.like("username","o")
    							.ge("balance",1000);
    // 2. 查询
    List<User> users = userMapper.selectList(wrapper);
    
  2. 更新用户名为jack的用户的余额为2000

    UPDATE user 
        SET balance = 2000 
        WHERE (username = "jack")
    
    // 1. 要更新的数据
    User user = new User();
    user.setBalance(2000);
    // 2. 更新的条件
    QueryWrapper<User> wrapper = new QueryWrapper<User>.eq("username","Jack");
    // 3. 执行更新
    userMapper.update(user, wrapper);
    
  3. 更新id为1,2,4的用户的余额,扣200

    List<Long> ids = List.of(1L,2L,4L);
    UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
    							.setSql("balance = balance - 200")
    							.in("id",ids);
    userMapper.update(null, wrapper);
    
  4. 使用Lambda(传函数)

    // 1. 构建查询条件
    LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
    							.select(User::getId,User::getUsername,User::getInfo,User::getBalance)
    							.like(User::getUsername,"o")
    							.ge("balance",1000);
    // 2. 查询
    List<User> users = userMapper.selectList(wrapper);
    
2 自定义SQL

利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。

例:将id在指定范围的用户(例如1、2、4 )的余额扣减指定值

  1. 基于Wrapper构建where条件

    List<Long> ids = List.of(1L, 2L, 4L);
    int amount = 200;
    // 1.构建条件
    LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().in(User::getId, ids);
    // 2.自定义SQL方法调用
    userMapper.updateBalanceByIds(wrapper, amount);
    
  2. 在mapper方法参数中用Param注解声明wrapper变量名称,必须是ew

    void updateBalanceByIds(@Param("ew") LambdaQueryWrapper<User> wrapper, @Param("amount") int amount);
    
  3. 自定义SQL,并使用Wrapper条件

    <update id="updateBalanceByIds">
        UPDATE tb_user SET balance = balance - #{amount} ${ew.customSqlSegment}
    </update>
    

Service接口

  1. 自定义Service接口继承IService接口
public interface IAccountService extends IService<Account> {
}
  1. 自定义Service实现类,实现自定义接口并继承ServiceImpl类
@Service
public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> implements IAccountService {

}
  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值