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

SpringBoot整合MybatisPlus基本的增删改查

  MybatisPlus是国产的第三方插件,它封装了许多常用的CURDapi,免去了我们写mapper。xml的重复劳动,这里介绍了基本的整合SpringBoot和基础用法。20引入依赖
  在项目中pom文件引入mybatisplus和mysql驱动依赖,如下图dependencygroupIdcom。baomidougroupIdmybatisplusbootstarterartifactIdversion3。5。1versiondependencydependencygroupIdmysqlgroupIdmysqlconnectorjavaartifactIdversion8。0。26versiondependency30配置连接信息
  在项目中application。yaml文件中配置数据库的连接信息spring:datasource:driverclassname:com。mysql。cj。jdbc。Driverurl:jdbc:mysql:127。0。0。1:3306didiadmin?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtrueserverTimezoneGMT2B8nullCatalogMeansCurrenttrueusername:rootpassword:12345640新建两个表
  本案例通过一个完整的业务流程来介绍如何使用mybatispuls,首先在数据库中新建两个表,一个是字典类型表sysdicttype和一个字典数据表sysdictdataCREATETABLEsysdicttype(idCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciNOTNULLCOMMENT标识,typenameVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT字典类型名称,typecodeVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT字典类型标识,descriptionVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT字典类型描述,enableCHAR(1)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT是否启用,createbyCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT创建人ID,createnameCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT创建人名称,createtimedatetimeDEFAULTNULLCOMMENT创建时间,updatebyCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT修改人ID,updatenameCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT修改人名称,updatetimedatetimeDEFAULTNULLCOMMENT修改时间,remarkVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT备注,PRIMARYKEY(id)USINGBTREE)ENGINEINNODBDEFAULTCHARSETutf8mb4COLLATEutf8mb4generalciROWFORMATDYNAMICCREATETABLEsysdictdata(dataidCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciNOTNULLCOMMENT标识,datalabelCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT字典标签,datavalueCHAR(20)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT字典值,typecodeCHAR(20)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT所属类型,isdefaultCHAR(1)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT是否默认,updatebyCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT修改人ID,updatenameCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT修改人名称,updatetimedatetimeDEFAULTNULLCOMMENT修改时间,createbyVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT创建人ID,createnameCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT创建人名称,createtimedatetimeDEFAULTNULLCOMMENT创建时间,remarkVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT备注,enableCHAR(1)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT是否启用,PRIMARYKEY(dataid)USINGBTREE)ENGINEINNODBDEFAULTCHARSETutf8mb4COLLATEutf8mb4generalciROWFORMATDYNAMIC50在项目中创建相应的实体类
  通过观察SQL语句发现两个表中有很多相同的字段,所有我们把相同的字段抽离出来,放到一个基础的实体类中,其他实体类通过集成方式获取公共的字段。51创建基础实体类packagecom。didiplus。common。base;importcom。baomidou。mybatisplus。annotation。FieldFill;importcom。baomidou。mybatisplus。annotation。TableField;importlombok。Data;importjava。io。Serializable;importjava。time。LocalDateTime;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:基础实体类DatapublicclassBaseDomainimplementsSerializable{创建时间TableField(valuecreatetime,fillFieldFill。INSERT)privateLocalDateTimecreateTime;创建人TableField(valuecreateby,fillFieldFill。INSERT)privateStringcreateBy;创建人名称TableField(valuecreatename,fillFieldFill。INSERT)privateStringcreateName;修改时间TableField(valueupdatetime,fillFieldFill。UPDATE)privateLocalDateTimeupdateTime;修改人TableField(valueupdateby,fillFieldFill。UPDATE)privateStringupdateBy;修改人名称TableField(valueupdatename,fillFieldFill。UPDATE)privateStringupdateName;备注privateStringremark;}
  TableField是mybatisplus中的一个注解,后面会讲解到的。
  基础实体类创建好了,接着我们把剩下的两个实体类也一同创建吧。52SysDictType实体类packagecom。didiplus。modules。sys。domain;importcom。didiplus。common。base。BaseDomain;importcom。didiplus。common。base。ValidGroup;importio。swagger。annotations。ApiModel;importio。swagger。annotations。ApiModelProperty;importlombok。Data;importjavax。validation。constraints。;Author:didiplusEmail:972479352qq。comCreateTime:2022425Desc:字典类型领域模型DataApiModel(value字典类型)publicclassSysDictTypeextendsBaseDomain{标识Null(groupsValidGroup。Crud。Create。class)NotNull(groupsValidGroup。Crud。Update。class,message字典ID不能为空)ApiModelProperty(ID)privateStringid;字典名称NotBlank(message字典名称必填项)ApiModelProperty(value字典名称,example用户ID)privateStringtypeName;字典类型NotBlank(message字典编码不能为空)ApiModelProperty(value字典编码)privateStringtypeCode;字典描述ApiModelProperty(value字典描述)privateStringdescription;字典可用状态NotBlank(message字典状态不能为空)ApiModelProperty(value字典状态)privateBooleanenable;}53SysDictData实体类packagecom。didiplus。modules。sys。domain;importcom。baomidou。mybatisplus。annotation。TableField;importcom。didiplus。common。base。BaseDomain;importcom。didiplus。common。base。ValidGroup;importio。swagger。annotations。ApiModelProperty;importlombok。Data;importjavax。validation。constraints。NotBlank;importjavax。validation。constraints。NotNull;importjavax。validation。constraints。Null;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:字典值领域模型DatapublicclassSysDictDataextendsBaseDomain{id编号Null(groupsValidGroup。Crud。Create。class)NotNull(groupsValidGroup。Crud。Update。class,message字典数据ID不能为空)ApiModelProperty(ID)TableField(valuedataid)privateStringdataId;字典显示NotBlank(message字典数据名称必填项)ApiModelProperty(value字典数据名称)privateStringdataLabel;字典值NotBlank(message字典数据值不能为空)ApiModelProperty(value字典数据值)privateStringdataValue;字典类型ApiModelProperty(value字典编码)NotBlank(message字典数据值不能为空)privateStringtypeCode;是否为默认ApiModelProperty(value字典编码)NotBlank(message字典数据值不能为空)privateStringisDefault;是否启用NotBlank(message字典状态不能为空)ApiModelProperty(value字典数据状态)privateBooleanenable;}60创建DAO继承MybatisPlus增强接口
  为两个实体类中分别添加DAO继承MybatisPlus增强接口,这样就可以集成了增删改查的功能了。61SysDictTypeMapperpackagecom。didiplus。modules。sys。mapper;importcom。baomidou。mybatisplus。core。mapper。BaseMapper;importcom。didiplus。modules。sys。domain。SysDictType;importorg。apache。ibatis。annotations。Mapper;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:字典类型接口MapperpublicinterfaceSysDictTypeMapperextendsBaseMapperSysDictType{}62SysDictDataMapperpackagecom。didiplus。modules。sys。mapper;importcom。baomidou。mybatisplus。core。mapper。BaseMapper;importcom。didiplus。modules。sys。domain。SysDictData;importorg。apache。ibatis。annotations。Mapper;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:字典数据接口MapperpublicinterfaceSysDictDataMapperextendsBaseMapperSysDictData{}70进一步封装到Service层71定义Service接口中的抽象方法SysDictDataServicepackagecom。didiplus。modules。sys。service;importcom。baomidou。mybatisplus。extension。service。IService;importcom。didiplus。modules。sys。domain。SysDictData;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:publicinterfaceSysDictDataServiceextendsIServiceSysDictData{}SysDictTypeServicepackagecom。didiplus。modules。sys。service;importcom。baomidou。mybatisplus。extension。service。IService;importcom。didiplus。modules。sys。domain。SysDictType;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:publicinterfaceSysDictTypeServiceextendsIServiceSysDictType{}72实现Service接口中的方法SysDictTypeServiceImplpackagecom。didiplus。modules。sys。service。impl;importcom。baomidou。mybatisplus。extension。service。impl。ServiceImpl;importcom。didiplus。modules。sys。domain。SysDictType;importcom。didiplus。modules。sys。mapper。SysDictTypeMapper;importcom。didiplus。modules。sys。service。SysDictTypeService;importorg。springframework。stereotype。Service;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:ServicepublicclassSysDictTypeServiceImplextendsServiceImplSysDictTypeMapper,SysDictTypeimplementsSysDictTypeService{}SysDictDataServiceImplpackagecom。didiplus。modules。sys。service。impl;importcom。baomidou。mybatisplus。extension。service。impl。ServiceImpl;importcom。didiplus。modules。sys。domain。SysDictType;importcom。didiplus。modules。sys。mapper。SysDictTypeMapper;importcom。didiplus。modules。sys。service。SysDictTypeService;importorg。springframework。stereotype。Service;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:ServicepublicclassSysDictTypeServiceImplextendsServiceImplSysDictTypeMapper,SysDictTypeimplementsSysDictTypeService{}80在控制层上进行增删改查操作81SysDictTypeControllerpackagecom。didiplus。modules。sys。controller;importcom。didiplus。common。base。ValidGroup;importcom。didiplus。modules。sys。domain。SysDictType;importcom。didiplus。modules。sys。service。SysDictTypeService;importio。swagger。annotations。Api;importio。swagger。annotations。ApiOperation;importio。swagger。v3。oas。annotations。parameters。RequestBody;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。validation。annotation。Validated;importorg。springframework。web。bind。annotation。;Author:didiplusEmail:972479352qq。comCreateTime:2022425Desc:数据字典控制器RestControllerApi(tags数据字典)RequestMapping(apisysdictType)publicclassSysDictTypeController{AutowiredSysDictTypeServicesysDictTypeService;ApiOperation(字典添加)PostMapping(add)publicStringadd(Validated(valueValidGroup。Crud。Create。class)RequestBodySysDictTypesysDictType){returnsysDictTypeService。save(sysDictType)?添加成功:添加失败;}ApiOperation(字典修改)PutMapping(edit)publicStringedit(Validated(valueValidGroup。Crud。Update。class)RequestBodySysDictTypesysDictType){returnsysDictTypeService。updateById(sysDictType)?修改成功:修改失败;}ApiOperation(字典删除)DeleteMapping(del{id})publicStringdel(PathVariableStringid){returnsysDictTypeService。removeById(id)?删除成功:删除失败;}}体验效果新增数据
  修改数据
  删除数据
  90自动填充功能
  原理:实现元对象处理器接口:com。baomidou。mybatisplus。core。handlers。MetaObjectHandler注解填充字段TableField(。。fillFieldFill。INSERT)生成器策略部分也可以配置!91自定义实现类DomainInterceptorpackagecom。didiplus。common。web。interceptor;importcom。baomidou。mybatisplus。core。handlers。MetaObjectHandler;importorg。apache。ibatis。reflection。MetaObject;importorg。springframework。stereotype。Component;importjava。time。LocalDateTime;Author:didiplusEmail:972479352qq。comCreateTime:202254Desc:字段填充拦截器ComponentpublicclassDomainInterceptorimplementsMetaObjectHandler{OverridepublicvoidinsertFill(MetaObjectmetaObject){createField(metaObject);}OverridepublicvoidupdateFill(MetaObjectmetaObject){updateField(metaObject);}Field创建时间publicvoidcreateField(MetaObjectmetaObject){this。strictInsertFill(metaObject,createTime,LocalDateTime。class,LocalDateTime。now());}Field修改时间publicvoidupdateField(MetaObjectmetaObject){this。strictUpdateFill(metaObject,updateTime,LocalDateTime。class,LocalDateTime。now());}}100分页查询101添加分页插件packagecom。didiplus。common。config;importcom。baomidou。mybatisplus。annotation。DbType;importcom。baomidou。mybatisplus。extension。plugins。MybatisPlusInterceptor;importcom。baomidou。mybatisplus。extension。plugins。inner。PaginationInnerInterceptor;importorg。springframework。context。annotation。Bean;importorg。springframework。context。annotation。Configuration;Author:didiplusEmail:972479352qq。comCreateTime:202254Desc:mybatisplus分页插件ConfigurationpublicclassMyBatisPlusConfig{mybatisplus分页插件BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptornewMybatisPlusInterceptor();interceptor。addInnerInterceptor(newPaginationInnerInterceptor(DbType。MYSQL));returninterceptor;}}102定义分页接口packagecom。didiplus。modules。sys。service;importcom。baomidou。mybatisplus。core。metadata。IPage;importcom。baomidou。mybatisplus。extension。service。IService;importcom。didiplus。common。web。domain。PageDomain;importcom。didiplus。modules。sys。domain。SysDictType;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:数据字典类型服务类publicinterfaceSysDictTypeServiceextendsIServiceSysDictType{IPageSysDictTypepage(PageDomainpageDomain);}103实现分页接口packagecom。didiplus。modules。sys。service。impl;importcom。baomidou。mybatisplus。core。metadata。IPage;importcom。baomidou。mybatisplus。extension。plugins。pagination。Page;importcom。baomidou。mybatisplus。extension。service。impl。ServiceImpl;importcom。didiplus。common。web。domain。PageDomain;importcom。didiplus。modules。sys。domain。SysDictType;importcom。didiplus。modules。sys。mapper。SysDictTypeMapper;importcom。didiplus。modules。sys。service。SysDictTypeService;importorg。springframework。stereotype。Service;importjavax。annotation。Resource;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:ServicepublicclassSysDictTypeServiceImplextendsServiceImplSysDictTypeMapper,SysDictTypeimplementsSysDictTypeService{ResourceSysDictTypeMappersysDictTypeMapper;OverridepublicIPageSysDictTypepage(PageDomainpageDomain){IPageSysDictTypepagenewPage(pageDomain。getPage(),pageDomain。getLimit());returnsysDictTypeMapper。selectPage(page,null);}}104控制层调用RestControllerApi(tags数据字典)RequestMapping(apisysdictType)publicclassSysDictTypeController{AutowiredSysDictTypeServicesysDictTypeService;ApiOperation(字典分页查询)GetMappingpublicIPagelist(RequestBodyPageDomainpageDomain){returnsysDictTypeService。page(pageDomain);}}
  PageDomain定义了分页接收的两个参数
  PageDomain类packagecom。didiplus。common。web。domain;importlombok。Data;Author:didiplusEmail:972479352qq。comCreateTime:202254Desc:分页参数封装DatapublicclassPageDomain{当前页privateIntegerpage;每页数量privateIntegerlimit;}105体验效果
  下一篇,我们继续来学习mybatisPlus的代码生成器
  原文链接:SpringBoot整合MybatisPlus基本的增删改查,保姆级教程北根娃博客园

体操女神邓琳琳退役后被保送北大,如今女大十八变,可惜仍单身近日,前奥运体操冠军邓琳琳在社交媒体上,晒出了多张自己甜美的自拍。她清秀的长相以及出众的气质令网友们眼前一亮,纷纷直呼跟小时候简直判若两人,真是女大十八变!邓琳琳出生于1992年4寻找第四种中微子中微子是一种很轻的难以捉摸的亚原子粒子。1930年,沃尔夫冈泡利提出存在中微子的假设,以此来解释某些放射性原子在衰变过程中的能量消失。这是一类几乎不与普通物质相互作用的基本粒子,因中国科大等成功实现超导体系量子计算优越性中国科学技术大学中国科学院量子信息与量子科技创新研究院潘建伟朱晓波彭承志等组成的研究团队,与中科院上海技术物理研究所合作,构建了66比特可编程超导量子计算原型机祖冲之二号,实现了对深埋在地下的超级大洋沧海桑田的千年巨变使得地球发生了天翻地覆的变化,然而,远古时的地球到底是什么样呢?科学家们研究后发现,在地球内部竟然有着一个相当于北冰洋大小的水库,它究竟是如何形成的呢?2007年桑迪亚国家实验室研发出一种不依赖GPS的量子传感导航设备桑迪亚国家实验室设计和制造的一个紧凑的装置可能成为下一代导航系统的一个关键组成部分。一年多来,这个牛油果大小的真空室在合适的条件下包含了一团原子,用于精确的导航测量。桑迪亚国家实验降至1969元!小米5G直屏手机大降价骁龙780G90Hz屏Tech分析狮11月3日消息,近年来小米雷军发布了很多中高端手机,这些机型的性价比一般都比友商的机型高出不少。比如小米11青春版这款中高端机型,目前已经降价到最低价,赢得了不少消费宝宝不吃辅食怎么办?育儿嫂教您15个妙招,肯定能用上宝宝的第一口辅食是他人生中众多的第一次之一什么时候开始吃,吃什么,怎么吃?吃之前注意什么,不爱吃又该怎么办?怎么让宝宝爱上吃辅食呢?老月嫂总结了这15个小妙招,雇主回应真是太有效了11岁女孩突破遗传身高10cm,多亏了妈妈的1000天长高计划,赞开门见山,今天给大家分享一个11岁女孩的成长故事,在爸爸168cm妈妈158cm的遗传劣势下,7岁又被诊断为乳房早发的巨大压力下,妈妈陪伴她开启了1000天长高计划。如今,三年多过俏管家,为什么宝宝爱打妈妈的脸背后藏着你不知道的婴幼儿心理学宝宝越来越大,给爹妈带来的物理伤害也越来越强。比如说哪个当妈的,没吃过娃的小巴掌?!你看,正抱着宝宝在怀里逗着玩儿呢,PIA的一巴掌就糊脸上,小手一伸一抓,薅住了本来就不多的头发越近视,无法治愈,只能预防小宝宝的眼睛里,带着祖传的宝贵存款,这就是所谓的远视储备正常宝宝生下来的时候都是远视眼成像落在视网膜后方。随着孩子们身体的不断生长发育,眼球也会慢慢变长,成像就会正好落在视网膜上,22分22分,陪太子读书!你还有夺冠机会,火箭放他走吧新赛季NBA战火重燃,新一轮总冠军的争夺再度开始,球迷们也把目光聚焦在了篮网湖人雄鹿等夺冠热门队伍的身上,不过有一支球队虽然实力不强,却是吸引了大批球迷的目光,它就是火箭队!火箭队
流浪地球2和它幕后的视效公司对话徐建上映一个半月后,流浪地球2的票房已经几乎达到40亿。数据来源灯塔专业版,截至3月9日中午对徐建和他的MOREVFX而言,既作为主力参与了视效工作,同时又有小份额的投资,这样的参与方建设全球最大的蓝宝石生产基地太原源瀚科技有限责任公司的高质量发展之路新材料产业是国民经济的先导产业,是节能环保新一代信息技术新能源汽车等产业发展的重要支撑。在太原市尖草坪区中北高新区科技创新园内,作为头部链主牵头引领企业,太原源瀚科技有限责任公司利笑死!这家自动驾驶公司烧钱90亿,7年却只交了一辆车笔者说过很多次自动驾驶了,几乎都是好消息,不过这次要说点不那么愉快滴。近几年兴起的自动驾驶特别火热,许多传统车企纷纷入局,也有许多初创公司如雨后春笋崛起。然而,顺风时猪能飞起,逆风拉什福德输球后赢得下一场总是很重要我们两个半场开局都很好直播吧3月10日讯在今日凌晨结束的欧联杯18决赛首回合的一场较量中,曼联41击败贝蒂斯。赛后在接受BTSport采访时,曼联前锋拉什福德表示,输球后赢得下一场比赛总是很重要。关于本魅族与星纪时代合体,新公司未来有三大计划记者陆柯言3月8日,星纪魅族集团(以下简称星纪魅族)在武汉市经开区正式宣布成立,沈子瑜出任董事长兼CEO。2022年7月,湖北星纪时代科技有限公司(以下简称星纪时代)与珠海市魅族科肖战现身巴黎高档法式餐厅,拒绝粉丝合照,这举动却让对方秒消气中国顶流明星肖战近日到米兰参加时装周话题不断,网友更一口气列出17项超狂礼遇,堪称亚洲明星第一人。日前他被捕捉出没法国巴黎景点和餐厅,再度引发热议。(取自微博)中国顶流明星肖战日前别再扒了!格力董明珠否认绯闻和王自如划清界限!别再扒瓜了!格力董明珠否认绯闻和王自如划清界限!前阵子,坐拥431万粉丝的大V龚文祥爆料董明珠恋爱了,对方是小她34岁的王自如,行业内每个人都知道。这条微博在引起转发后便迅速被删除卡戴珊太会玩,开启新恋情?对镜头送飞吻,这次男主角不是保罗NBA常规赛持续鏖战中,洛杉矶湖人对正在苦苦争取一个季后赛附加赛的名额。3月8日当天,湖人队将为科比的好兄弟保罗加索尔举办球衣退役仪式,湖人队主场将会非常热闹。近期,皮蓬前妻拉尔萨早知道曼联欧联杯大胜贝蒂斯杜兰特或缺阵两至三周10日凌晨,本赛季欧联杯18决赛结束多场争夺,主场作战的曼联4比1大胜皇家贝蒂斯,拉什福德B费安东尼和韦霍斯特分别建功,双方次回合的争夺将在一周之后进行,手握3个净胜球的曼联无疑已三亚旖旎迷人的袖珍小岛西岛(二)西岛的民宿值得点赞!疫情结束了,西岛迎来了祖国各地的旅游者!西岛度假心情愉悦沙滩大海椰林美女在网上可以提前预订民宿,也可以亲自来岛后实地考察后入住!我们下船后,顺着人流,穿过小食街徐若晗登男人装,吊带抹胸又纯又欲,不愧是言承旭心动的人在最近热播的网剧夏花中,徐若晗与言承旭的忘年恋甜到齁。两人虽然年龄差距悬殊,但精彩不断,上演各种吻戏天花板,徐若晗也因此成为许多男生的梦中情人。近日,25岁的徐若晗登上男人装,突破
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网