范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

springcloud里有关mybatis踩过的坑

  springcloud里有关mybatis踩过的坑前言
  java是进行应用开发非常好的一门语言,有很多成熟的开发框架。
  springcloud是java语言实现微服务的最好的框架和微服务化的实践,很多中小厂都是使用springcloud来实现微服务的体系, 而mybatis作为这个解决方案中object mapping组件也是非常成熟的一种选择, 今天这个文章就来拆一拆,在mybatis和springcloud/springboot集成中遇到过的一些坑。
  依赖包的引用
  要做到autoconfiguration,自动去扫描Objec Map的classes文件和xml文件;必须引用 mybatis-spring-boot-starter, 否则不能扫描生效。可以用 mybatis-plus 的 mybatis-plus-boot-starter 替代。 (当然如果不是通过autoconfiguration的方式,自己去写starter或者通过显示API调用的方式的话除外。)
               com.baomidou             mybatis-plus-boot-starter         
  @MapperScan 的原罪
  有关MapperScan支持多个包的问题,网上大部分说是通过 basePackage 指定扫描多个包,本身没问题,但不是一个完美的方案。原因如下:
  (1)如果扫描的包名是一个较顶级的,那么,一些不是 mapper 的 interface 也会被处理成 mapper 而被创建成一个 spring bean,造成系统无法启动。
  (2)缩小包的范围,最好是只配置 mapper 对应包,但如果把所有包含 mapper 的包罗列出来, 列表变得比较长,列表虽然可以用通配符解决一部分问题,但需要包包满足一些统一的规则。 同时,对于层级不同的情况,根本还是不能处理。
  (3)mapscan写在了@SpringBootApplication这个入口主main类上,降低了扩展性,每增加或调整 mapper 包,都要到 @MapperScan 中去注册。业务代码的变更影响了框架性的代码。尤其是对于多模块的情况,这个问题更加的不好控制。 违背依赖的原则,本来框架不依赖业务,现在变成了框架反过来要因业务变化而调整代码。
  如何来解决这个问题, 我在写db-spring-boot-starter这个微服务的底层子框架的时候,选择的方式是:
  在 @MapperScan 中,使用 basePackage + annotationClass 组件解决问题。 所有的 mapper 上加上 @Mapper 注解。这是合理的,因为本身 mapper 属于一类特殊的接口,理应该要通过特殊注册进行区分。有了第1条,basePackage 就可以指定一个较顶级的包名了
  通过上面两条,一方面解决了 mapper 包动态变化的问题,
  因为业务上的代码一般会有一个统一的包前缀,典型的如 com.companyname, 那么就可以把它作为 basePackage,只需要配置一次,后面的变化都不受影响。
  import org.apache.ibatis.annotations.Mapper;  @Mapper public interface CityDao extends BaseMapper {  }
  ##### mybatis-plus配置 #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断" mybatis-plus.global-config.db-config.field-strategy=NOT_NULL #逻辑删除配置 mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-not-delete-value=0 # 原生配置 mybatis-plus.configuration.map-underscore-to-camel-case=true mybatis-plus.configuration.cache-enabled=false mybatis-plus.mapper-locations=classpath:/mapper/*Mapper.xml mybatis-plus.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
  依赖包
               com.github.pagehelper             pagehelper-spring-boot-starter         
  配置参数
  pagehelper.helper-dialect: mysql # 分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页 pagehelper.reasonable: true # 支持通过 Mapper 接口参数来传递分页参数 pagehelper.support-methods-arguments: true
  PageHelper.startPage(pageNum, pageSize); // 设定当前页码,以及当前页显示的条数 List list = cityDao.selectByPage();        return list;
  使用PaginationInnerInterceptor
  依赖包
               com.baomidou             mybatis-plus-extension         
  starter加载
  org.springframework.boot.autoconfigure.EnableAutoConfiguration= com.joinsun.central..db.config.DBAutoConfiguration, com.joinsun.central..db.config.JdbcSessionConfiguration
  /**      * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题      */      @Bean     public MybatisPlusInterceptor mybatisPlusInterceptor() {         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();         interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));         return interceptor;     }
  @Override 	public Page listCity(Page myPage) { 		//Page page = PageHelper.startPage(myPage.getPage(), myPage.getLinage()); 		Page cityList = cityDao.selectPage(myPage, null);   		return cityList; 	}
  结束语
  通过springcloud/springboot架构,java实现微服务的实施案例目前成功的非常多,目前有很多基于springcloud和spring cloud alibaba的框架衍生出来的springcloud的微服务框架都是把类似很多的各种类似mybatis,redis,es, oauth, jwt等组件而糅合在一起的开发框架,使我们开发微服务起来非常的方便,但是由于封装了这些细节的地方,出现问题,如果对本身这些基础的组件不熟悉的情况下,就很难去定位,导致这样的一些架构仅仅只是在学习springcloud框架有意义,真正的公司的微服务框架更多的是自研究的框架, 例如我们公司的微服务框架都是自行去研发的,这样也就有了很多踩坑的体验,有这样的踩坑的经历千万别害怕,也许这就是让我们对技术更深入研究的机会。
  以后还会有更多的文章和大家一起来解析"拆坑"体会的经历。 欢迎大家持续关注。

台当局所谓治安改善被批是虚报业绩昨日,南都记者从台湾台南市警察局获悉,台南袭警命案嫌犯在新竹落网。该袭警案件造成涂明诚曹瑞杰两名警察不治身亡,殉职警察的家属在急诊室悲恸不已。据悉,袭警案件近年在台湾频发,不少人批美海军陆战队前成员华盛顿在台湾问题上很绝望,因为没时间了环球时报环球网报道记者白云怡于金翠美国海军陆战队前成员地缘政治专家布莱恩布莱迪克日前接受环球时报记者专访表示,中国此前在反制佩洛西窜台的行动中展现出的军事实力让很多美国人感到震惊,假如台湾回归祖国,中国会发生什么变化,周边国家呢?宝岛台湾与祖国隔海相望一引言若台湾回归祖国,中国和世界格局都会发生巨大变化美国一直把台湾当做制衡中国的筹码,如果台湾回归祖国,美国也就没有了向我们坐地起价的筹码,统一后的中国会得到再松绑台湾地区每周入境总量从4万调升至5万人次台湾地区自8月22日起调整入境总量人数,从每周4万调升为5万人次。图为刚下飞机的旅客正在排队采检。(图来源台湾中时新闻网)台湾地区流行疫情指挥中心22日宣布,考虑已近9月开学,民众2000年四川连续发生两起命案,死者皆为女性且被性侵,一人被分尸2000年7月6日,四川省双流县黄水镇保和村的村民在山路上发现了一具全裸女尸。而三个月后,黄水镇附近的公路边居然再次惊现碎尸。而警方走访多日抓住的嫌疑人竟被轻易翻案。这两起案件究竟枪杀安倍的嫌疑犯山上彻也是日本的底层百姓之神?2022年7月8日,日本前首相安倍晋三被枪击身亡。该事件震惊了全世界,也对日本社会产生了强烈的冲击。时至今日,该事件余波未尽,日本社会围绕这一事件仍然在反思和探究。针对此次枪击案,突发!任正非最新发声!两大利空突袭,外资大卖92亿!ampampquot寒气ampampquot传至私募圈?1700亿巨头冲上热搜,发生了什么?最近,紧张情绪重回市场!8月23日,在隔夜外围市场大跌的背景之下,再度出现两大不利于市场演绎的消息一是由于经济衰退担忧加剧,世界半导体贸易统计组织(WSTS)在最新的研究报告中表示民进党前立委如果相信美国人的兵推,台湾的灾难将更大据环球网援引岛内媒体的报道称,8月22日,民进党前立委沈富雄表示,兵推听命美方,灾情只有更惨。根据岛内媒体的报道称,美国一再要求台湾加强军购,对此沈富雄表示,美国智库多如过江之鲫,日本千枚远程导弹管不着台湾,更救不了自己来源中国台湾网日前,有日本媒体发布消息称,日本正在考虑部署1000枚以上的远程巡航导弹,以加强对中国的反击能力,报道将日本的这种打算归因于台海局势。跟以往一样,这一爆炸性消息并不是5年过去了,冯小刚亲自选的芳华三美,如今差距这么大?穿黑丝网袜子的超短裙的,挎一个小名牌包的,你们可以走了,我这儿不是夜总会!2016年,在电影芳华选角期间,导演冯小刚毫不客气地直接表明了态度。而除了打扮之外,此前他还曾多次公开表示江苏将建2个特大城市2个I型大城市13个II型大城市,4个县入围今天,我们继续谈一谈江苏省。这个省份似乎很多要素都走在前列。最重要的一点是,江苏省的发展较为均衡,2020年,江苏省的人均GDP达12万元,居各省自治区之首。此外,江苏也是全国城乡
公开发表!西安工大获多维石墨烯基气凝胶,引发国际关注!为了解决电磁污染问题,目前开发高性能微波吸收材料势在必行。近日,西安工业大学材料与化工学院王岩教授团队在Carbon期刊发表题为Constructionofmultidimensi欢欣鼓舞,WhatsApp更新终于为您提供表情符号反应自从Meta首次宣布他们的专用消息应用程序提供大量功能以来,在等待一些用户长达一个月的痛苦之后,WhatsApp终于推出了表情符号反应,大幅提高了文件传输限制,并在新的更新中提供了城镇化建设加速推进新时代新国企迎来绝好机遇县域城投公司作为县域建设的主力军,受益于近年来推进以县城为重要载体的城镇化建设的新型城镇化政策趋势,迎来了重要的发展机遇。伴随着地方城投平台整合重组浪潮,各地政府纷纷推动实力较强的2022年全球动力电池榜单出炉,宁德时代和比亚迪市占率合计超50动力电池月度排名记者王月伦编辑中资动力电池企业去年的全球市场份额突破六成。其中宁德时代(300750。SZ)和比亚迪(002594。SZ)两家的市占率就超过了50。2月8日,韩国研究机构SNERe中国电池巨头宁德时代宣布出售50亿美元瑞士全球存托凭证据知情人士透露,世界上最大的电动汽车电池制造商之一的宁德时代(ContemporaryAmperexTechnologyCo。,Ltd。)已选择银行出售其在瑞士的全球存托凭证(GD2022年,河南省社会消费品零售总额同比增长0。1大河财立方消息2月8日,河南省统计局发布20222023年河南省消费品市场形势分析与展望。2022年,全省上下认真贯彻落实党中央国务院和省委省政府各项决策部署,统筹推进疫情防控和经新学期教师寄语高守华立报国之志做时代新人2月6日,淄博市中小学正式开学啦。开学现场,一派好久不见,十分想念的火热和喜悦,很暖,也很燃。在经历了70多天的居家网课学习加假期后,对于新学期,老师们有什么感想和心声呢?大众日报旗舰手机不轻易选择,现阶段其实就三款,华为小米各有一款好内容我来评现在买手机确实不简单,就拿旗舰机来说各个品牌都会有,而且价格也不便宜,但其实在我看来现阶段最值得入手考虑的也就是这三款。小米一款,华为一款,苹果第一款,这三款手机都是去居然还有人不知道万群引擎?我真的会伤心的!万群引擎是什么?万群引擎,京东CPS选品黑马!万群引擎汇聚全网京东采集群商品,利用平台强大的AI智能数据引擎,实时筛选最新最爆商品,通过稳定高性价比的发单工具,帮助推手和全网各流量一加有多卷?一加BudsPro2再升级,汉斯季默调音上线!2月7日晚,在一加的海外新品发布会上,一加带来了诸多让人眼前一亮的新品,像此前在国内备受好评的tws耳机一加BudsPro2正式在海外发布,值得一提的是,这次一加还带来了全新的白色ChatGPT会让哪些人失业?这几个职业最有可能被人工智能取代ChatGPT最近超火的!写求职信写论文做工作计划这些它都能干!人工智能技术的发展让人们感到恐慌,随着技术的不断发展,更多的行业会迎来新一轮的变革,ChatGPT和相关人工智能技术