专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

MyBatisPlus同款ElasticsearchORM框

  使用过SpringData操作ES的小伙伴应该有所了解,它只能实现一些非常基本的数据管理工作,一旦遇到稍微复杂点的查询,基本都要依赖ES官方提供的RestHighLevelClient,SpringData只是在其基础上进行了简单的封装。最近发现一款更优雅的ESORM框架EasyEs,使用它能像MyBatisPlus一样操作ES,今天就以mall项目中的商品搜索功能为例,来聊聊它的使用!EasyEs简介
  EasyEs(简称EE)是一款基于Elasticsearch(简称ES)官方提供的RestHighLevelClient打造的ORM开发框架,在RestHighLevelClient的基础上,只做增强不做改变,为简化开发、提高效率而生。EE和MybatisPlus(简称MP)的用法非常相似,如果你之前使用过MP的话,应该能很快上手EE。EE的理念是:把简单、易用、方便留给用户,把复杂留给框架。
  EE的主要特性如下:全自动索引托管:开发者无需关心索引的创建、更新及数据迁移等繁琐步骤,框架能自动完成。屏蔽语言差异:开发者只需要会MySQL的语法即可使用ES。代码量极少:与直接使用官方提供的RestHighLevelClient相比,相同的查询平均可以节省35倍的代码量。零魔法值:字段名称直接从实体中获取,无需手写。零额外学习成本:开发者只要会国内最受欢迎的MybatisPlus用法,即可无缝迁移至EE。MySQL与EasyEs语法对比
  首先我们来对MySQL、EasyEs和RestHighLevelClient的语法做过对比,来快速学习下EasyEs的语法。
  MySQL
  EasyEs
  esDSLesjavaapi
  and
  and
  must
  or
  or
  should
  eq
  term
  !
  ne
  boolQueryBuilder。mustNot(queryBuilder)
  gt
  QueryBuilders。rangeQuery(esfield)。gt()
  ge
  。rangeQuery(esfield)。gte()
  lt
  。rangeQuery(esfield)。lt()
  le
  。rangeQuery(esfield)。lte()
  likefield
  like
  QueryBuilders。wildcardQuery(field,value)
  notlikefield
  notLike
  mustnotwildcardQuery(field,value)
  likefield
  likeLeft
  QueryBuilders。wildcardQuery(field,value)
  likefield
  likeRight
  QueryBuilders。wildcardQuery(field,value)
  between
  between
  QueryBuilders。rangeQuery(esfield)。from(xx)。to(xx)
  notBetween
  notBetween
  mustnotQueryBuilders。rangeQuery(esfield)。from(xx)。to(xx)
  isnull
  isNull
  mustnotQueryBuilders。existsQuery(field)
  isnotNull
  isNotNull
  QueryBuilders。existsQuery(field)
  in
  in
  QueryBuilders。termsQuery(xxesfield,xx)
  notin
  notIn
  mustnotQueryBuilders。termsQuery(xxesfield,xx)
  groupby
  groupBy
  AggregationBuilders。terms()
  orderby
  orderBy
  fieldSortBuilder。order(ASCDESC)
  min
  min
  AggregationBuilders。min
  max
  max
  AggregationBuilders。max
  avg
  avg
  AggregationBuilders。avg
  sum
  sum
  AggregationBuilders。sum
  orderbyxxxasc
  orderByAsc
  fieldSortBuilder。order(SortOrder。ASC)
  orderbyxxxdesc
  orderByDesc
  fieldSortBuilder。order(SortOrder。DESC)
  match
  matchQuery
  matchPhrase
  QueryBuilders。matchPhraseQuery
  matchPrefix
  QueryBuilders。matchPhrasePrefixQuery
  queryStringQuery
  QueryBuilders。queryStringQuery
  select
  matchAllQuery
  QueryBuilders。matchAllQuery()
  highLight
  HighlightBuilder。Field
  。。。
  。。。
  。。。集成及配置
  接下来把EasyEs集成到项目中配置下就可以使用了。首先需要在pom。xml中添加EasyEs的相关依赖;dependencygroupIdcn。easyesgroupIdeasyesbootstarterartifactIdversion1。0。2versiondependency
  由于底层使用了ES官方提供的RestHighLevelClient,这里ES的相关依赖版本需要统一下,这里使用的ES客户端版本为7。14。0,ES版本为7。17。3;dependencyManagementdependenciesdependencygroupIdorg。elasticsearch。clientgroupIdelasticsearchresthighlevelclientartifactIdversion7。14。0versiondependencydependencygroupIdorg。elasticsearchgroupIdelasticsearchartifactIdversion7。14。0versiondependencydependenciesdependencyManagement
  再修改配置文件application。yml对EasyEs进行配置。easyes:是否开启EE自动配置enable:trueES连接地址端口address:localhost:9200关闭自带bannerbanner:false
  添加EasyEs的Java配置,使用EsMapperScan配置好EasyEs的Mapper接口和文档对象路径,如果你使用了MyBatisPlus的话,需要和它的扫描路径区分开来。EasyEs配置类Createdbymacroon2022916。ConfigurationEsMapperScan(com。macro。mall。tiny。easyes)publicclassEasyEsConfig{}使用
  EasyEs集成和配置完成后,就可以开始使用了。这里还是以mall项目的商品搜索功能为例,聊聊EasyEs的使用,SpringData的实现方式可以参考Elasticsearch项目实战,商品搜索功能设计与实现!。注解的使用
  下面我们来学习下EasyEs中注解的使用。首先我们需要创建文档对象EsProduct,然后给类和字段添加上EasyEs的注解;搜索商品的信息Createdbymacroon2018619。DataEqualsAndHashCodeIndexName(valuepms,shardsNum1,replicasNum0)publicclassEsProductimplementsSerializable{privatestaticfinallongserialVersionUID1L;IndexId(typeIdType。CUSTOMIZE)privateLongid;IndexField(fieldTypeFieldType。KEYWORD)privateStringproductSn;privateLongbrandId;IndexField(fieldTypeFieldType。KEYWORD)privateStringbrandName;privateLongproductCategoryId;IndexField(fieldTypeFieldType。KEYWORD)privateStringproductCategoryName;privateStringpic;IndexField(fieldTypeFieldType。TEXT,analyzerikmaxword)privateStringname;IndexField(fieldTypeFieldType。TEXT,analyzerikmaxword)privateStringsubTitle;IndexField(fieldTypeFieldType。TEXT,analyzerikmaxword)privateStringkeywords;privateBigDecimalprice;privateIntegersale;privateIntegernewStatus;privateIntegerrecommandStatus;privateIntegerstock;privateIntegerpromotionType;privateIntegersort;IndexField(fieldTypeFieldType。NESTED,nestedClassEsProductAttributeValue。class)privateListEsProductAttributeValueattrValueList;ScoreprivateFloatscore;}EsProduct中的注解具体说明如下:
  注解名称
  用途
  参数
  IndexName
  索引名注解
  value:指定索引名;shardsNum:分片数;replicasNum:副本数
  IndexId
  ES主键注解
  type:指定注解类型,CUSTOMIZE表示自定义
  IndexField
  ES字段注解
  fieldType:字段在索引中的类型;analyzer:索引文档时用的分词器;nestedClass:嵌套类
  Score
  得分注解
  decimalPlaces:得分保留小数位,实体类中被作为ES查询得分返回的字段使用EsProduct中嵌套类型EsProductAttributeValue的代码如下。搜索商品的属性信息Createdbymacroon2018627。DataEqualsAndHashCodepublicclassEsProductAttributeValueimplementsSerializable{privatestaticfinallongserialVersionUID1L;IndexField(fieldTypeFieldType。LONG)privateLongid;IndexField(fieldTypeFieldType。KEYWORD)privateLongproductAttributeId;属性值IndexField(fieldTypeFieldType。KEYWORD)privateStringvalue;属性参数:0规格;1参数IndexField(fieldTypeFieldType。INTEGER)privateIntegertype;属性名称IndexField(fieldTypeFieldType。KEYWORD)privateStringname;}商品信息维护
  下面我们来实现几个简单的商品信息维护接口,包括商品信息的导入、创建和删除。首先我们需要定义一个Mapper,继承BaseEsMapper;商品ES操作类Createdbymacroon2018619。publicinterfaceEsProductMapperextendsBaseEsMapperEsProduct{}
  然后在Service实现类中直接使用EsProductMapper内置方法实现即可,是不是和MyBatisPlus的用法一致?搜索商品管理Service实现类Createdbymacroon2018619。ServicepublicclassEsProductServiceImplimplementsEsProductService{AutowiredprivateEsProductDaoproductDao;AutowiredprivateEsProductMapperesProductMapper;OverridepublicintimportAll(){ListEsProductesProductListproductDao。getAllEsProductList(null);returnesProductMapper。insertBatch(esProductList);}Overridepublicvoiddelete(Longid){esProductMapper。deleteById(id);}OverridepublicEsProductcreate(Longid){EsProductresultnull;ListEsProductesProductListproductDao。getAllEsProductList(id);if(esProductList。size()0){resultesProductList。get(0);esProductMapper。insert(result);}returnresult;}Overridepublicvoiddelete(ListLongids){if(!CollectionUtils。isEmpty(ids)){esProductMapper。deleteBatchIds(ids);}}}简单商品搜索
  下面我们来实现一个最简单的商品搜索,分页搜索商品名称、副标题、关键词中包含指定关键字的商品。通过QueryWrapper来构造查询条件,然后使用Mapper中的方法来进行查询,使用过MyBatisPlus的小伙伴应该很熟悉了;搜索商品管理Service实现类Createdbymacroon2018619。ServicepublicclassEsProductServiceImplimplementsEsProductService{AutowiredprivateEsProductMapperesProductMapper;OverridepublicPageInfoEsProductsearch(Stringkeyword,IntegerpageNum,IntegerpageSize){LambdaEsQueryWrapperEsProductwrappernewLambdaEsQueryWrapper();if(StrUtil。isEmpty(keyword)){wrapper。matchAllQuery();}else{wrapper。multiMatchQuery(keyword,EsProduct::getName,EsProduct::getSubTitle,EsProduct::getKeywords);}returnesProductMapper。pageQuery(wrapper,pageNum,pageSize);}}
  使用Swagger访问接口后,可以在控制台输出查看生成的DSL语句
  把DSL语句直接复制Kibana中即可执行查看结果了,这和我们手写DSL语句没什么两样的。
  综合商品搜索
  下面我们来实现一个复杂的商品搜索,涉及到过滤、不同字段匹配权重不同以及可以进行排序。首先来说需求,按输入的关键字搜索商品名称(权重10)、副标题(权重5)和关键词(权重2),可以按品牌和分类进行筛选,可以有5种排序方式,默认按相关度进行排序,看下接口文档有助于理解;
  这个功能之前使用SpringData来实现非常复杂,使用EasyEs来实现确实简洁不少,下面是使用EasyEs的实现方式;搜索商品管理Service实现类Createdbymacroon2018619。ServicepublicclassEsProductServiceImplimplementsEsProductService{AutowiredprivateEsProductMapperesProductMapper;OverridepublicPageInfoEsProductsearch(Stringkeyword,LongbrandId,LongproductCategoryId,IntegerpageNum,IntegerpageSize,Integersort){LambdaEsQueryWrapperEsProductwrappernewLambdaEsQueryWrapper();过滤if(brandId!nullproductCategoryId!null){if(brandId!null){wrapper。eq(EsProduct::getBrandId,brandId);}if(productCategoryId!null){wrapper。eq(EsProduct::getProductCategoryId,productCategoryId)。enableMust2Filter(true);}}搜索if(StrUtil。isEmpty(keyword)){wrapper。matchAllQuery();}else{wrapper。and(ii。match(EsProduct::getName,keyword,10f)。or()。match(EsProduct::getSubTitle,keyword,5f)。or()。match(EsProduct::getKeywords,keyword,2f));}排序if(sort1){按新品从新到旧wrapper。orderByDesc(EsProduct::getId);}elseif(sort2){按销量从高到低wrapper。orderByDesc(EsProduct::getSale);}elseif(sort3){按价格从低到高wrapper。orderByAsc(EsProduct::getPrice);}elseif(sort4){按价格从高到低wrapper。orderByDesc(EsProduct::getPrice);}else{按相关度wrapper。sortByScore(SortOrder。DESC);}returnesProductMapper。pageQuery(wrapper,pageNum,pageSize);}}再对比下之前使用SpringData的实现方式,没有QueryWrapper来构造条件,还要硬编码字段名称,确实优雅了不少!
  相关商品推荐
  当我们查看相关商品的时候,一般底部会有一些商品推荐,这里简单来实现下。首先来说下需求,可以根据指定商品的ID来查找相关商品,看下接口文档有助于理解;
  这里我们的实现原理是这样的:首先根据ID获取指定商品信息,然后以指定商品的名称、品牌和分类来搜索商品,并且要过滤掉当前商品,调整搜索条件中的权重以获取最好的匹配度;使用EasyEs来实现依旧是那么简洁!搜索商品管理Service实现类Createdbymacroon2018619。ServicepublicclassEsProductServiceImplimplementsEsProductService{AutowiredprivateEsProductMapperesProductMapper;OverridepublicPageInfoEsProductrecommend(Longid,IntegerpageNum,IntegerpageSize){LambdaEsQueryWrapperEsProductwrappernewLambdaEsQueryWrapper();ListEsProductesProductListproductDao。getAllEsProductList(id);if(esProductList。size()0){EsProductesProductesProductList。get(0);StringkeywordesProduct。getName();LongbrandIdesProduct。getBrandId();LongproductCategoryIdesProduct。getProductCategoryId();用于过滤掉相同的商品wrapper。ne(EsProduct::getId,id);根据商品标题、品牌、分类进行搜索wrapper。and(ii。match(EsProduct::getName,keyword,8f)。or()。match(EsProduct::getSubTitle,keyword,2f)。or()。match(EsProduct::getKeywords,keyword,2f)。or()。match(EsProduct::getBrandId,brandId,5f)。or()。match(EsProduct::getProductCategoryId,productCategoryId,3f));returnesProductMapper。pageQuery(wrapper,pageNum,pageSize);}returnesProductMapper。pageQuery(wrapper,pageNum,pageSize);}}聚合搜索商品相关信息
  在搜索商品时,经常会有一个筛选界面来帮助我们找到想要的商品,这里我们来简单实现下。首先来说下需求,可以根据搜索关键字获取到与关键字匹配商品相关的分类、品牌以及属性,下面这张图有助于理解;
  这里我们可以使用ES的聚合来实现,搜索出相关商品,聚合出商品的品牌、商品的分类以及商品的属性,只要出现次数最多的前十个即可;由于EasyEs目前只用groupBy实现了简单的聚合,对于我们这种有嵌套对象的聚合无法支持,所以需要使用RestHighLevelClient来实现,如果你对照之前的SpringData实现方式的话,可以发现用法差不多,看样子SpringData只是做了简单的封装而已。搜索商品管理Service实现类Createdbymacroon2018619。ServicepublicclassEsProductServiceImplimplementsEsProductService{AutowiredprivateEsProductMapperesProductMapper;OverridepublicEsProductRelatedInfosearchRelatedInfo(Stringkeyword){SearchRequestsearchRequestnewSearchRequest();searchRequest。indices(pms);SearchSourceBuilderbuildernewSearchSourceBuilder();搜索条件if(StrUtil。isEmpty(keyword)){builder。query(QueryBuilders。matchAllQuery());}else{builder。query(QueryBuilders。multiMatchQuery(keyword,name,subTitle,keywords));}聚合搜索品牌名称builder。aggregation(AggregationBuilders。terms(brandNames)。field(brandName));集合搜索分类名称builder。aggregation(AggregationBuilders。terms(productCategoryNames)。field(productCategoryName));聚合搜索商品属性,去除type1的属性AbstractAggregationBuilderNestedAggregationBuilderaggregationBuilderAggregationBuilders。nested(allAttrValues,attrValueList)。subAggregation(AggregationBuilders。filter(productAttrs,QueryBuilders。termQuery(attrValueList。type,1))。subAggregation(AggregationBuilders。terms(attrIds)。field(attrValueList。productAttributeId)。subAggregation(AggregationBuilders。terms(attrValues)。field(attrValueList。value))。subAggregation(AggregationBuilders。terms(attrNames)。field(attrValueList。name))));builder。aggregation(aggregationBuilder);searchRequest。source(builder);try{SearchResponsesearchResponseesProductMapper。search(searchRequest,RequestOptions。DEFAULT);returnconvertProductRelatedInfo(searchResponse);}catch(IOExceptione){e。printStackTrace();}returnnull;}将返回结果转换为对象privateEsProductRelatedInfoconvertProductRelatedInfo(SearchResponseresponse){EsProductRelatedInfoproductRelatedInfonewEsProductRelatedInfo();MapString,AggregationaggregationMapresponse。getAggregations()。asMap();设置品牌AggregationbrandNamesaggregationMap。get(brandNames);ListStringbrandNameListnewArrayList();for(inti0;i((Terms)brandNames)。getBuckets()。size();i){brandNameList。add(((Terms)brandNames)。getBuckets()。get(i)。getKeyAsString());}productRelatedInfo。setBrandNames(brandNameList);设置分类AggregationproductCategoryNamesaggregationMap。get(productCategoryNames);ListStringproductCategoryNameListnewArrayList();for(inti0;i((Terms)productCategoryNames)。getBuckets()。size();i){productCategoryNameList。add(((Terms)productCategoryNames)。getBuckets()。get(i)。getKeyAsString());}productRelatedInfo。setProductCategoryNames(productCategoryNameList);设置参数AggregationproductAttrsaggregationMap。get(allAttrValues);Listlt;?extendsTerms。BucketattrIds((ParsedStringTerms)((ParsedFilter)((ParsedNested)productAttrs)。getAggregations()。get(productAttrs))。getAggregations()。get(attrIds))。getBuckets();ListEsProductRelatedInfo。ProductAttrattrListnewArrayList();for(Terms。BucketattrId:attrIds){EsProductRelatedInfo。ProductAttrattrnewEsProductRelatedInfo。ProductAttr();attr。setAttrId(Long。parseLong((String)attrId。getKey()));ListStringattrValueListnewArrayList();Listlt;?extendsTerms。BucketattrValues((ParsedStringTerms)attrId。getAggregations()。get(attrValues))。getBuckets();Listlt;?extendsTerms。BucketattrNames((ParsedStringTerms)attrId。getAggregations()。get(attrNames))。getBuckets();for(Terms。BucketattrValue:attrValues){attrValueList。add(attrValue。getKeyAsString());}attr。setAttrValues(attrValueList);if(!CollectionUtils。isEmpty(attrNames)){StringattrNameattrNames。get(0)。getKeyAsString();attr。setAttrName(attrName);}attrList。add(attr);}productRelatedInfo。setProductAttrs(attrList);returnproductRelatedInfo;}}总结
  今天将之前的使用SpringData的商品搜索案例使用EasyEs改写了一下,确实使用EasyEs更简单,但是对于复杂的聚合搜索功能,两者都需要使用原生的RestHighLevelClient用法来实现。使用EasyEs来操作ES确实足够优雅,它类似MyBatisPlus的用法能大大降低我们的学习成本,快速完成开发工作!

有种整容叫结婚4年,张伦硕一点没变,钟丽缇却像换了个人钟丽缇中国香港女演员。在1994年的时候凭借着人鱼传说中美人鱼一角快速走红,直到今天她的美人鱼形象还深深地刻在大家的脑海里。随后钟丽缇的事业发展得非常好,但是感情上可就没有那么如愿7月最热韩剧报道,剧荒必看,暑期下饭神剧夏娃韩国爱情剧情悬疑标签复仇狗血人生看点徐睿知x朴秉恩,疯批女主赌上人生的复仇。讲述13年精心策划孤注一扳倒韩国顶级阶层的强烈致命复仇故事。奇怪的律师禹英雨韩国剧情标签大女主律师职斯里兰卡总理维克拉马辛哈表示愿意辞职新华社科伦坡7月9日电(记者车宏亮)斯里兰卡总理办公室9日发表声明说,斯总理维克拉马辛哈愿意辞职,以利于组建各党派参与的新政府。总理办公室在声明中说,为了确保民众安全,维克拉马辛哈习近平经济思想指引中国经济行稳致远来源经济日报伟大的时代催生伟大的思想,伟大的思想引领伟大的实践。党的十八大以来,面对严峻复杂的国际形势和艰巨繁重的国内改革发展稳定任务,以习近平同志为核心的党中央高瞻远瞩统揽全局把谁来都不好使!今年暑假档之王非莫扎特莫属,沈腾也得靠边站陈思诚这个人毁誉参半,各种流言蜚语满天飞。但无论个人观感如何都不得不承认,他的确是现在为数不多认真做电影的人了。唐探系列累积近90亿票房,令陈思诚从newmoney变成oldmon郭德纲让你笑翻语录大爷,美国怎么走啊?那谁知道啊问村长去!。您大点声不费电!。待会儿散场都别走,吃饭去谁去谁掏钱。。我是一有钱人。今天后台,就我开车来的,他们都走着来的,天津那几位老先生,打上礼拜二诸葛亮大前世姜子牙转世鬼谷子(二)上回说到,飞熊道人转世人间,名唤姜子牙,自姜子牙拜倒阐教门下,可惜姜子牙根基不佳修行四十载道无所成,,此时正逢天地间杀劫大至,三圣两教共建封神榜,截教应劫,元始天尊命令姜子牙下山辅坛经ampamplt自序品第一ampampgt,要旨一请师出山佛经开头经常以一时开头,而不以具体时间,比如哪年哪月那日开头,确实有点为难作考据的人。那些写经人的目的是什么呢?一时就是想告诉读经的人,不要着于具体的时间,讲过了,就已经是过了不必真见到了民间无证土郎中进正规医院坐诊还真见到了没证的土郎中进了中医院坐诊,今年春天我经人推荐去县中医院看病,找外科的齐医生。起初并没有发现他和别的医生什么不同,后来在说话间他知道我也自学懂点中医,也就说起他自己就是自野外驻训,炊事班忙碌的画面来了文赵梦琳李彤彭凤瑶图温永良三尺灶台默默奉献炒煮烹煎精益求精在军营有这么一群人,365天全年无休,锅碗瓢盆是他们手中武器,柴米油盐是弹药。不论是严冬还是酷暑,他们始终将食材做得精致美阿Sa仅穿内衣拍戏太敬业!嘴里塞球被保鲜膜裹住,臭水沟里光脚走近日,随着电影神探大战开始热映,更多的幕后花絮也纷纷释出,其中演员蔡卓妍的敬业表现也引发了网友们的热议。在官方释出的视频中,当时蔡卓妍需要拍一场特效的戏份,光是化妆就花了将近八小时
三星dex模式输入法切换思路tabs系列三星dex诞生之初,便是奔着安卓端生产力去的,从最初的旗舰机拓展坞连接显示屏,到后来的平板端搭载,确实将安卓党的生产力提升到了新的高度,虽然依然不能完全代替电脑,但是在现代足球中,古典前腰去哪了?现代足球中确实较少出现传统意义上的古典前腰,这与现代足球战术技术和身体素质的变化有关。首先,现代足球战术愈发注重全队的组织和防守,不再像传统足球那样强调中场核心的控制和发挥。现代足中建安装南方公司工会多措并举为职工办实事2023年以来,中建安装南方公司(下文简称公司)工会着力践行我为群众办实事10N工作,以为职工办实事做好事解难事为己任。为进一步做好办实事工作,从切实做好职工服务保障,关爱职工身心新疆队若退出CBA!将会出现5大受害者,周琦也不是赢家随着篮协给新疆队开出罚单之后,可以说是一石激起千层浪,引起了网上一阵热议,对于篮协的这个处罚,有不少人认为是篮协将新疆队给定住了,禁止了新疆队1年球员注册,从而为周琦恢复自由球身份完结,自从不当妈后,我再也不是怨妇了,才知道原来人生如此美好寒假教儿子写作业的时候,他忽地大骂我有新妈妈了,不要你教!滚开!我沉默地看了他许久,问他是不是不想要我这个妈妈了。他恶狠狠地说是。我跟你说过,只会给你三次机会,现在是你第三次说不要香港澳门3天2夜攻略指南(吃住三天多少钱)景点美食住宿攻略!香港澳门吃住三天要多少钱,23天费用帮你把港澳三天两夜行程通通排好!如果有年假还没用掉,快点约上亲朋好友,一起来场港澳三天两夜自由行,为了自己烦闷的生活找到出口吧!想去香港好久一段吐到你怀疑人生!早孕反应之妊娠剧吐怀孕后胃口总是很差,一闻到某些味道就觉得阵阵恶心想吐,我得去医院看看去。女人怀孕后总会害喜,这是很正常的,过一段时间自然就好了,怎么还需要住院,现在的年轻人啊,就是娇气得很!以上的人生人随着年龄的增长,经历的增加,时间的沉淀,会慢慢变得沉默,是对人世间的一切都看淡了,把所有皆漠视为身外之物。鲁迅先生对人际关系一针见血人一旦悟透了,就会变沉默,不是没有了与人相处的银保监会要求银行按合同约定服务客户提前还款日前,银保监会会同人民银行召开部分商业银行座谈会,要求商业银行强化以客户为中心的理念,按照合同约定做好客户提前还款服务工作。近期,银保监会又要求银行加快处理积压申请,做好提前还款服B0013银行不良资产分类标准调整的静态与动态影响分析B0013监管部门对银行不良资产分类的标准改变了吗?(六)静态与动态,近期与长远的影响分析我们将银行金融资产分类标准(2007年,原银监会发布贷款风险分类指引(以下简称指引)与中国百度年营收超1200亿宣布回购50亿美元股票自动驾驶订单超200万全面布局AI迎收获期长江商报消息长江商报记者江楚雅持续降本增效精简运营,百度业绩增长趋势向好。近日,百度(BIDU。US,09888。HK)发布了截至2022年12月31日的第四季度及全年未经审计的财
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网