mybatis-plus使用技巧(二)

上一篇文章我们把 mapper下面的crud写完了 ,现在我们来试一下IService下面的的方法,之前的类还是不动,我们新增一个service代码如下 

public interface UserService  extends IService<User> {
}

实现类

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

要用service下面的方法肯定要注入的

@SpringBootTest
public class MybatisPlusApplicationTests {
    @Autowired
    private UserMapper userMapper;

    @Autowired
    private UserService userService;


}

下面开始搞

1.添加

1.单条数据添加

boolean save(T entity);
 @Test
    public void  test() {
        User user = new User();
        user.setName("王五");
        userService.save(user);


    }

对应的SQL

 INSERT 
    INTO
        user
        ( name ) 
    VALUES
        ( '王五' )

2.批量添加

boolean saveBatch(Collection<T> entityList);

为了方便操作我在实体类里面生产了一个有参构造器

 public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
  @Test
    public void test() {
        List<User> users = new ArrayList<>();
        User user = new User("张三",15);
        User user1 = new User("张四",15);
        users.add(user);
        users.add(user1);
        userService.saveBatch(users);


    }

其实mybatisplus的批量添加就是多天SQL语句添加,对应的SQL

 3.批量添加,限制批次数量(批次数量不能输入0)

boolean saveBatch(Collection<T> entityList, int batchSize);
 @Test
    public void test() {
        List<User> users = new ArrayList<>();
        User user = new User("张三",15);
        User user1 = new User("张四",15);
        User user2 = new User("张五",15);
        users.add(user);
        users.add(user1);
        users.add(user2);
        userService.saveBatch(users,2);

    }

对应的SQL 

 上面的第一幅图是写了数字的批量,第二幅图是没写的 ,我们发现写了批量数量的要快一些,网上对于这个有详细的解释

4.添加或者修改

boolean saveOrUpdate(T entity);

1.1修改还是通过id修改(id存在,不输入id就是添加,建议不要写这个方法)


    @Test
    public void test() {
        List<User> users = new ArrayList<>();
        User user = new User(199L,"张四",15);
        userService.saveOrUpdate(user);


    }

对应的SQL

 这个id在数据库是有的,如果没有就会添加, 程序会先执行修改,发行没有改的就会添加,下面展示一下没有这个id 

1.2没有修改对象,执行添加

  @Test
    public void test() {
        List<User> users = new ArrayList<>();
        User user = new User(19L,"张四",15);
        userService.saveOrUpdate(user);


    }

对应的SQL

 5.批量添加或修改(条件构造器)

boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
 @Test
    public void test() {
        User user = new User("张六", 14);
        userService.saveOrUpdate(user,new UpdateWrapper<User>()
                //构造条件
                .eq("id",199));

    }

对应的SQL

 这种和上面是一样的,如果不存在就会保存,我这里就不展示了

6.批量插入或者修改

boolean saveOrUpdateBatch(Collection<T> entityList);
 @Test
    public void test() {
        List<User> users = new ArrayList<>();
        User user = new User("张三",15);
        User user1 = new User("张四",15);
        User user2 = new User("张五",15);
        users.add(user);
        users.add(user1);
        users.add(user2);
        userService.saveOrUpdateBatch(users);

    }

对应的SQL

7.批量插入或者修改(设置批量数量)多用

boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
 @Test
    public void test() {
        List<User> users = new ArrayList<>();
        User user = new User("张三",15);
        User user1 = new User("张四",15);
        User user2 = new User("张五",15);
        users.add(user);
        users.add(user1);
        users.add(user2);
        userService.saveOrUpdateBatch(users,1);

    }

对应的SQL

 2.删除

1.根据 entity 条件,删除记录

boolean remove(Wrapper<T> queryWrapper);
 @Test
    public void test() {
       userService.remove(new QueryWrapper<User>()
       .eq("id",205l));

    }

对应的SQL

 2.根据id删除

boolean removeById(Serializable id);

    @Test
    public void test() {
        boolean b = userService.removeById(206);

    }

对应的sql

 

3. 删除(根据ID 批量删除)

boolean removeByIds(Collection<? extends Serializable> idList);
 @Test
    public void test() {
        boolean b = userService.removeByIds(Arrays.asList(207,208,209));

    }

对应是SQL 

 4.根据 columnMap 条件,删除记录

boolean removeByMap(Map<String, Object> columnMap);
 @Test
    public void test() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("id",212);
        map.put("age",16);
        userService.removeByMap(map);

    }

对应的SQL

3.更新

1.根据id修改

boolean updateById(T entity);
 @Test
    public void test() {
        User user = new User(210L,"张六");
        userService.updateById(user);

    }

对应的SQL

 2.根据id批量修改

boolean updateBatchById(Collection<T> entityList);
 @Test
    public void test() {
        User user = new User(210L,"张六");
        User user1 = new User(211L,"张七");
        User user2 = new User(214L,"张八");
        ArrayList<User> users = new ArrayList<>();
        users.add(user);
        users.add(user1);
        users.add(user2);
        userService.updateBatchById(users);

    }

对应的SQL

 

 3.批量修改 (设置批量修改数量)

boolean updateBatchById(Collection<T> entityList, int batchSize);
 @Test
    public void test() {
        User user = new User(210L,"张六");
        User user1 = new User(211L,"张七");
        User user2 = new User(214L,"张八");
        ArrayList<User> users = new ArrayList<>();
        users.add(user);
        users.add(user1);
        users.add(user2);
        userService.updateBatchById(users,2);

    }

对应的SQL

很明显这个一次处理两条,没有设置就一次全部修改,建议大家设置一下,减少数据库的压力

 4.根据 UpdateWrapper 条件,更新记录 需要设置sqlset

boolean update(Wrapper<T> updateWrapper);
 @Test
    public void test() {
        userService.update(new UpdateWrapper<User>()
                .set("name","李一")  //修改条件
        .eq("name","张六"));  //查询条件

    }

对应的SQL

4.根据 whereWrapper 条件,更新记录

boolean update(T updateEntity, Wrapper<T> whereWrapper);
 @Test
    public void test() {
        User user = new User(216L, "张六");
        userService.update( user ,new UpdateWrapper<User>()
        .eq("name","张五"));  //查询条件

    }

对应的SQL,id默认他不会修改的,所以你写不写id影响不大

 4.查询

1.get

1.1根据id查询

T getById(Serializable id);
 @Test
    public void test() {
        User byId = userService.getById(210l);

    }

对应的SQL

1.2根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")

T getOne(Wrapper<T> queryWrapper);
  @Test
    public void test() {
        User byId = userService.getOne(new QueryWrapper<User>().eq("id",216L));

    }

对应的SQL

1.3 根据 Wrapper,查询一条记录

T getOne(Wrapper<T> queryWrapper, boolean throwEx);

 在开发中,如果你需要精准的判断是两个环境出错了可以用这个方法。

 @Test
    public void test() {

        User byId = userService.getOne(
                new QueryWrapper<User>().eq("id",217L),false);

        if(byId!=null){
            System.out.println("数据真实存在");
        }else {
            System.out.println("数据不存在,或存在多条重复数据 ");
        }

    }

对应的结果和SQL

1.4 根据 Wrapper,查询一条记录

Map<String, Object> getMap(Wrapper<T> queryWrapper);
 @Test
    public void test() {
        Map<String, Object> map = userService.getMap(new QueryWrapper<User>().eq("name", "李一"));
        for (String key : map.keySet()) {
            Object value = map.get(key);
            System.out.println("Key = " + key + ", Value = " + value);
        }
    }

 对应的输出结果,最后结果就一条数据 ,

下面我说几个常用的,不常用的我就不写了,大家可以自己琢磨

1.5查询列表

List<T> list(Wrapper<T> queryWrapper);
@Test
    public void test() {
        List<User> users = userService.list(new LambdaQueryWrapper<User>().
                eq(User::getName, "李一"));

    }

运行结果 

 1.6查询总记录数

int count(Wrapper<T> queryWrapper);
 @Test
    public void test() {
        int i = userService.count(new LambdaQueryWrapper<User>().
                eq(User::getName, "李一"));
        System.out.println(i);
    }

 运行结果

 条件构造器我这里

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在控制层中使用MyBatis-Plus提供的Service层增删改查方法来实现更新方法,可以按照以下方式进行操作: 1. 引入相关的类和注解。 ```java import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; ``` 2. 在控制层中注入Service对象。 ```java @Autowired private UserService userService; ``` 3. 实现更新方法,调用Service层提供的相应方法。 ```java @PutMapping("/{id}") public boolean updateUser(@PathVariable Long id, @RequestBody User user) { user.setId(id); return userService.updateById(user); } ``` 在上述示例中,我们使用`@PutMapping`注解来处理PUT请求,并通过`@PathVariable`注解将路径中的`id`参数绑定到方法参数`Long id`上。我们还通过`@RequestBody`注解将请求体中的数据绑定到方法参数`User user`上。 然后,我们调用Service层的`updateById`方法来更新指定ID的用户信息。 确保您已经在Service层中定义了相应的更新方法,并且已经在配置文件中配置了相关的依赖和Bean。同时,确保您的实体类User使用MyBatis-Plus的注解。 通过上述方式,您可以在控制层中使用MyBatis-Plus提供的Service层方法来实现更新操作。根据具体的业务需求,您可以修改方法签名和调用逻辑来满足您的实际需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Royalreairman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值