精华内容
下载资源
问答
  • 映射字段
    2022-01-06 14:18:08

    mybatis-plus使用对象属性进行SQL操作,经常会出现对象属性非表字段的情况,忽略映射字段使用以下注解:

    @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。

    @TableField(exist = true):表示该属性为数据库表字段。

    @TableName:数据库表相关

    @TableId:表主键标识

    @TableField:表字段标识

    @TableLogic:表字段逻辑处理注解(逻辑删除)

    更多相关内容
  • 映射字段类型汇总版本号映射字段类型常见类型binarybooleanKeywordsDatesalias对象和关系类型objectflattenednestedjoin结构化数据类型Rangeipversionmurmur3汇总数据类型aggregate_metric_doublehistogram文字搜索...

    版本号

    7.11

    映射字段类型

    常见类型

    binary

    二进制值编码为Base64字符串

    boolean

    布尔类型 true或者false

    Keywords

    包括了

    • keyword,用于结构化内容,例如ID,电子邮件地址,主机名,状态代码,邮政编码或标签。
    • constant_keyword,始终包含相同值的关键字字段
    • wildcard,可针对类似grep的通配符查询优化日志行和类似的关键字值。

    Dates

    日期类型,包括了

    • date
    • date_nanos, 以纳秒级的分辨率存储日期,这限制了它的日期范围从大约1970到2262,因为日期仍存储为自纪元以来的较长的纳秒级表示。

    alias

    一个别名映射为索引中的一个字段定义的替代名称。

    PUT trips
    {
      "mappings": {
        "properties": {
          "distance": {
            "type": "long"
          },
          "route_length_miles": {
            "type": "alias",
            "path": "distance" 
          },
          "transit_mode": {
            "type": "keyword"
          }
        }
      }
    }
    

    对象和关系类型

    object

    json对象

    flattened

    整个对象映射为单字段,目的是为了防止动态映射对象导致的映射爆炸。

    nested

    nested是对象数据类型的专门版本,它允许以可以彼此独立地查询对象的方式对对象数组进行索引。

    如果需要为对象数组建立索引并保持数组中每个对象的独立性,请使用nested而不是object。

    join

    join数据类型是一个特殊字段,可在相同索引的文档中创建父/子关系。 关系部分在文档中定义了一组可能的关系,每个关系都是父名称和子名称。

    PUT my-index-000001
    {
      "mappings": {
        "properties": {
          "my_id": {
            "type": "keyword"
          },
          "my_join_field": { 
            "type": "join",
            "relations": {
              "question": "answer" 
            }
          }
        }
      }
    }
    

    结构化数据类型

    Range

    包括了

    • long_range,
    • double_range
    • date_range
    • ip_range

    ip

    包括了ipv4和ipv6,查询可以查网段。

    version

    软件版本号

    murmur3

    哈希值

    汇总数据类型

    aggregate_metric_double

    存储度量标准聚合的预聚合数值。 Aggregate_metric_double字段是一个对象,其中包含一个或多个以下度量标准子字段:min,max,sum和value_count。

    histogram

    用于存储表示直方图的预聚合数值数据的字段。

    文字搜索类型

    text

    非结构化文本。

    annotated-text

    包含特殊标记的文本。 用于标识命名实体。

    completion

    自动完成建议

    search_as_you_type

    search_as_you_type字段类型是一个类似文本的字段,经过优化,可以为提供按需输入完成情况的查询提供开箱即用的支持。

    token_count

    文本中的令牌数,也可以理解为单词。

    文档等级类型

    dense_vector

    记录浮点值的密集向量。

    sparse_vector

    记录浮点值的稀疏向量。

    rank_feature

    记录数字功能以提高查询时的点击率。

    rank_features

    记录数字功能以提高查询时的点击率。

    仅支持单值功能和严格为正的值。多值字段和零或负值将被拒绝。

    空间数据类型

    geo_point

    经纬度地理位置

    PUT my-index-000001
    {
      "mappings": {
        "properties": {
          "location": {
            "type": "geo_point"
          }
        }
      }
    }
    
    PUT my-index-000001/_doc/1
    {
      "text": "Geo-point as an object",
      "location": { 
        "lat": 41.12,
        "lon": -71.34
      }
    }
    
    

    geo_shape

    复杂的形状,例如多边形。

    point

    任意笛卡尔点。

    PUT my-index-000001
    {
      "mappings": {
        "properties": {
          "location": {
            "type": "point"
          }
        }
      }
    }
    
    PUT my-index-000001/_doc/1
    {
      "text": "Point as an object",
      "location": { 
        "x": 41.12,
        "y": -71.34
      }
    }
    

    shape

    任意笛卡尔几何。

    其他类型

    percolator

    索引以查询DSL编写的查询。

    数组

    在Elasticsearch中,数组不需要专用的字段数据类型。 默认情况下,任何字段都可以包含零个或多个值,但是,数组中的所有值都必须具有相同的字段类型。

    多字段

    为不同的目的以不同的方式对同一字段建立索引。 例如,可以将字符串字段映射为用于全文本搜索的文本字段,并映射为用于排序或聚合的关键字字段:

    PUT my-index-000001
    {
      "mappings": {
        "properties": {
          "city": {
            "type": "text",
            "fields": {
              "raw": { 
                "type":  "keyword"
              }
            }
          }
        }
      }
    }
    

    参考资料

    • https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html
    展开全文
  • JSON映射字段。可映射成对象或数组

    千次阅读 2022-03-29 18:14:07
    因为项目对接了jira,jira api查询的数据太复杂且没有固定格式,所以写了一个简单的映射 // 原始数据 { "expand": "projects", "projects": [ { "self": "http://10.50.10.100:30089/rest/api/2/project/10003",...

    因为项目对接了jira,jira api查询的数据太复杂且没有固定格式,所以写了一个简单的映射

    // 原始数据
    {
        "expand": "projects",
        "projects": [
            {
                "self": "http://10.50.10.100:30089/rest/api/2/project/10003",
                "id": "10003",
                "key": "GO",
                "name": "GO",
                "avatarUrls": {
                    "48x48": "http://10.50.10.100:30089/secure/projectavatar?pid=10003&avatarId=10606",
                    "24x24": "http://10.50.10.100:30089/secure/projectavatar?size=small&pid=10003&avatarId=10606",
                    "16x16": "http://10.50.10.100:30089/secure/projectavatar?size=xsmall&pid=10003&avatarId=10606",
                    "32x32": "http://10.50.10.100:30089/secure/projectavatar?size=medium&pid=10003&avatarId=10606"
                },
                "issuetypes": [
                    {
                        "self": "http://10.50.10.100:30089/rest/api/2/issuetype/10002",
                        "id": "10002",
                        "description": "需要完成的任务。",
                        "iconUrl": "http://10.50.10.100:30089/secure/viewavatar?size=xsmall&avatarId=10318&avatarType=issuetype",
                        "name": "任务",
                        "subtask": false
                    },
                    {
                        "self": "http://10.50.10.100:30089/rest/api/2/issuetype/10003",
                        "id": "10003",
                        "description": "事务的子任务。",
                        "iconUrl": "http://10.50.10.100:30089/secure/viewavatar?size=xsmall&avatarId=10316&avatarType=issuetype",
                        "name": "开发子任务",
                        "subtask": true
                    },
                    {
                        "self": "http://10.50.10.100:30089/rest/api/2/issuetype/10001",
                        "id": "10001",
                        "description": "由 Jira Software 创建——请勿编辑或删除。适用于一种用户故事的事务类型。",
                        "iconUrl": "http://10.50.10.100:30089/images/icons/issuetypes/story.svg",
                        "name": "故事",
                        "subtask": false
                    },
                    {
                        "self": "http://10.50.10.100:30089/rest/api/2/issuetype/10202",
                        "id": "10202",
                        "description": "For Go2Group SYNAPSE Test Case issue type",
                        "iconUrl": "http://10.50.10.100:30089/download/resources/com.go2group.jira.plugin.synapse/synapse/images/icon-testcase.png",
                        "name": "测试用例",
                        "subtask": false
                    },
                    {
                        "self": "http://10.50.10.100:30089/rest/api/2/issuetype/10203",
                        "id": "10203",
                        "description": "For Go2Group SYNAPSE Test Plan issue type",
                        "iconUrl": "http://10.50.10.100:30089/download/resources/com.go2group.jira.plugin.synapse/synapse/images/icon-testplan.png",
                        "name": "测试计划",
                        "subtask": false
                    },
                    {
                        "self": "http://10.50.10.100:30089/rest/api/2/issuetype/10204",
                        "id": "10204",
                        "description": "For Go2Group SYNAPSE Bug issue type",
                        "iconUrl": "http://10.50.10.100:30089/download/resources/com.go2group.jira.plugin.synapse/synapse/images/icon-bug.png",
                        "name": "缺陷",
                        "subtask": false
                    }
                ]
            }
        ]
    }
    

    我想取
    projects.issuetypes.id和projects.issuetypes.name

    // 解析后数据
    [
      {
        "issueTypeId": "10002",
        "issueTypeName": "任务"
      },
      {
        "issueTypeId": "10003",
        "issueTypeName": "开发子任务"
      },
      {
        "issueTypeId": "10001",
        "issueTypeName": "故事"
      },
      {
        "issueTypeId": "10202",
        "issueTypeName": "测试用例"
      },
      {
        "issueTypeId": "10203",
        "issueTypeName": "测试计划"
      },
      {
        "issueTypeId": "10204",
        "issueTypeName": "缺陷"
      }
    ]
    

    代码如下

    /**
     * @author Ledison
     * @date 2022/2/28
     */
    public class JsonAdapter extends AbstractAdapter implements AdapterExecute {
    
        public JsonAdapter(Map<String, String> map) {
            super(map);
        }
    
        private static void parseObject(String data, List<Map<String, Object>> out, String parentKey, Map<String, String> map, Map<String, Object> entity) {
            JSONObject jsonObject = JSON.parseObject(data);
            for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
                String key = entry.getKey();
                Object value = entry.getValue();
                if (value instanceof JSONArray) {
                    if (Func.isNotBlank(parentKey)) {
                        parseArray(JSON.toJSONString(value), parentKey + "." + key, out, map);
                    } else {
                        parseArray(JSON.toJSONString(value), key, out, map);
                    }
                } else if (value instanceof JSONObject) {
                    if (Func.isNotBlank(parentKey)) {
                        parseObject(JSON.toJSONString(value), out, parentKey + "." + key, map, entity);
                    } else {
                        parseObject(JSON.toJSONString(value), out, key, map, entity);
                    }
                } else {
                    if (Func.isBlank(parentKey) && map.containsKey(key)) {
                        entity.put(map.get(key), value);
                    } else if (Func.isNotBlank(parentKey) && map.containsKey(parentKey + "." + key)) {
                        entity.put(map.get(parentKey + "." + key), value);
                    }
                }
            }
        }
    
        private static void parseArray(String data, String parentKey, List<Map<String, Object>> out, Map<String, String> map) {
            JSONArray ja = JSONArray.parseArray(data);
            for (int i = 0; i < ja.size(); i++) {
                Object foreachJa = ja.get(i);
                if (foreachJa instanceof JSONArray) {
                    parseArray(JSON.toJSONString(foreachJa), parentKey, out, map);
                } else if (foreachJa instanceof JSONObject) {
                    Map<String, Object> entity = new HashMap<>();
                    out.add(entity);
                    parseObject(JSON.toJSONString(foreachJa), out, parentKey, map, entity);
                }
            }
        }
    
        @Override
        public R<Map<String, Object>> oneData(String data) {
            List<Map<String, Object>> maps = allData(data);
            return Func.isNotEmpty(maps) ? R.data(maps.get(0)) : R.data(new HashMap<>());
        }
    
        public List<Map<String, Object>> allData(String data) {
            Object parse = JSON.parse(data);
            List<Map<String, Object>> out = new ArrayList<>();
            if (parse instanceof JSONArray) {
                parseArray(data, null, out, map);
            } else if (parse instanceof JSONObject) {
                Map<String, Object> entity = new HashMap<>();
                out.add(entity);
                parseObject(data, out, null, map, entity);
            }
            CopyOnWriteArrayList<Map<String, Object>> list = new CopyOnWriteArrayList(out);
            list.removeIf(Func::isEmpty);
            return list;
        }
    
        @Override
        public R<IPage<Map<String, Object>>> pageData(String data, Query query) {
            IPage<Map<String, Object>> page = Condition.getPage(query);
            List<Map<String, Object>> maps = allData(data);
            List<Map<String, Object>> pageData = maps.stream().skip((page.getCurrent() - 1) * page.getSize()).limit(page.getSize()).collect(Collectors.toList());
            page.setRecords(pageData);
            page.setTotal(maps.size());
            return R.data(page);
        }
    }
    
    

    使用方式

    Map<String, String> map = new HashMap<>();
            // 字段映射
            map.put("projects.issuetypes.id","issueTypeId");
            map.put("projects.issuetypes.name","issueTypeName");
            JsonAdapter jsonAdapter = new JsonAdapter(map);
            // 原始数据
            String data = "";
            List<Map<String, Object>> maps = jsonAdapter.allData(data);
    
    展开全文
  • 在开发中我们可能会遇到MybatisPlus使用实体类属性进行SQL操作,实体中有这个属性,但是数据库的表没有这个字段(即:实体类属性非数据库表字段)。如果不做处理就会报错。 API @TableName:数据库表相关 @TableId...

    在开发中我们可能会遇到MybatisPlus使用实体类属性进行SQL操作,实体中有这个属性,但是数据库的表没有这个字段(即:实体类属性非数据库表字段)。如果不做处理就会报错。

    API

    @TableName:数据库表相关
    
    @TableId:表主键标识
    
    @TableField:表字段标识
    
    @TableLogic:表字段逻辑处理注解(逻辑删除

    解决方案

    @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。
     
    @TableField(exist = true):表示该属性为数据库表字段。

    在实体类的属性上面加上这个注解后,此字段就不会映射数据库了。 

       @TableField(exist = false)
        private String deptName;

     

    展开全文
  • 说明项目如果需要动态的生成SQL语句,那么语句中的字段名是一个比较麻烦的事情,虽然Entity对象和数据表一般是一比一按照驼峰命名法和下划线命名法标准转换来映射的,但是简单的将Entity对象中的属性转为字段名是一...
  • mybatis-plus查询时不能映射字段 mybatis-plus查询时不能映射字段 排查 原因 mybatis-plus查询时不能映射字段 新建项目配置好启动正常,但是测试时发现mybatis-plus查询中,未能将实体字段名映射为表中的列表。 ...
  • 文章目录Mybatis plus - 映射字段时排除不必要的字段,忽略字段1、声明该字段是 transient 的2、声明该字段是 static 的3、通过注解声明该字段不是一个数据库表里面的字段 Mybatis plus - 映射字段时排除不必要的...
  • MyBatis-Plus 忽略实体映射字段

    千次阅读 2021-07-22 17:05:07
    Mybatis-Plus 使用对象进行SQL操作,会出现对象属性非表字段的情况,可以采用忽略映射字段,使用以下注解: @TableField(exist=false):表示该属性不为数据库表字段,但又是必须使用的。 @TableField(exist= true)...
  • MyBatisPlus忽略映射字段注解 @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。 @TableField(exist = true):表示该属性为数据库表字段。 Mybatis-Plus 插件有这个功能,可以看一下 @...
  • 所以为了更加优雅的和数据库交互, 我们可以使用mybatis-plus 的 typeHandler 进行自动的类型映射 使用方式 实体类注解 在实体类的字段上加上注解 @TableField @TableField(value = "数据库字段名", typeHandler = ...
  • 在使用mybatis做查询的时候,我的数据库字段和实体类的字段名称并不一样,但是不知道为什么一样可以查询成功并对应去映射存值,但是这几天项目做其他功能的时候,突然间项目的字段映射又不成功了,没找到原因,但是...
  • elasticsearch 修改mapping映射字段

    万次阅读 2018-05-17 18:07:09
    首先,elasticsearch 并不支持修改mapping映射字段,无法直接修改,所以需要曲线救国。步骤一: 新建一个索引,字段和原字段一致,只修改需要的字段。步骤二: 把原数据给复制到新索引中。小规模数据可以直接用es...
  • 在使用mybatis 或者其它mybatis的二次开发框架时(例如mybatis-plus),有时候数据库...那么可以使用@TableField(exist = false)进行标识对应字段不属于数据库的映射字段即可。 当然可以点击进入@TableField(exist .
  • MyBatisPlus忽略映射字段注解

    千次阅读 2021-05-24 14:14:36
    MyBatisPlus忽略映射字段注解 @TableField(exist=false):表示该属性不为数据库表字段,但又是必须使用的。 @TableField(exist= true):表示该属性为数据库表字段。 Mybatis-Plus 插件有这个功能,可以看一下 ...
  • 1、声明该字段是 transient 的 private transient Integer a; 2、声明该字段是 static 的 private static Integer a; 3、通过注解声明该字段不是一个数据库表里面的字段 @TableField(exist = false) ...
  • matlab开发-结构输出变量的映射字段。程序将结构的每个字段分配给输出参数。
  • 1、声明该字段为 transient private transient List<SpecParam> params; 2、声明该字段为 static private static List<SpecParam> params; 3、通过注解@TableField(exist = false)声明 @TableField...
  • mybatis怎么忽略映射字段

    万次阅读 2018-01-17 17:36:45
    @TableField(exist = false) Mybatis-Plus 插件有这个功能,可以看一下
  • 1、mysql数据库字段 2、实体类 @Data @EqualsAndHashCode(callSuper=false) public class UserManager { private long id; private String name; private UserEnum userType; } 3、枚举 public enum ...
  • 一、mybatis的参数映射不同于字段映射,参数映射中的“参数”是指传入sql语句中的参数,而字段映射是指将JDBC的结果集ResultSet数据映射成javaBean。二、Mybatis的参数映射配置1、Mybatis的参数映射利用的属性是 :...
  • mybatis mybatis plus怎么忽略映射字段

    千次阅读 2022-03-22 14:33:08
    忽略字段问题,我被这个坑了好长时间,我开发项目呐有个需求是忽略数据库中字段,但是实体类还要有,我操,我目前的知识告诉我,@Transient这个是很好的选择,我操,我于是,开始搞,忘了说了,我的数据库中间件是...
  • 1.常用的字段类型映射关系: 2常用的字段类型讲解: IntegerField : 整型,映射到数据库中的int类型。 CharField: 字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度。 TextField: 文本类型,...
  • Mapstruct映射字段时忽略字段

    千次阅读 热门讨论 2021-01-22 17:11:43
    今天用mapstruct映射字段转换对象的时候,想要忽略公共基础字段(类似于id,创建时间,更新时间这种)。从网上搜了下,用法都是在接口上写Mapping,然后配置target=‘字段名’,ignore='true'。 能用,但是太麻烦。...
  • java字段与数据库字段映射

    千次阅读 2021-03-22 18:00:36
    public class DBFieldFmtHepler { /** * 将以下划线分隔的数据库字段转换为驼峰风格的字符串 * * @param columnName * @return */ public static String changeColumnToFieldName(String columnName) { String[] ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 428,260
精华内容 171,304
关键字:

映射字段