ToB企服应用市场:ToB评测及商务社交产业平台

标题: 五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”( [打印本页]

作者: 一给    时间: 2024-9-30 13:55
标题: 五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(
五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)

@
目录

1. ActiveRecord 模式

2. ActiveRecord介绍

ActiveRecord(活动记录,简称AR),是一种领域模子模式,特点是一个模子类对应关系型数据库中的一个表,而模子类的一个实例对应表中的一行记录。ActiveRecord,一直广受解释型动态语言(PHP,Ruby 等)的喜爱,通过围绕一个数据对象举行 CRUD 操纵。而Java作为准静态(编译型语言),对于 ActiveRecord 往往只能感叹其优雅,以是 MP 也在 AR 道路上举行了肯定的探索,仅仅需要让实体类继承 Model 类且实现主键指定方法,即可开启 AR 之旅。
2.1 ActiveRecord实现

接下来我们来看一下ActiveRecord的实现步骤
想要使用 ActiveRecord 模式,就需要让对应的实体类(Java Bean)  extends(继承) Model 类。

我们可以看到,Model 类中提供了一些增删改查方法,这样的话我们就可以直接使用实体类对象调用这些增删改查方法了,简化了操纵的语法,但是他的底层依然是需要 UserMapper 的,以是持久层接口不能省略。
测试 ActiveRecord 模式的增删改查。
添加数据
  1. import com.rainbowsea.bean.User;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.boot.test.context.SpringBootTest;
  4. @SpringBootTest
  5. public class ActiveRecordTest {
  6.     //public class User extends Model<User>, 需要继承 extends Model<User>
  7.     // 添加操作
  8.     @Test
  9.     void activeRecordAdd() {
  10.         User user = new User();
  11.         user.setName("zhang");
  12.         user.setAge(28);
  13.         user.setEmail("zhang@rainbowsea.com");
  14.         user.insert();
  15.     }
  16. }
复制代码

删除数据
  1. import com.rainbowsea.bean.User;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.boot.test.context.SpringBootTest;
  4. @SpringBootTest
  5. public class ActiveRecordTest {
  6.     //public class User extends Model<User>, 需要继承 extends Model<User>
  7.     // 删除操作
  8.     @Test
  9.     void activeRecordDelete() {
  10.         User user = new User();
  11.         user.setId("1837781440184680449");
  12.         user.deleteById();
  13.     }
  14. }
复制代码

修改数据
  1. import com.rainbowsea.bean.User;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.boot.test.context.SpringBootTest;
  4. @SpringBootTest
  5. public class ActiveRecordTest {
  6.     //public class User extends Model<User>, 需要继承 extends Model<User>
  7.     // 修改操作
  8.     @Test
  9.     void activeRecordUpdate() {
  10.         User user = new User();
  11.         user.setId("3");
  12.         user.setAge(1);
  13.         user.updateById();
  14.     }
  15. }
复制代码

查询数据
  1. import com.rainbowsea.bean.User;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.boot.test.context.SpringBootTest;
  4. @SpringBootTest
  5. public class ActiveRecordTest {
  6.     //public class User extends Model<User>, 需要继承 extends Model<User>
  7.     // 查询操作
  8.     @Test
  9.     void activeRecordSelect() {
  10.         User user = new User();
  11.         user.setId("7");
  12.         User result = user.selectById();
  13.         System.out.println(result);
  14.     }
  15. }
复制代码

3. SimpleQuery 工具类

3.1 SimpleQuery介绍

SimpleQuery 可以对 selectList 查询后的结果用 Stream 流举行了一些封装,使其可以返回一些指定结果,简洁了 api 的调用。
3.2 list

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import javax.annotation.Resource;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Optional;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class SimpleQueryTest {
  14.     @Resource
  15.     private UserMapper userMapper;
  16.     @Test
  17.     void testList() {
  18.         List<String> list = SimpleQuery.list(new LambdaQueryWrapper<User>().eq(User::getName, "Mary"), User::getId);
  19.         System.out.println(list);
  20.     }
  21. }
复制代码

对于封装后的字段举行 lambda 操纵。
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import javax.annotation.Resource;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Optional;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class SimpleQueryTest {
  14.     @Resource
  15.     private UserMapper userMapper;
  16.     @Test
  17.     void testList2() {
  18.         List<String> list = SimpleQuery.list(new LambdaQueryWrapper<User>().eq(User::getName, "Mary"), User::getName,
  19.                 new Consumer<User>() {
  20.                     @Override
  21.                     public void accept(User user) {
  22.                         Optional.of(user.getName()).map(String::toLowerCase).ifPresent(user::setName);
  23.                     }
  24.                 });
  25.         System.out.println(list);
  26.     }
  27. }
复制代码
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import javax.annotation.Resource;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Optional;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class SimpleQueryTest {
  14.     @Resource
  15.     private UserMapper userMapper;
  16.     // 使用lab表达式
  17.     @Test
  18.     void testList3() {
  19.         List<String> list = SimpleQuery.list(new LambdaQueryWrapper<User>().eq(User::getName, "Mary"), User::getName,
  20.                 user -> Optional.of(user.getName()).map(String::toLowerCase).ifPresent(user::setName));
  21.         System.out.println(list);
  22.     }
  23. }
复制代码
3.3 map

将所有的对象以id,实体的方式封装为Map集合
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import javax.annotation.Resource;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Optional;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class SimpleQueryTest {
  14.     @Resource
  15.     private UserMapper userMapper;
  16.     @Test
  17.     void testMap() {
  18.         Map<String, User> map = SimpleQuery.keyMap(new LambdaQueryWrapper<User>(), User::getId);
  19.         System.out.println(map);
  20.     }
  21. }
复制代码
将单个对象以id,实体的方式封装为Map集合
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import javax.annotation.Resource;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Optional;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class SimpleQueryTest {
  14.     @Resource
  15.     private UserMapper userMapper;
  16.     @Test
  17.     void testMap2() {
  18.         Map<String, User> map = SimpleQuery.keyMap(new LambdaQueryWrapper<User>().eq(User::getId, 1L), User::getId);
  19.         System.out.println(map);
  20.     }
  21. }
复制代码
只想要 id 和 name 构成的 map
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import javax.annotation.Resource;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Optional;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class SimpleQueryTest {
  14.     @Resource
  15.     private UserMapper userMapper;
  16.     @Test
  17.     void testMap3() {
  18.         Map<String, String> map = SimpleQuery.map(new LambdaQueryWrapper<User>(), User::getId, User::getName);
  19.         System.out.println(map);
  20.     }
  21. }
复制代码
3.4 Group

Group 就是简单的分组效果。
  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.extension.toolkit.SimpleQuery;
  3. import com.rainbowsea.bean.User;
  4. import com.rainbowsea.mapper.UserMapper;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import javax.annotation.Resource;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Optional;
  11. import java.util.function.Consumer;
  12. @SpringBootTest
  13. public class SimpleQueryTest {
  14.     @Resource
  15.     private UserMapper userMapper;
  16.     @Test
  17.     void testGroup() {
  18.         Map<String, List<User>> map = SimpleQuery.group(new LambdaQueryWrapper<User>(), User::getName);
  19.         System.out.println(map);
  20.     }
  21. }
复制代码
4. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上汲取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继承在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4