城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

springcloud里有关mybatis踩过的坑

12月20日 倾城傷投稿
  springcloud里有关mybatis踩过的坑前言
  java是进行应用开发非常好的一门语言,有很多成熟的开发框架。
  springcloud是java语言实现微服务的最好的框架和微服务化的实践,很多中小厂都是使用springcloud来实现微服务的体系,而mybatis作为这个解决方案中objectmapping组件也是非常成熟的一种选择,今天这个文章就来拆一拆,在mybatis和springcloudspringboot集成中遇到过的一些坑。
  依赖包的引用
  要做到autoconfiguration,自动去扫描ObjecMap的classes文件和xml文件;必须引用mybatisspringbootstarter,否则不能扫描生效。可以用mybatisplus的mybatisplusbootstarter替代。(当然如果不是通过autoconfiguration的方式,自己去写starter或者通过显示API调用的方式的话除外。)
  dependencygroupIdcom。baomidougroupIdmybatisplusbootstarterartifactIddependency
  MapperScan的原罪
  有关MapperScan支持多个包的问题,网上大部分说是通过basePackage指定扫描多个包,本身没问题,但不是一个完美的方案。原因如下:
  (1)如果扫描的包名是一个较顶级的,那么,一些不是mapper的interface也会被处理成mapper而被创建成一个springbean,造成系统无法启动。
  (2)缩小包的范围,最好是只配置mapper对应包,但如果把所有包含mapper的包罗列出来,列表变得比较长,列表虽然可以用通配符解决一部分问题,但需要包包满足一些统一的规则。同时,对于层级不同的情况,根本还是不能处理。
  (3)mapscan写在了SpringBootApplication这个入口主main类上,降低了扩展性,每增加或调整mapper包,都要到MapperScan中去注册。业务代码的变更影响了框架性的代码。尤其是对于多模块的情况,这个问题更加的不好控制。违背依赖的原则,本来框架不依赖业务,现在变成了框架反过来要因业务变化而调整代码。
  如何来解决这个问题,我在写dbspringbootstarter这个微服务的底层子框架的时候,选择的方式是:
  在MapperScan中,使用basePackageannotationClass组件解决问题。所有的mapper上加上Mapper注解。这是合理的,因为本身mapper属于一类特殊的接口,理应该要通过特殊注册进行区分。有了第1条,basePackage就可以指定一个较顶级的包名了
  通过上面两条,一方面解决了mapper包动态变化的问题,
  因为业务上的代码一般会有一个统一的包前缀,典型的如com。companyname,那么就可以把它作为basePackage,只需要配置一次,后面的变化都不受影响。
  importorg。apache。ibatis。annotations。MMapperpublicinterfaceCityDaoextendsBaseMapperCity{}
  mybatisplus配置字段策略IGNORED:忽略判断,NOTNULL:非NULL判断),NOTEMPTY:非空判断mybatisplus。globalconfig。dbconfig。fieldstrategyNOTNULL逻辑删除配置mybatisplus。globalconfig。dbconfig。logicdeletevalue1mybatisplus。globalconfig。dbconfig。logicnotdeletevalue0原生配置mybatisplus。configuration。mapunderscoretocamelcasetruemybatisplus。configuration。cacheenabledfalsemybatisplus。mapperlocationsclasspath:mapperMapper。xmlmybatisplus。typeAliasesPackage{mapper。entity。path:com。joinsunsoft。。model。entity}
  分页的问题
  关于mybatis的分页,目前有两个主流派系,一个是使用mybatis的pagehelper,pagehelper实现了一个mybatis的拦截器,在执行mybatis的query时,会使用拦截器的方式来加入分页的代码和处理。另一个派系,是使用mybatisplus的PaginationInnerInterceptor来实现。不论用两种方式里的哪一个方式,都必须,1。要使用starter才能生效,或者写自己的starter,2。只使用一个,要么使用pagehelper,要么就是用mybatisPlus里的PaginationInnerInterceptor。每种方式都必须对应自己的调用方式,不能错用。
  使用PageHelper
  依赖包
  dependencygroupIdcom。github。pagehelpergroupIdpagehelperspringbootstarterartifactIddependency
  配置参数
  pagehelper。helperdialect:mysql分页合理化参数,默认值为false。当该参数设置为true时,pageNum0时会查询第一页,pageNumpages(超过总数时),会查询最后一页pagehelper。reasonable:true支持通过Mapper接口参数来传递分页参数pagehelper。supportmethodsarguments:true
  PageHelper。startPage(pageNum,pageSize);设定当前页码,以及当前页显示的条数ListCitylistcityDao。selectByPage();
  使用PaginationInnerInterceptor
  依赖包
  dependencygroupIdcom。baomidougroupIdmybatisplusextensionartifactIddependency
  starter加载
  org。springframework。boot。autoconfigure。EnableAutoConfigurationcom。joinsun。central。。db。config。DBAutoConfiguration,com。joinsun。central。。db。config。JdbcSessionConfiguration
  新的分页插件,一缓和二缓遵循mybatis的规则,需要设置MybatisConfigurationuseDeprecatedExecutorfalse避免缓存出现问题BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptornewMybatisPlusInterceptor();interceptor。addInnerInterceptor(newPaginationInnerInterceptor(DbType。MYSQL));}
  OverridepublicPageCitylistCity(PagemyPage){PageCitypagePageHelper。startPage(myPage。getPage(),myPage。getLinage());PageCitycityListcityDao。selectPage(myPage,null);returncityL}
  结束语
  通过springcloudspringboot架构,java实现微服务的实施案例目前成功的非常多,目前有很多基于springcloud和springcloudalibaba的框架衍生出来的springcloud的微服务框架都是把类似很多的各种类似mybatis,redis,es,oauth,jwt等组件而糅合在一起的开发框架,使我们开发微服务起来非常的方便,但是由于封装了这些细节的地方,出现问题,如果对本身这些基础的组件不熟悉的情况下,就很难去定位,导致这样的一些架构仅仅只是在学习springcloud框架有意义,真正的公司的微服务框架更多的是自研究的框架,例如我们公司的微服务框架都是自行去研发的,这样也就有了很多踩坑的体验,有这样的踩坑的经历千万别害怕,也许这就是让我们对技术更深入研究的机会。
  以后还会有更多的文章和大家一起来解析拆坑体会的经历。欢迎大家持续关注。
投诉 评论 转载

证监会立案国民技术董事涉嫌内幕交易来源:中国证券报12月12日晚,国民技术公告,董事俞鹂因涉嫌内幕交易公司股票,被中国证监会立案。值得注意的是,俞鹂在多家公司担任独立董事。其中,ST海核当晚也就该事……同是冠心病,一人用药控制,一人吃偏方保健品,3年后结果如何了大家都知道,心脏是我们人体最重要的器官之一,正因为心脏一刻不停地跳动,我们才能够完成血液的全身供应和氧气交换,维持着整个身体的营养和氧气输送,而心脏的搏动,同样也需要血液供应,……极目锐评11万元的车卖1。1万元后反悔遭买家索赔,不少网民为极目新闻评论员吴双建原本价值约11万元的二手车,却在闲鱼上挂了1。1万元售卖,结果真被人付钱拍下。卖家取消交易后,被买家告上了法庭。当事人余女士称,标价1。1万元的原因,……HyperX推出HX3D通过3D打印实现游戏外设个性化定制惠普公司的游戏外设团队、游戏和电竞领域的品牌领导者极度未知(HyperX)在CES展会期间推出了HX3D,结合惠普领先的3D打印技术,玩家可以通过多种方式来随心定制自己喜爱的游……拼多多年货节带来的变化元旦前后,各大电商平台纷纷启动年货节,希望借助传统春节前的年货采购拉动一波消费。随着春节物流不打烊成为常态,电商平台加大投入推动年货节,使之成为继618、双11之后的又一……全域旅游来山水隐庐选个小院过大年吧2023年来山水隐庐包个小院过乡野年味的团圆年吧对中国人来说团圆是最幸福的一件事过年最开心的事莫过于全家团聚吃上红红火火的团圆饭……沉香如屑冥王说错话,应渊怀疑帝尊,桓钦出手导致应渊失忆?成毅、杨紫主演的电视剧《沉香如屑》更新到了18集,新的剧情中发生了不少大事,其一自然是应渊帮助颜淡转世了,为了帮助他转世更是不惜炼制眠意丹,为此付出了巨大的代价。第二则是余墨九……springcloud里有关mybatis踩过的坑springcloud里有关mybatis踩过的坑前言java是进行应用开发非常好的一门语言,有很多成熟的开发框架。springcloud是java语言实现微服务的……教你几招,远离夏季肠道的那些烦心事大家好,我是废柴小店长上个星期有几个顾客都是因为肠道问题来店里咨询情况基本都是:拉肚子,肚子胀,胃口不好,吃不下东西现在天气越来越热,白天胃口不是很好……比特币与黄金哪个更有价值?2022年最有价值的是黄金、石油和粮食2022年伊始,股票和加密货币价格相继暴跌,但黄金、原油和农产品等实物资产超过了美元的价值。世界许多国家都有一个共同的趋势:黄……清明上河园六一开放!全国儿童全部免费大河网讯重磅!重磅!重磅!期盼已久的好消息终于来啦!清明上河园将于2022年6月1日恢复开园!6月1日是国际儿童节,儿童是纯真的、快乐的,同时也是初心的代名词,为表达思念……周立波,不可一世终将付出代价头条群星10月榜身为海派清口的创始人,周立波才华横溢、出口成章,曾一度被认为是我国单口喜剧的第一人。然而狂妄自大、目中无人等负面标签,也在他成名之后一直伴随着他,怎……
每人一辆!中国女足获赠国产汽车,价值不超20万元,男足恐看不精彩!梅西1射2传过掉门将小球迷冲场合影巴黎3球大胜霸屏女王秦岚邓家佳新剧即将开播,单亲妈妈的复仇,爽剧看点足煮米饭还只加水就错了,教你饭店不外传架桥,米饭香甜松软超好吃任正非背水一战,华为不用光刻机造芯,外媒痴心妄想阅读的力量老流氓曾志伟的生色江湖国庆假期广东看非遗有谱了!这份宝藏地图请收好苹果公司后院起火,30多国围剿苹果税,欧盟开了366亿美元罚刚刚,2022年诺贝尔物理学奖揭晓我,拿着80万加盟零食很忙,找不到门面3款旗舰大跳水直降数千元现在入手晚了吗?看完你就知道了
手机安全隐患有哪些三观是什么?顺序应该是价值观,人生观,世界观长寿的方法细数活百岁不痴呆的11秘诀驾驶自动挡车应避免的常见操作误区长安诺根据什么小说改编的长安诺免费在线阅读地址苍蝇的理想生活春天家里适合种什么花?春天适合种植什么花?芥末粉(芥末粉怎么调制芥末酱)有什么好玩(哪里有水上乐园玩)角的初步认识教学反思拜登新基建,美股要麻烦立冬时节出生的人有何特点

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁