MyBatis-Plus入门笔记(二)

本文介绍了如何在MyBatisPlus中使用QueryWrapper构建复杂的where条件,以及如何通过自定义SQL方法进行更新操作。同时概述了Service接口的CRUD功能和基本用法,包括新增、删除、更新和查询等操作。

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

1. 自定义SQL

MyBatisPlus擅长where条件构建,对于复杂的sql语句,我们可以用MyBatisPlus来构建复杂的where条件,然后自己定义sql语句中剩下的部分。

1.1 基于Wrapper构建where条件

@Test
void testCustomUpdate(){
    //1.更新条件
    List<Long> ids = List.of(1L,2L,4L);
    int amount = 200;
    //2.定义条件
    QueryWrapper<User> wrapper = new QueryWrapper<User>().in("id",ids);
    //3.调用自定义sql方法
    userMapper.updateBalanceByIds(wrapper,amount);
}

1.2 自定义sql

mapper方法参数中用Param注解声明wrapper变量名称,必须是ew

自定义sql,并使用wrapper

public interface UserMapper extends BaseMapper<User> {
	@Select("UPDATE user SET balance = balance - #{money} ${ew.customSqlSegment}")   	
	void deductBalanceByIds(@Param("money") int money, @Param("ew") QueryWrapper<User> wrapper); 
}

sql语句可以在Mapper方法中写,也可以在xml文件中写,写法如下:

@Mapper 
public interface UserMapper extends BaseMapper<User> {
    void updateBalanceByIds(@Param("ew") QueryWrapper<User> wrapper,@Param("amount") int amount); 
}
<update id="updateBalanceByIds">
    UPDATE user SET balance = balance - #{amount} ${ew.customSqlSegment} 
</update>

2. service接口

2.1 IService接口

MybatisPlus不仅提供了BaseMapper,还提供了通用的Service接口及默认实现,封装了一些常用的service模板方法。通用接口为IService,默认实现为

ServiceImpl,其中封装的方法可以分为以下几类:

  • save:新增
  • remove:删除
  • update:更新
  • get:查询单个结果
  • list:查询集合结果
  • count:计数
  • page:分页查询

2.2 CRUD

我们先俩看下基本的CRUD接口。

新增
在这里插入图片描述

  • save是新增单个元素

  • saveBatch是批量新增

  • saveOrUpdate是根据id判断,如果数据存在就更新,不存在则新增

  • saveOrUpdateBatch是批量的新增或修改

删除:

在这里插入图片描述

  • removeById:根据id删除

  • removeByIds:根据id批量删除

  • removeByMap:根据Map中的键值对为条件删除

  • remove(Wrapper):根据Wrapper条件删除

  • removeBatchByIds:暂不支持

修改:

在这里插入图片描述

  • updateById:根据id修改

  • update(Wrapper):根据UpdateWrapper修改,Wrapper中包含set和where部分

  • update(T,Wrapper):按照T内的数据修改与Wrapper匹配到的数据

  • updateBatchById:根据id批量修改

Get:

在这里插入图片描述

  • getById:根据id查询1条数据

  • getOne(Wrapper):根据Wrapper查询1条数据

  • getBaseMapper:获取Service内的BaseMapper实现,某些时候需要直接调用Mapper内的自定义SQL时可以用这个方法获取到Mapper

List:

在这里插入图片描述

  • listByIds:根据id批量查询

  • list(Wrapper):根据Wrapper条件查询多条数据

  • list():查询所有

Count

在这里插入图片描述

  • count():统计所有数量

  • count(Wrapper):统计符合Wrapper条件的数据数量

getBaseMapper:当我们在service中要调用Mapper中自定义SQL时,就必须获取service对应的Mapper,就可以通过这个方法:

在这里插入图片描述

2.3 基本用法

在这里插入图片描述

使用流程:

1.自定义Service接口继承Iservice接口

public interface IUserService extends IService<User> { 
}

2.自定义Service实现类,实现自定义接口并继承ServiceImpl类

public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements IUserService{ 
}

3.调用Service实现类

@SpringBootTest
class IUserServiceTest {
    @Autowired
    private IUserService userService;
    @Test
    void testSaveUser(){
        User user = new User();
        user.setId(5L);
        user.setUsername("LiLei2");
        user.setPassword("123");
        user.setPhone("18688990011");
        user.setBalance(200);
        user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");        						user.setCreateTime(LocalDateTime.now());
        user.setUpdateTime(LocalDateTime.now());
        userService.save(user);
	}    
    @Test    
    void testQuery() {
        List<User> users = userService.listByIds(List.of(1L, 2L, 4L));
        users.forEach(System.out::println);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值