mybatisPlus之ActiveRecord模式及SimpleQuery使用

简介: mybatisPlus之ActiveRecord模式及SimpleQuery使用

ActiveRecord介绍

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

说明:

  • 实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 需要项目中已注入对应实体的BaseMapper

ActiveRecord 模式 CRUD

必须存在对应的原始mapper并继承baseMapper并且可以使用的前提下 才能使用此 AR 模式 !!!

ActiveRecord实现

接下来我们来看一下ActiveRecord的实现步骤

1】让实体类继承Model<User>

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User extends Model<User> {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

我们可以看到,Model类中提供了一些增删改查方法,这样的话我们就可以直接使用实体类对象调用这些增删改查方法了,简化了操作的语法,但是他的底层依然是需要UserMapper的,所以持久层接口并不能省略

【2】测试ActiveRecord模式的增删改查

添加数据

@Test
  void activeRecordAdd(){
    User user = new User();
    user.setName("wang");
    user.setAge(35);
    user.setEmail("wang@powernode.com");
    user.insert();
}

删除数据

@Test
void activeRecordDelete(){
    User user = new User();
    user.setId(8L);
    user.deleteById();
}

修改数据

@Test
void activeRecordUpdate(){
    User user = new User();
    user.setId(6L);
    user.setAge(50);
    user.updateById();
}

查询数据

@Test
void activeRecordSelect(){
    User user = new User();
    user.setId(6L);
    User result = user.selectById();
    System.out.println(result);
}

SimpleQuery介绍

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

SimpleQuery实现

list
    @SafeVarargs
    public static <E, A> List<A> list(
    LambdaQueryWrapper<E> wrapper, 
    SFunction<E, A> sFunction, 
    boolean isParallel, 
    Consumer<E>... peeks) {
        return list2List(Db.list(wrapper.setEntityClass(getType(sFunction))), sFunction, isParallel, peeks);
    }

Params:

wrapper – 条件构造器
sFunction – 需要的列
isParallel – 是否并行流
peeks – 后续操作

演示基于字段封装集合

@Test
void testList2(){
    List<String> names = SimpleQuery.list(
    new LambdaQueryWrapper<User>().eq(User::getName, "Mary"),
    User::getName,
    e -> Optional.of(e.getName()).map(String::toLowerCase).ifPresent(e::setName));
    System.out.println(names);
}
map
    @SafeVarargs
    public static <E, A, P> Map<A, P> map
    (LambdaQueryWrapper<E> wrapper, 
    SFunction<E, A> keyFunc, 
    SFunction<E, P> valueFunc, 
    boolean isParallel,
     Consumer<E>... peeks) 
    {
        return list2Map(Db.list(wrapper.setEntityClass(getType(keyFunc))), keyFunc, valueFunc, isParallel, peeks);
    }

传入Wrappers和key,从数据库中根据条件查询出对应的列表,封装成Map

Params:

wrapper – 条件构造器
keyFunc – key
valueFunc – value
isParallel – 是否并行流

peeks – 封装成map时可能需要的后续操作,不需要可以不传

演示将所有的对象以id,实体的方式封装为Map集合

@Test
void testMap(){
    //将所有元素封装为Map形式
    Map<Long, User> idEntityMap = SimpleQuery.keyMap(
            new LambdaQueryWrapper<>(), User::getId);
    System.out.println(idEntityMap);
}

演示将单个对象以id,实体的方式封装为Map集合

@Test
void testMap2(){
    //将单个元素封装为Map形式
    Map<Long, User> idEntityMap = SimpleQuery.keyMap(
            new LambdaQueryWrapper<User>().eq(User::getId,1L), User::getId);
    System.out.println(idEntityMap);
}

演示只想要idname组成的map

@Test
void testMap3(){
    //只想要只想要id和name组成的map
    Map<Long, String> idNameMap = SimpleQuery.map(
            new LambdaQueryWrapper<>(), User::getId, User::getName);
    System.out.println(idNameMap);
}
Group

演示分组效果

@Test
void testGroup(){
    Map<String, List<User>> nameUsersMap = SimpleQuery.group(
                new LambdaQueryWrapper<>(), User::getName);
    System.out.println(nameUsersMap);
}

相同姓名为一组,name作为map的key,同一姓名放在一个List集合中作为value


相关文章
|
9月前
|
Java 关系型数据库 数据库连接
MyBatis Plus在AR道路上的探索之ActiveRecord
MyBatis Plus在AR道路上的探索之ActiveRecord
197 0
|
9月前
mybatis-plus使用oceanbase-oracle模式
mybatis-plus使用oceanbase-oracle模式
572 2
|
9月前
|
Java 数据库连接 mybatis
结构性模式之---外观模式、MyBatis中Configuration的外观模式的使用分析
结构性模式之---外观模式、MyBatis中Configuration的外观模式的使用分析
|
9月前
|
缓存 Java 数据库连接
MyBatis支持的缓存刷新模式
MyBatis支持的缓存刷新模式
293 1
|
SQL JSON 前端开发
SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十二)
SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十二)
88 0
|
JSON 前端开发 Java
SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十一)
SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十一)
95 0
|
SQL Java 数据库连接
Mybatis多对一,一对多查询模式
按照结果嵌套处理 StudentMapper.xml: 使用复杂的SQL语句直接进行连表查询:
141 0
Mybatis多对一,一对多查询模式
|
SQL Java 程序员
(二)mybatisPlus实现ActiveRecord(AR)操作
mybatisPlus实现ActiveRecord(AR)操作 🍅 Java学习路线:搬砖工的Java学习路线 🍅 作者:程序员小王 🍅 程序员小王的博客:https://www.wolai.com/wnaghengjie/ahNwvAUPG2Hb1Sy7Z8waaF 🍅 扫描主页左侧二维码,加我微信 一起学习、一起进步 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
170 0
(二)mybatisPlus实现ActiveRecord(AR)操作
|
Java 数据库连接 PHP
Data Access 之 MyBatis Plus(六)- ActiveRecord
Data Access 之 MyBatis Plus(六)- ActiveRecord
Data Access 之 MyBatis Plus(六)- ActiveRecord
|
Java 关系型数据库 MySQL
springboot整合mybatis(配置模式+注解模式)
springboot整合mybatis 一.简单介绍 二具体配置 2.1.配置相关的依赖. 2.2 写.mapper、controller、service 2.2.1mapper文件 2.2.2service文件 2.2.2controller文件 2.3配置相关文件 三、结果截图 四、可能遇到的报错 SpringBoot连接数据库报错:Access denied for user ‘root‘@‘localhost‘ (using password: YES)
752 0
springboot整合mybatis(配置模式+注解模式)