游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Java知识Mybatis的特性详解动态SQL,拿走不谢

  Mybatis的特性详解动态SQL1。MyBatisif标签:条件判断2。MyBatischoose、when和otherwise标签5。MyBatisforeach标签仰天大笑出门去,我辈岂是蓬蒿人
  动态SQL是MyBatis的强大特性之一。在JDBC或其它类似的框架中,开发人员通常需要手动拼接SQL语句。根据不同的条件拼接SQL语句是一件极其痛苦的工作。例如,拼接时要确保添加了必要的空格,还要注意去掉列表最后一个列名的逗号。而动态SQL恰好解决了这一问题,可以根据场景动态的构建查询。
  动态SQL只有几个基本元素,与JSTL或XML文本处理器相似,十分简单明了,大量的判断都可以在MyBatis的映射XML文件里配置,以达到许多需要大量代码才能实现的功能。
  好处::动态SQL大大减少了编写代码的工作量,更体现了MyBatis的灵活性、高度可配置性和可维护性。一、动态sql的元素
  MyBatis的动态SQL包括以下几种元素,如下表所示
  1。MyBatisif标签:条件判断
  MyBatisif类似于Java中的if语句,是MyBatis中最常用的判断语句。使用if标签可以节省许多拼接SQL的工作,把精力集中在XML的维护上。if语句使用方法简单,常常与test属性联合使用。
  语法如下:iftest判断条件SQL语句if
  当判断条件为true时,才会执行所包含的SQL语句。
  最常见的场景是在if语句中包含where子句,例如。selectidselectAllBaseDataresultMapmyResultselectid,namefrombaseDataiftestname!nullwherenamelike{name}ifselect
  以上代表表示根据name去查找相应的信息,但是name是一个可填可不填的条件,不填写的时候不作为查询条件。
  可多个if语句同时使用。以下语句表示为可以按照name或者id进行模糊查询。如果您不输入,则返回所有的记录。但是,如果你传递了任意一个参数,它就会返回与给定参数相匹配的记录:selectidselectAllBaseDataresultMapmyResultselectid,namefrombaseDataiftestname!nullwherenamelike{name}ififtestid!idANDidlike{id}ifselect2。MyBatischoose、when和otherwise标签
  MyBatis中动态语句choosewhenotherwise类似于Java中的switchcasedefault语句。由于MyBatis并没有为if提供对应的else标签,如果想要达到。。。。。。的效果,可以借助、、来实现。
  动态语句choosewhenotherwise语法如下。choosewhentest判断条件1SQL语句1whenwhentest判断条件2SQL语句2whenwhentest判断条件3SQL语句3whenotherwiseSQL语句4otherwisechoose
  choose标签按顺序判断其内部when标签中的判断条件是否成立,如果有一个成立,则执行相应的SQL语句,choose执行结束;
  如果都不成立,则执行otherwise中的SQL语句。
  这类似于Java的switch语句;choose为switch,when为case,otherwise则为default。
  示例
  以下示例要求:
  当网站名称不为空时,只用网站名称作为条件进行模糊查询;
  当网站名称为空,而网址不为空时,则用网址作为条件进行模糊查询;
  当网站名称和网址都为空时,则要求网站年龄不为空。mappernamespacenet。biancheng。mapper。WebsiteMapperselectidselectWebsiteSELECTid,name,url,age,countryFROMwebsiteWHERE11choosewhentestname!nullandname!ANDnameLIKECONCAT(,{name},)whenwhentesturl!nullandurl!ANDurlLIKECONCAT(,{url},)whenotherwiseANDageisnotnullotherwisechooseselectmapper
  这样MyBatis就会根据参数的设置进行判断来动态组装SQL,以满足不同业务的要求。远比Hibernate和JDBC中大量判断Java代码要清晰和明确。3。MyBatiswhere标签
  where标签
  where标签主要用来简化SQL语句中的条件判断,可以自动处理ANDOR条件,语法如下whereiftest判断条件ANDOR。。。ifwhere
  if语句中判断条件为true时,where关键字才会加入到组装的SQL里面,否则就不加入。where会检索语句,它会将where后的第一个SQL条件语句的AND或者OR关键词去掉。
  示例selectidselectWebsiteresultTypenet。biancheng。po。Websiteselectid,name,urlfromwebsitewhereiftestname!nullANDnamelike{name}ififtesturl!nullANDurllike{url}ifwhereselect4。MyBatisset标签
  在Mybatis中,update语句可以使用set标签动态更新列。set标签可以为SQL语句动态的添加set关键字,剔除追加到条件末尾多余的逗号。代码如下。!使用set元素动态修改一个网站记录updateidupdateWebsiteUPDATEwebsitesetiftestname!nullname{name},ififtesturl!nullurl{url},ifsetWHEREid{id}update5。MyBatisforeach标签
  对于一些SQL语句中含有in条件,需要迭代条件集合来生成的情况,可以使用foreach来实现SQL条件的迭代。
  Mybatisforeach标签用于循环语句,它很好的支持了数据和List、set接口的集合,并对此提供遍历的功能。语法格式如下。foreachitemitemindexindexcollectionlistarraymapkeyopen(separator,close){item}foreach
  foreach标签主要有以下属性,说明如下:item:表示集合中每一个元素进行迭代时的别名。index:指定一个名字,表示在迭代过程中每次迭代到的位置。open:表示该语句以什么开始(既然是in条件语句,所以必然以(开始)。separator:表示在每次进行迭代之间以什么符号作为分隔符(既然是in条件语句,所以必然以,作为分隔符)。close:表示该语句以什么结束(既然是in条件语句,所以必然以)开始)。
  使用foreach标签时,最关键、最容易出错的是collection属性,该属性是必选的,但在不同情况下该属性的值是不一样的,主要有以下3种情况:如果传入的是单参数且参数类型是一个List,collection属性值为list。如果传入的是单参数且参数类型是一个array数组,collection的属性值为array。如果传入的参数是多个,需要把它们封装成一个Map,当然单参数也可以封装成Map。Map的key是参数名,collection属性值是传入的List或array对象在自己封装的Map中的key。
  示例
  修改array里面id为这些的数据status改为0updateprojectsetstatus0whereidinforeachitemidcollectionarrayopen(separator,close){id}foreach
  注意事项:在使用foreach标签时,应提前预估一下collection对象的长度。因为大量数据的in语句会影响性能,且还有一些数据库会限制执行的SQL语句长度。6。MyBatisbind标签
  每个数据库的拼接函数或连接符号都不同,例如MySQL的concat函数、Oracle的连接符号等。这样SQL映射文件就需要根据不同的数据库提供不同的实现,显然比较麻烦,且不利于代码的移植。MyBatis提供了bind标签来解决这一问题。
  bind标签可以通过OGNL表达式自定义一个上下文变量。
  比如,按照网站名称进行模糊查询,SQL映射文件如下。selectidselectWebsitebindnamepatternvalueparameterSELECTid,name,url,age,countryFROMwebsiteWHEREnamelike{pattern}select
  bind元素属性如下:value:对应传入实体类的某个字段,可以进行字符串拼接等特殊处理。name:给对应参数取的别名。
  以上代码中的parameter代表传递进来的参数,它和通配符连接后,赋给了pattern,然后就可以在select语句中使用这个变量进行模糊查询,不管是MySQL数据库还是Oracle数据库都可以使用这样的语句,提高了可移植性。
  大部分情况下需要传递多个参数,下面为传递多个参数时bind的用法示例。
  示例mapper文件中入参publicListUserselectUser(Useruser);xml中selectidselectUserresultTypeUserbindnamepatternnamevaluenamebindnamepatternurlvalueurlSELECTid,name,url,age,countryFROMUserWHEREnamelike{patternname}ANDurllike{patternurl}select7。MyBatistrim标签
  在MyBatis中除了使用ifwhere实现多条件查询,还有一个更为灵活的元素trim能够替代之前的做法。
  trim一般用于去除SQL语句中多余的AND关键字、逗号,或者给SQL语句前拼接where、set等后缀,可用于选择性插入、更新、删除或者条件查询等操作。trim语法格式如下。trimprefix前缀suffix后缀prefixOverrides忽略前缀字符suffixOverrides忽略后缀字符SQL语句trim
  trim中属性说明如下
  示例selectidselectUserresultTypeUserSELECTid,name,url,age,countryFROMUsertrimprefixwhereprefixOverridesandiftestname!nullandname!ANDnameLIKECONCAT(,{name},)ififtesturl!nullANDurllikeconcat(,{url},)iftrimselect需要Java资料和面试题:转发关注之后,私信【Java】即可!!!

为什么拍着拍着婴儿就睡着了?为什么拍着拍着婴儿就睡着了?睡眠很重要,尤其是对婴儿来说。有研究对北京1000多名婴幼儿的观察显示,其中72。9的婴幼儿都有摇晃拍抱入睡的习惯。所以从可能性上来看,……王者荣耀为什么王者50星以上的高端局从来不拿这些英雄?不知道大家有没有注意到,在王者荣耀低星路人局中经常出现且能打出奇效的英雄,在王者50星以上的高端局里却很少有玩家会玩。这是到底是为什么呢?这里我给大家分析了下,在王……分析中国地产和经济的未来,要读懂这些芒刺在背的数据壹2022年,我国货物贸易进出口总值达42。07万亿元。但与此同时,从2022年下半年起,上海、天津、宁波等港口大量空集装箱堆积如山。其中,上海出口集装箱运价指数已直线下……中国机会西门子中国数字化低碳化转型机遇之门越开越大一年一度的进博时间即将再次开启,全球客商共享中国机遇。每年的11月份,我们都会来到上海‘赴约’,这是西门子与中国客户及合作伙伴一年一度的默契约定。在西门子全球执行副总裁,西门子……姐弟恋!女排24岁最佳主攻恋情曝光,21岁男友打手球一见钟情中国女排运动员最近喜事不断,广东女排的国手栗垚恋爱了,前河北女排队长周淼结婚了,如今上海女排主攻手仲慧的恋情也曝光了。仲慧男友更新了社交媒体晒出两人去看电影的合照,并且向仲慧深……丢人到国外!世台联主席重要决定中国名将被停赛,有权提出上诉梁文博,中国斯诺克的名将,也拿到过排名赛的冠军,但近日却因为一起暴力事件受到了不小的关注。在去年7月份,梁文博被拍到他与一位女性发生了冲突,梁文博还对对方发生了肢体冲突,……劲爆!联通和腾讯要合营?非也!非也10月27日据国家市场监管总局官网发布的信息显示,国家市场监管总局批准中国联通与腾讯设立混改新公司,该消息发布后直接冲上了热搜,联通直接涨停。很多热心的观众直接就激动了起……是时候说再见!蜜芽APP关停,母婴电商资本宠儿已落幕?文:沈思涵石丹ID:BMR2004是时候说再见了。寥寥数语的一纸公告,宣告了蜜芽谢幕的倒计时。近日,蜜芽的运营主体北京花旺在线商贸有限公司发布公告称,蜜芽AP……猪八戒现已73岁,与嫦娥恩爱多年,如今儿子也事业有成很多人会在业余时间追剧,作为一种放松的消遣。但是影视圈一直在出新作,但是也有很多人觉得虽然现在剧多,资金充足,服装道具比以前精致很多,但是为什么缺少以前的感觉?比如我们耳熟能详……产品为王,奥特朗即热式电热水器匠造高质量的产品力谈到即热式热水器,很多人都会想到22年专注高端即热的头部品牌奥特朗。22年屹立市场,奥特朗品牌经久不衰的基础是拥有优质的产品和持久的创新力。打造高质量的产品力,奥特朗致力于帮助……四川茂县百余亩向日葵花海惊艳绽放百余亩向日葵花海惊艳绽放。何清海摄百余亩向日葵花海惊艳绽放。何清海摄百余亩向日葵花海惊艳绽放。何清海摄盛夏时节,四川阿坝州茂县富顺镇上关村百余亩向日葵争相绽放……庐山让游客出游安全舒适来源:【江西日报江西新闻客户端】江西日报全媒体记者周亚婧大年初四,雪停了。清晨,山林中氤氲着淡淡的水汽,暖阳升起,为一山纯白镀上了一层明净的辉光。7时许,庐山……
海淀冬奥母女她不知女儿开幕式上与主火炬近在咫尺妈妈,我什么时候才能入团呢?你好好学习,升了初中就写入团申请书,争取第一批就能入。这是一对冬奥母女电话聊天的内容妈妈李黎是北京冬奥村的护士女儿杜卡妮是冬……狙击精英5登陆部队DLC上线宣传片新任务武器等近日,《狙击精英5》公布登陆部队DLC发售宣传片,该DLC包括登陆部队任务包、步枪武器包:德利尔卡宾枪、冲锋枪武器包:PPSH,国区Steam售价50元,感兴趣的玩家可进入商店……沉思发呆到西方精神医学的木僵大脑异常孩子的家长总是处于紧张恐惧当中。孩子活蹦乱跳,打打闹闹,他们认为孩子是躁狂发作,会伤人自残,会离家出走;孩子安静坐下来不说话,他们又认为孩子变傻了,木僵,变成了精神分裂……HUAWEIWATCHFIT2官方表盘上新,赶紧试试吧HUAWEIWATCHFIT2版本更新上线,官方上线20多款精美表盘,无论是出席商务正式场合,还是在日常休闲生活,百变表盘总有一款适合你。如果不喜欢,还可以自定义表盘哦!下面给……最新!70城房价出炉,湛江11月新房价格环比再下跌0。5!12月15日,国家统计局发布了2022年11月份70个大中城市商品住宅销售价格变动情况。各线城市商品住宅销售价格环比下降,一线城市同比涨幅回落、二三线城市同比降势趋缓。……谁玩谁知道,它是7级最强平民轻坦!各位车长大家好!曾经游戏中还没有10级轻坦的时候,T71DA本是M系科技树上的一辆平平无奇的7级眼车。在眼车最高等级是8级的年代,游戏内的眼车基本上都会被分到较高的分房(……给下一个遇见给下一个遇见,给未知的明天。于是,在无形之中,渐渐明白。今年的春天似乎来得特别晚,像是一场预谋,没有预谋的一样。不是春天已经过了,而是夏天的热烈,经过如实而又是夏的猛烈。……2021年发布的几款重量级手机!苹果华为OPPO都在列今天是2021年12月31日星期五,也是2021年的最后一天,一年又过去了。我们来回顾一下2021年发布的几款重量级别的手机。iPhone13系列iPhone13系……CANN算子利用迭代器高效实现Tensor数据切割分块处理摘要:本文以Diagonal算子为例,介绍并详细讲解如何利用迭代器对n维Tensor进行基于位置坐标的大批量数据读取工作。本文分享自华为云社区《CANN算子:利用迭代器高……王楠给员工开会太霸气!国乒李晓霞带娃工作两不误,不忘吐槽老公退役后的运动员,虽然远离了比赛赛场,但是并没有远离公众的视野和自己所爱好的运动领域。近日,两位昔日的乒乓球大满贯得主李晓霞、王楠晒出了最新动态。两人不仅在新的领域有了新身份,还……猫经济有潜力!首届猫博会选址厦门猫博会吸引不少爱猫人士逛展。首届CEIE猫经济产业创新博览会(简称猫博会)于3月10日12日在厦门国际会展中心举办,展会吸引专业猫咪赛事、猫咪用品商家,以及大量养猫、爱猫……福建惊现一神秘古墓,出土于元末明初,墓主人究竟是谁?大家好,我是小Q。在福建省南平市顺昌县有这么一座元末明初的古墓,墓的主人有些特别,他是一位神仙,是咱们家喻户晓的齐天大圣孙悟空,而且不止于此,墓中还出土了一根金箍棒,难道我们《……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网