找回密码
 立即注册
查看: 28|回复: 0

SpringCloud微服务开发与实战之批量新增,10万数据测试

[复制链接]

152

主题

5

精华

156

金币

技术维护QQ:515138

积分
337
发表于 2026-1-4 20:18:49 | 显示全部楼层 |阅读模式
SpringCloud微服务开发与实战之批量新增

  1. package com.itheima.mp;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  5. import com.itheima.mp.domain.po.User;
  6. import com.itheima.mp.mapper.UserMapper;
  7. import com.itheima.mp.service.IUserService;
  8. import org.junit.jupiter.api.Test;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.boot.test.context.SpringBootTest;
  11. import java.time.LocalDateTime;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. @SpringBootTest
  15. class MpDemoApplicationTests {
  16.     @Autowired
  17.     private UserMapper userMapper;
  18.     @Autowired
  19.     private IUserService userService;
  20.     @Test
  21.     void testInsert() {
  22.         User user = new User();
  23.         user.setId(5L);
  24.         user.setUsername("Lucya");
  25.         user.setPassword("123");
  26.         user.setPhone("18688990011");
  27.         user.setBalance(200);
  28.         user.setInfo("{"age": 24, "intro": "英文老师", "gender": "female"}");
  29.         user.setCreateTime(LocalDateTime.now());
  30.         user.setUpdateTime(LocalDateTime.now());
  31.         userMapper.insert(user);
  32.     }
  33.     @Test
  34.     void testSelectById() {
  35.         User user = userMapper.selectById(5L);
  36.         System.out.println("user = " + user);
  37.     }
  38.     @Test
  39.     void testSelectByIds() {
  40.         List<User> users = userMapper.selectByIds(List.of(1L, 2L, 3L, 4L, 5L));
  41.         users.forEach(System.out::println);
  42.     }
  43.     @Test
  44.     void testUpdateById() {
  45.         User user = new User();
  46.         user.setId(5L);
  47.         user.setBalance(20000);
  48.         userMapper.updateById(user);
  49.     }
  50.     @Test
  51.     void testDelete() {
  52.         userMapper.deleteById(5L);
  53.     }
  54.     // 查询:查询出名字中带o的,存款大于等于1000元的人。代码如下:
  55.     @Test
  56.     void testQueryWrapper() {
  57.         QueryWrapper<User> wrapper = new QueryWrapper<User>()
  58.                 .select("id", "username", "info", "balance")
  59.                 .like("username", "o")
  60.                 .ge("balance", 1000);
  61.         List<User> users = userMapper.selectList(wrapper);
  62.         users.forEach(System.out::println);
  63.     }
  64.     // 更新用户名为jack的用户的余额为2000
  65.     @Test
  66.     void testUpdateByQueryWrapper() {
  67.         // 1.构建查询条件 where name = "Jack"
  68.         QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("username", "Jack");
  69.         // 2.更新数据,user中非null字段都会作为set语句
  70.         User user = new User();
  71.         user.setBalance(2000);
  72.         userMapper.update(user, wrapper);
  73.     }
  74.     // 更新id为1,2,4的用户的余额,扣200
  75.     @Test
  76.     void testUpdateWrapper() {
  77.         List<Long> ids = List.of(1L, 2L, 4L);
  78.         // 1.生成SQL
  79.         UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
  80.                 .setSql("balance = balance - 200")// SET balance = balance - 200
  81.                 .in("id", ids); // WHERE id in (1, 2, 4)
  82.         // 2.更新,注意第一个参数可以给null,也就是不填更新字段和数据,
  83.         // 而是基于UpdateWrapper中的setSQL来更新
  84.         userMapper.update(null, wrapper);
  85.     }
  86.     // LambdaQueryWrapper方式
  87.     @Test
  88.     void testLambdaQueryWrapper() {
  89.         // 1.构建条件 WHERE username LIKE "%o%" AND balance >= 1000
  90.         LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
  91.                 .select(User::getId, User::getUsername, User::getInfo, User::getBalance)
  92.                 .like(User::getUsername, "o")
  93.                 .ge(User::getBalance, 1000);
  94.         // 2.查询
  95.         List<User> users = userMapper.selectList(wrapper);
  96.         users.forEach(System.out::println);
  97.     }
  98.     // 自定义sql
  99.     @Test
  100.     void testCustomWrapper() {
  101.         // 1.准备自定义查询条件
  102.         List<Long> ids = List.of(1L, 2L, 4L);
  103.         int balance = 200;
  104.         LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().in(User::getId, ids);
  105.         // 2.调用mapper的自定义方法,直接传递Wrapper
  106.         userMapper.deductBalanceByIds(wrapper,balance);
  107.     }
  108.     @Test
  109.     void testSaveUser() {
  110.         User user = new User();
  111.         user.setId(8L);
  112.         user.setUsername("Lucyaaa");
  113.         user.setPassword("123");
  114.         user.setPhone("18688990011");
  115.         user.setBalance(200);
  116.         user.setInfo("{"age": 24, "intro": "英文老师", "gender": "female"}");
  117.         user.setCreateTime(LocalDateTime.now());
  118.         user.setUpdateTime(LocalDateTime.now());
  119.         userService.save(user);
  120.     }
  121.     @Test
  122.     void testQuery() {
  123.         List<User> users = userService.listByIds(List.of(1L, 2L, 3L, 4L, 5L));
  124.         users.forEach(System.out::println);
  125.     }
  126.     @Test
  127.     void testSaveOneByOne() {
  128.         long b = System.currentTimeMillis();
  129.         for (int i = 1; i <= 100000; i++) {
  130.             userService.save(buildUser(i));
  131.         }
  132.         long e = System.currentTimeMillis();
  133.         System.out.println("耗时:" + (e - b)/1000 + "秒");
  134.     }
  135.     private User buildUser(int i) {
  136.         User user = new User();
  137.         user.setUsername("user_" + i);
  138.         user.setPassword("123");
  139.         user.setPhone("" + (18688190000L + i));
  140.         user.setBalance(0);
  141.         user.setInfo("{"age": 1}");
  142.         user.setCreateTime(LocalDateTime.now());
  143.         user.setUpdateTime(user.getCreateTime());
  144.         return user;
  145.     }
  146.     @Test
  147.     void testJinHei() {
  148.         // 准备100万条数据
  149.         List<User> list = new ArrayList<>(1000);
  150.         long b = System.currentTimeMillis();
  151.         for (int i = 1; i <= 100000; i++) {
  152.             list.add(buildUser(i));
  153.             // 每1000条批量插入一次
  154.             if (i % 1000 == 0) {
  155.                 userService.saveBatch(list);
  156.                 list.clear();
  157.             }
  158.         }
  159.         long e = System.currentTimeMillis();
  160.         System.out.println("耗时:" + (e - b)/1000 + "秒");
  161.     }
  162. }
复制代码
游客,如果您要查看本帖隐藏内容请回复




上一篇:Restful风格
下一篇:SpringCloud微服务开发与实战之代码生成
网站建设,公众号小程序开发,系统定制,软件App开发,技术维护【联系我们】手机/微信:17817817816 QQ:515138

QQ|Archiver|自丢网 ( 粤ICP备2024252464号-1 )

GMT+8, 2026-1-13 00:31

专注于网站建设,公众号小程序制作,商城小程序,系统定制,软件App开发

【联系我们】手机/微信:17817817816 QQ:515138

快速回复 返回顶部 返回列表