首页 > 其他分享 >mybatis之MetaObject

mybatis之MetaObject

时间:2022-09-04 20:15:05浏览次数:59  
标签:MetaObject author SystemMetaObject OBJECT UserInfo mybatis metaObject

MetaObject

元数据对象,底层肯定是反射,通过反射来进行设置值。

这个可以来操作对象中的属性,哪怕是组合方式,无论有多少层,这个都可以来进行操作。

举例如下所示:

public class Author implements Serializable {
    private static final long serialVersionUID = 1L;
    private Integer id;
    private List<String> hobbies;
    private Boolean flag;
    private Map<String,Object> objectMap;

    @Override
    public String toString() {
        return "Author{" +
                "id=" + id +
                ", hobbies=" + hobbies +
                ", flag=" + flag +
                ", objectMap=" + objectMap +
                '}';
    }
}
public class UserInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private Author author;

    @Override
    public String toString() {
        return "UserInfo{" +
                "name='" + name + '\'' +
                ", author=" + author +
                '}';
    }
}

MetaObject来进行演示:

直接给属性赋值

@Test
public void testOne(){
    UserInfo userInfo = new UserInfo();
    MetaObject metaObject =  MetaObject.forObject(userInfo, SystemMetaObject.DEFAULT_OBJECT_FACTORY,SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY,SystemMetaObject.NULL_META_OBJECT.getReflectorFactory());
    metaObject.setValue("author.id",666);
    System.out.println(userInfo);
}

输出结果:

UserInfo{name='null', author=Author{id=666, hobbies=null, flag=null, objectMap=null}}

即使没有创建对象,但是使用MetaObject,也能够帮我们来创建这个类中的类的对象。

根据驼峰命名来查找得到对应的属性

@Test
public void testTwo(){
    UserInfo userInfo = new UserInfo();
    MetaObject metaObject =  MetaObject.forObject(userInfo, SystemMetaObject.DEFAULT_OBJECT_FACTORY,SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY,SystemMetaObject.NULL_META_OBJECT.getReflectorFactory());
    // 支持驼峰命名
    String objectMmap = metaObject.findProperty("author.object_map", true);
    System.out.println(objectMmap);
}

对应输出:

author.objectMap

操作子属性中的数组

@Test
public void testFour(){
    UserInfo userInfo = new UserInfo();
    MetaObject metaObject =  MetaObject.forObject(userInfo, SystemMetaObject.DEFAULT_OBJECT_FACTORY,SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY,SystemMetaObject.NULL_META_OBJECT.getReflectorFactory());
    ArrayList<String> strings = new ArrayList<>();
    strings.add("666");
    strings.add("777");
    strings.add("888");
    metaObject.setValue("author.hobbies",strings);
    System.out.println(metaObject.getValue("author.hobbies[2]"));
}

输出:

888

操作子属性中的map

@Test
public void testThree(){
    UserInfo userInfo = new UserInfo();
    MetaObject metaObject =  MetaObject.forObject(userInfo, SystemMetaObject.DEFAULT_OBJECT_FACTORY,SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY,SystemMetaObject.NULL_META_OBJECT.getReflectorFactory());
    HashMap<String, Object> stringObjectHashMap = new HashMap<>();
    stringObjectHashMap.put("hello",777);
    stringObjectHashMap.put("world",888);
    metaObject.setValue("author.objectMap",stringObjectHashMap);
    System.out.println(metaObject.getValue("author.objectMap[hello]"));
}

打印:

777

标签:MetaObject,author,SystemMetaObject,OBJECT,UserInfo,mybatis,metaObject
From: https://www.cnblogs.com/likeguang/p/16655859.html

相关文章

  • Mybatis学习笔记(二)——Mybatis核心对象
    1.Mybatis核心对象MyBatis有三个基本要素:核心接口和类MyBatis核心配置文件(mybatis-config.xml)SQL映射文件(mapper.xml)1.1核心接口和类每个MyBatis应用程序都以......
  • Mybatis学习笔记(一)——简介
     1.Mybatis是什么MyBatis是一个开源、轻量级的数据持久化框架,是JDBC和Hibernate的替代方案。MyBatis内部封装了JDBC,简化了加载驱动、创建连接、创建statement......
  • MyBatis 三
    设置别名    安装MyBatisx插件可以很方便的管理 ......
  • MyBatis 二
    Mapper代理:1、可以简化后期执行SQL2、解决原生方式中的硬编码  开发步骤:1、定义与SQL映射文件同名的Mapper接口,并且将Mapper接口与Sql映射文件放置在......
  • Mybatis Plus公共字段自动填充
    MybatisPlus公共字段自动填充,也就是在插入或者更新的时候为指定字段赋予指定的值,使用它的好处就是可以统一对这些字段进行处理,避免了重复代码。 实现步骤:1、在实体类......
  • MyBatis
    定义:MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通......
  • Mybatis的ResultMap和ResultType的区别
    在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解resultType:当使用re......
  • SpringBoot+mybatis项目 配置控制台打印sql语句
    @SpringBoot+mybatis项目配置控制台打印sql语句前几天在做项目的过程中,使用的持久层框架是mybatis,在mapper.xml中自己写sql,当时写完了自己的业务代码,测试时候一直觉得数......
  • mybatis的面试问题以及基础知识
    1.什么是映射,mybatis中的映射指的是什么?映射:人的身份证号唯一对应的唯一的人的性命,也就是通过特定的存在的关系将A和B一一对应,这就是映射,在计算机中,计算机只会听懂0和1,我......
  • Mybatis
    1、概述MyBatis是一款优秀的持久层框架MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程MyBatis可以使用简单的XML或注解来配置和映射......