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

玩转Mybatis高级特性让你的数据操作更上一层楼

  Mybatis高级特性能够帮助我们更加灵活地操作数据库,包括动态SQL、缓存机制、插件机制、自定义类型转换等。学习这些特性可以让我们更好地利用Mybatis,提高数据操作的效率和质量。动态SQL
  动态SQL中,Mybatis提供了多种标签来帮助我们构建动态的SQL语句,其中包括::用于条件判断,可以动态添加WHERE语句的查询条件。:动态生成WHERE语句,可以过滤掉不需要的条件。:动态生成UPDATE语句,可以更新需要修改的字段。:类似于Java中的switch语句,可以根据不同的条件生成不同的SQL语句。:用于循环遍历集合,可以将集合中的元素作为SQL语句的参数进行批量操作。
  示例:updateidupdateByPrimaryKeySelectiveparameterTypecom。youlai。mybatis。domain。SysUserupdatesysusersetiftestusername!nullusername{username,jdbcTypeVARCHAR},ififtestnickname!nullnickname{nickname,jdbcTypeVARCHAR},ififtestgender!nullgender{gender,jdbcTypeTINYINT},ififtestpassword!nullpassword{password,jdbcTypeVARCHAR},ififtestdeptId!nulldeptid{deptId,jdbcTypeINTEGER},ififtestavatar!nullavatar{avatar,jdbcTypeVARCHAR},ififtestmobile!nullmobile{mobile,jdbcTypeVARCHAR},ififteststatus!nullstatus{status,jdbcTypeTINYINT},ififtestemail!nullemail{email,jdbcTypeVARCHAR},ififtestdeleted!nulldeleted{deleted,jdbcTypeTINYINT},ififtestcreateTime!nullcreatetime{createTime,jdbcTypeTIMESTAMP},ififtestupdateTime!nullupdatetime{updateTime,jdbcTypeTIMESTAMP},ifsetwhereid{id,jdbcTypeINTEGER}update
  动态SQL的优化技巧:尽量使用标签生成WHERE语句,可以避免出现多余的AND或OR关键字。使用标签批量操作时,尽量使用batch模式,而不是简单的循环逐一执行。对于常用的动态SQL语句,可以使用Mybatis提供的缓存机制进行优化。尽量避免在动态SQL中使用select语句,而是明确指定需要查询的字段。在动态SQL中尽量使用预编译语句,可以提高SQL语句的执行效率。让自己不断进步,让职业越来越优秀。缓存机制一级缓存和二级缓存的区别一级缓存是Mybatis默认开启的缓存,它是在同一个SqlSession内部共享的缓存,它可以通过查询语句的唯一标识符(id)和查询参数作为key进行缓存,可以有效地避免重复查询。一级缓存的生命周期与SqlSession相同,当SqlSession关闭时,它的缓存也会被清空。二级缓存是Mybatis的全局缓存,它可以被多个SqlSession共享,适用于需要跨SqlSession共享数据的场景。它的存储方式是将数据放在一个HashMap中,key是查询语句的唯一标识符和查询参数的组合,value是查询到的结果。二级缓存的生命周期与整个应用程序相同,它可以在应用程序的多个SqlSession之间共享查询结果,但也由于这个原因,它的数据一旦被修改,就需要手动刷新缓存,否则会导致数据的不一致。缓存的配置和使用方式
  配置方式:mybatis:configuration:cacheenabled:true开启二级缓存(默认开启)localcachescope:statement关闭一级缓存(默认开启)localcachescope:session开启一级缓存(默认开启)
  使用方式:mappernamespacecom。youlai。mybatis。mapper。SysUserMappercachetypecom。youlai。mybatis。service。MyCustomCachemapper
  自定义缓存实现,这里采用本地存储,分布式建议用redisComponentSlf4jpublicclassMyCustomCacheimplementsCache,Serializable{privateStringid;privateMapObject,ObjectcachenewConcurrentHashMap();publicMyCustomCache(){}publicMyCustomCache(Stringid){this。idid;}OverridepublicStringgetId(){log。info(获取缓存标识:{},id);returnid;}OverridepublicvoidputObject(Objectkey,Objectvalue){log。info(添加缓存key:{},value:{},key,value);cache。put(key,value);}OverridepublicObjectgetObject(Objectkey){log。info(获取缓存key:{},key);returncache。get(key);}OverridepublicObjectremoveObject(Objectkey){log。info(删除缓存key:{},key);returncache。remove(key);}Overridepublicvoidclear(){log。info(清空缓存);cache。clear();}OverridepublicintgetSize(){log。info(获取缓存数量:{},cache。size());returncache。size();}OverridepublicReadWriteLockgetReadWriteLock(){log。info(拿锁);ReentrantReadWriteLockreadWriteLocknewReentrantReadWriteLock(true);returnreadWriteLock;}privatevoidwriteObject(ObjectOutputStreamout)throwsIOException{out。writeObject(cache);}privatevoidreadObject(ObjectInputStreamin)throwsIOException,ClassNotFoundException{cache(MapObject,Object)in。readObject();}}做自己喜欢的事情,成为自己想成为的人。插件机制
  Mybatis插件可以在执行过程中拦截指定的方法,对其进行增强或者修改,原理是使用JDK动态代理机制,对Mybatis的接口进行代理,从而实现对SQL执行过程的拦截和修改,可以实现一些比较复杂的功能,例如:对SQL语句进行拦截和修改,实现动态SQL的功能。统计SQL执行的时间,方便对性能进行优化。实现通用的分页查询功能。对查询结果进行加密或解密。
  自定义插件的步骤:实现Interceptor接口,重写intercept方法。在intercept方法中编写拦截逻辑,对需要拦截的方法进行增强或修改。在plugin方法中,将拦截器实例化,并返回代理对象。在Mybatis配置中添加插件。
  以下是一个统计SQL执行时间示例:Intercepts({Signature(typeStatementHandler。class,methodquery,args{Statement。class,ResultHandler。class})})Slf4jpublicclassMybatisPluginimplementsInterceptor{OverridepublicObjectintercept(Invocationinvocation)throwsThrowable{TODO:拦截逻辑log。info(进入拦截器);longstartTimeSystem。currentTimeMillis();Objectresultinvocation。proceed();longendTimeSystem。currentTimeMillis();longsqlTimeendTimestartTime;StatementHandlerstatementHandler(StatementHandler)invocation。getTarget();StringsqlstatementHandler。getBoundSql()。getSql();ParameterHandlerparameterHandlerstatementHandler。getParameterHandler();log。info(执行sql:{},参数:{},花费了{}毫秒,sql,parameterHandler。getParameterObject()。toString(),sqlTime);returnresult;}OverridepublicObjectplugin(Objecttarget){log。info(生成代理对象);returnInterceptor。super。plugin(target);}OverridepublicvoidsetProperties(Propertiesproperties){log。info(设置插件属性);Interceptor。super。setProperties(properties);}}
  添加插件ComponentpublicclassMySqlSessionFactoryBeanCustomizerimplementsSqlSessionFactoryBeanCustomizer{Overridepublicvoidcustomize(SqlSessionFactoryBeanfactoryBean){注册插件factoryBean。setPlugins(newMybatisPlugin());}}保持热情与好奇心,不断追求进步和创新。自定义类型转换
  Mybatis中的类型转换指的是Java类型和数据库类型之间的转换。在Mybatis中,我们可以使用TypeHandler来实现自定义的类型转换。
  自定义TypeHandler的步骤如下:创建一个类,实现org。apache。ibatis。type。TypeHandler接口。在类上使用MappedJdbcTypes注解指定要转换的JDBC类型。在类上使用MappedTypes注解指定要转换的Java类型。重写TypeHandler接口中的方法,实现自定义的类型转换逻辑。
  示例:MappedJdbcTypes(JdbcType。VARCHAR)MappedTypes(String。class)Slf4jpublicclassMyStringTypeHandlerimplementsTypeHandlerString{OverridepublicvoidsetParameter(PreparedStatementps,inti,Stringparameter,JdbcTypejdbcType)throwsSQLException{log。info(将Java类型的参数转换为JDBC类型的参数,并设置到PreparedStatement中);ps。setString(i,parameter);}OverridepublicStringgetResult(ResultSetrs,StringcolumnName)throwsSQLException{log。info(通过列名{}获取数据,将JDBC类型中的结果转换为java类型,columnName);returnrs。getString(columnName);}OverridepublicStringgetResult(ResultSetrs,intcolumnIndex)throwsSQLException{log。info(通过索引获取数据,将JDBC类型中的结果转换为java类型);returnrs。getString(columnIndex);}OverridepublicStringgetResult(CallableStatementcs,intcolumnIndex)throwsSQLException{log。info(通过索引获取数据,将JDBC类型中的结果转换为java类型);returncs。getString(columnIndex);}}
  注册ComponentpublicclassMySqlSessionFactoryBeanCustomizerimplementsConfigurationCustomizer{Overridepublicvoidcustomize(Configurationconfiguration){configuration。getTypeHandlerRegistry()。register(String。class,newMyStringTypeHandler());}}
  以上示例中,我们自定义了一个将JavaString类型转换为JDBCVARCHAR类型的TypeHandler。总结
  本文介绍了Mybatis的高级特性,包括动态SQL的优化技巧、缓存机制、插件机制和自定义类型转换。动态SQL的优化技巧包括使用标签生成WHERE语句、使用标签批量操作时尽量使用batch模式等。缓存机制包括一级缓存和二级缓存,可以通过配置文件进行开启或关闭。插件机制可以在Mybatis的执行过程中拦截指定的方法,对其进行增强或者修改。自定义类型转换可以将Java类型和数据库类型之间进行转换。

江苏吴江楼市的危机,发达的吴江,低廉的房价,吴江区楼市的潜力苏南地区的经济发展一直走在全国城市的前列,而苏南地区最为引人瞩目的就是江苏省苏州市。苏州是一座拥有十大区县的地级中心城市,其中包括六大中心城区和4个县级市,对于苏州任何区域而言,都荣耀的罗生借壳门自打荣耀被华为剥离后,市场对于它的关注度是呈现出快速下降的趋势,以至于近两年来,有关于荣耀的报道极其的稀少。但是在最近的一个月内,资本市场却因为借壳门的出现,而上演了一出大戏。时间自主5强11月销量榜比亚迪狂卖23万,4家意外环比下滑作为自主品牌的风向标,长城长安吉利奇瑞比亚迪这自主5强每个月销量规模在70万辆左右,超过了自主品牌半壁江山的份额。在11月,自主5强出现了分化的表现,比亚迪一如既往乘着东风销量突飞184801辆!长安汽车11月销量出炉,新能源车型是亮点!北京时间12月8日,长安汽车官媒出炉11月产销快报,产量是19。01万辆销量是18。48万辆,其中新能源是最大的亮点!先来看看产量方面,11月产量同比减少13。79,只有19。01蓝思科技不存在被踢出供应链的情况不会对营收造成不利影响新京报贝壳财经讯12月10日,蓝思科技在互动平台上表示,公司与客户企业集团及其旗下成员企业的合作正常开展,相关产品的研发生产交付正常,公司并不存在被踢出供应链的情况,不会对公司营收财经周评年底的红包行情有多少?政治局12月6日召开会议,安排了四个重点工作,都与发展有关。一是统筹疫情防控和经济社会发展二是统筹发展和安全三是推动高质量发展四是做好稳增长稳就业稳物价。这四个重点领域工作,也对应宁德时代11月市占率创年内新高动力电池月度排名记者王月伦编辑在国内动力电池市场,宁德时代(300750。SZ)的占有率上个月创下年内新高。12月9日,中国汽车动力电池产业创新联盟发布数据称,今年11月,国内动力电池装车量34。显卡价格行情(12月11日),矿卡行情,坑爹的双12一显卡相关资讯1最新产品资讯英伟达RTX408016G上市11月16日AMDRX7900XTXXT上市12月13日英伟达RTX40系移动显卡2023年1月3日英伟达RTX4070T数量暴增的新能源电车对地球的影响大家都以为新能源电车(有别于新能源氢动力汽车,细称为电车)是环保的?或者说对地球环境真的影响不大吗?传统燃油车只是尾气问题。理论上属于可控范围。但是新能源电车对地球环境的影响是一个好消息!长春将新添5座新能源充电站新能源车充电更方便了!日前,中国吉林网获悉,长春城建首批新能源充电站正式投入运营。12月起,5座新能源充电站将陆续投入使用。5座新能源充电站借助停车,全部位于公共停车场,在快速路桥氢燃料电池车,卡罗拉CrossH2概念车官图发布日前,丰田汽车正式对外发布了卡罗拉CrossH2概念车的官图,该车发动机将会通过直接燃烧氢气作为动力,努力零碳排放。这样的新动力车型不免让人心生好奇,不过目前该车还没有具体的量产日
我国从月球背面摘取样本的任务变得更加有趣了中国即将进行的嫦娥六号任务将包括四个国际项目,包括测量太阳风的工具和从表面泄漏的惰性气体。中国嫦娥五号任务的构想图两年前,中国的嫦娥五号任务创造了历史,40多年来首次将月球样本送回地表最强防御志愿军50军1950年10月25日入朝参战,先后参加抗美援朝战争第一次至第四次战役。朝鲜停战后,参加帮助朝鲜人民重建家园的工作。1955年3月,撤离朝鲜回国。50军是志愿军打的最远的部队,不光放化疗后血清白蛋白低,饮食上应该怎么调整?开始放化疗后,肿瘤患者的身体会出现各种各样的不良反应,其中血清白蛋白是极为重要的指标之一。对肿瘤患者的治疗和康复都有着深远的影响,这也是为什么极为重视血清白蛋白的原因之一。血清白蛋你知道吗?几块钱的维生素,也能加速牛皮癣恢复!银屑病俗称牛皮癣,是免疫系统紊乱导致的皮肤疾病,非常容易复发。主要病因一般与遗传创伤感染精神因素以及自身免疫等有关,主要表现为皮肤的过度增生脱落。适当的补充维生素,不仅可以提高免疫嗅觉丧失并非小事!或与脑功能相关,须尽早医疗干预编者按本文经作者昆仑策研究院研究员笑笑生生授权昆仑策研究院头条号原创发布,以供研究参考。我们每个人每天都在经历呼吸,也受惠于嗅觉。早晨起来后,你煮了一杯牛奶,奶香扑鼻,浓香四溢当你比肾虚还要可怕的是脾虚,送你5个中成药,教你调养各种脾虚情况大家好,我是赵医生。现在人们都特别重视补肾,经常买很多调补肾脏的中成药。但是你知道吗?脾虚比肾虚更加可怕,中医上讲脾为后天之本,负责给我们全身的脏腑器官提供营养物质,这样我们的其他相同年纪为什么你会显老?也许你遇上了这两种催老食品很多人会在生活中发现,明明我都做好护肤工作了,为什么还会显老?那可能你在平时的饮食规律中不规范遇上了这两个坑。1。甜食皮肤氧化剂一般来说,甜食中糖的含量较多,经常吃甜食会摄入较多的今日冬至,无论贫富,记得吃3红2黑,忌1样,驱寒送暖过寒冬头条创作挑战赛今日冬至,无论贫富,记得吃3红2黑,忌1样,驱寒送暖过寒冬。今日,我们迎来二十四节气中第二十二个节气冬至,冬至是中国人很重视的一个节日。冬至的到来,气候也将进入冬天最趁着发烧减个肥?专家告诉你别这样做!!要问现下流行的人群分类方式,那当属阴阳分型了,解放军总医院第八医学中心营养科左小霞亲自撰稿,为公众营养防疫提供指导。阴着的,要挺住9招提高免疫力当人体免疫系统的功能很强时,身体便有恭喜马龙!恭喜王楚钦!国际乒协启动扣分,张本伊藤集体跌至第七近日国际乒协又再一次更新了积分排名。在此次更新的排名中,国乒选手依旧占据着十分靠前的位置。但是也有一些外协选手也逐渐展示出与国乒一争高下的实力。在男子方面中张本智和依旧排在了积分榜国乒最新消息马龙樊振东新职务曝光,肖战成陈幸同主管教练大家对中国乒乓球队的关注是很高的,在国家队中,有许多优秀的运动员值得大家敬佩。在2022年的下半年,我国优秀的乒乓球运动员们接连不断的参加了很多比赛,而他们也不负众望,在赛场上取得
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网