城满财富 请问也新 濠影 汇娱 <乐 场什么时候玩比较好?

Mybatis的&where&&foreach&&set&等标签详解
sql语句where条件中,需要一些安全判断,例如按性别检索,如果传入的参数是空的,此时查询出的结果很可能是空的,也许我们需要参数为空 时,是查出全部的信息。这是我们可以使用动态sql,增加一个判断,当参数不符合要求的时候,我们可以不去判断此查询条件。&下文均采用mysql语法和函数(例如字符串链接函数CONCAT3.1 if标签&一个很普通的查询:Xml代码&&&!-- 查询学生list,like姓名 --&&&&&select id=&getStudentListLikeName& parameterType=&StudentEntity& resultMap=&studentResultMap&&&&&&&& SELECT * from STUDENT_TBL ST&&&&&WHERE ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')&&&&&/select&&&&但是此时如果studentName是null或空字符串,此语句很可能报错或查询结果为空。此时我们使用if动态sql语句先进行判断,如果值为null或等于空字符串,我们就不进行此条件的判断。修改为:Xml代码&&&!-- 查询学生list,like姓名 --&&&&&select id=& getStudentListLikeName & parameterType=&StudentEntity& resultMap=&studentResultMap&&&&&&&& SELECT * from STUDENT_TBL ST&&&&&&& &if test=&studentName!=null and studentName!='' &&&&&&&&&&&& WHERE ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')&&&&&&& &/if&&&&&/select&&&&&此时,当studentName的值为null或’’的时候,我们并不进行where条件的判断,所以当studentName值为null或’’值,不附带这个条件,所以查询结果是全部。&由于参数是Java的实体类,所以我们可以把所有条件都附加上,使用时比较灵活, new一个这样的实体类,我们需要限制那个条件,只需要附上相应的值就会where这个条件,相反不去赋值就可以不在where中判断。&& 代码中的where标签,请参考3.2.1.Xml代码&&&!-- 查询学生list,like姓名,=性别、=生日、=班级,使用where,参数entity类型 --&&&&&select id=&getStudentListWhereEntity& parameterType=&StudentEntity& resultMap=&studentResultMap&&&&&&&& SELECT * from STUDENT_TBL ST&&&&&&& &where&&&&&&&&&&& &if test=&studentName!=null and studentName!='' &&&&&&&&&&&&&&&& ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&studentSex!= null and studentSex!= '' &&&&&&&&&&&&&&&& AND ST.STUDENT_SEX = #{studentSex}&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&studentBirthday!=null&&&&&&&&&&&&&&&& AND ST.STUDENT_BIRTHDAY = #{studentBirthday}&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&classEntity!=null and classEntity.classID !=null and classEntity.classID!='' &&&&&&&&&&&&&&&& AND ST.CLASS_ID = #{classEntity.classID}&&&&&&&&&&& &/if&&&&&&& &/where&&&&&/select&&&&查询,姓名中有‘李’,男,生日在‘’,班级在‘’的学生。Java代码&&StudentEntity entity = new StudentEntity();&&&&entity.setStudentName(&李&);&&&&entity.setStudentSex(&男&);&&&&entity.setStudentBirthday(StringUtil.parse(&&));&&&&entity.setClassEntity(classMapper.getClassByID(&&));&&&&List&StudentEntity& studentList = studentMapper.getStudentListWhereEntity(entity);&&&&for( StudentEntity entityTemp : studentList){&&&&&&& System.out.println(entityTemp.toString());&&&&}&&&3.2 where、set、trim标签3.2.1 where当if标签较多时,这样的组合可能会导致错误。例如,like姓名,等于指定性别等:Xml代码&&&!-- 查询学生list,like姓名,=性别 --&&&&&select id=&getStudentListWhere& parameterType=&StudentEntity& resultMap=&studentResultMap&&&&&&&& SELECT * from STUDENT_TBL ST&&&&&&&&&&& WHERE&&&&&&&&&&& &if test=&studentName!=null and studentName!='' &&&&&&&&&&&&&&&& ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&studentSex!= null and studentSex!= '' &&&&&&&&&&&&&&&& AND ST.STUDENT_SEX = #{studentSex}&&&&&&&&&&& &/if&&&&&/select&&&&&如果上面例子,参数studentName为null或’’,则或导致此sql组合成“WHERE AND”之类的关键字多余的错误SQL。&这时我们可以使用where动态语句来解决。这个“where”标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以AND 或OR 开头的,则它会剔除掉。&上面例子修改为:Xml代码&&&!-- 查询学生list,like姓名,=性别 --&&&&&select id=&getStudentListWhere& parameterType=&StudentEntity& resultMap=&studentResultMap&&&&&&&& SELECT * from STUDENT_TBL ST&&&&&&& &where&&&&&&&&&&& &if test=&studentName!=null and studentName!='' &&&&&&&&&&&&&&&& ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&studentSex!= null and studentSex!= '' &&&&&&&&&&&&&&&& AND ST.STUDENT_SEX = #{studentSex}&&&&&&&&&&& &/if&&&&&&& &/where&&&&&/select&&&&3.2.2 set当在update语句中使用if标签时,如果前面的if没有执行,则或导致逗号多余错误。使用set标签可以将动态的配置SET 关键字,和剔除追加到条件末尾的任何不相关的逗号。没有使用if标签时,如果有一个参数为null,都会导致错误,如下示例:Xml代码&&&!-- 更新学生信息 --&&&&&update id=&updateStudent& parameterType=&StudentEntity&&&&&&&& UPDATE STUDENT_TBL&&&&&&&&&& SET STUDENT_TBL.STUDENT_NAME = #{studentName},&&&&&&&&&&&&&& STUDENT_TBL.STUDENT_SEX = #{studentSex},&&&&&&&&&&&&&& STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},&&&&&&&&&&&&&& STUDENT_TBL.CLASS_ID = #{classEntity.classID}&&&&&&&& WHERE STUDENT_TBL.STUDENT_ID = #{studentID};&&&&&/update&&&&&使用set+if标签修改后,如果某项为null则不进行更新,而是保持数据库原值。如下示例:Xml代码&&&!-- 更新学生信息 --&&&&&update id=&updateStudent& parameterType=&StudentEntity&&&&&&&& UPDATE STUDENT_TBL&&&&&&& &set&&&&&&&&&&& &if test=&studentName!=null and studentName!='' &&&&&&&&&&&&&&&& STUDENT_TBL.STUDENT_NAME = #{studentName},&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&studentSex!=null and studentSex!='' &&&&&&&&&&&&&&&& STUDENT_TBL.STUDENT_SEX = #{studentSex},&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&studentBirthday!=null &&&&&&&&&&&&&&&& STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&classEntity!=null and classEntity.classID!=null and classEntity.classID!='' &&&&&&&&&&&&&&&& STUDENT_TBL.CLASS_ID = #{classEntity.classID}&&&&&&&&&&& &/if&&&&&&& &/set&&&&&&& WHERE STUDENT_TBL.STUDENT_ID = #{studentID};&&&&&/update&&&&3.2.3 trim&trim是更灵活的去处多余关键字的标签,他可以实践where和set的效果。&where例子的等效trim语句:Xml代码&&&!-- 查询学生list,like姓名,=性别 --&&&&&select id=&getStudentListWhere& parameterType=&StudentEntity& resultMap=&studentResultMap&&&&&&&& SELECT * from STUDENT_TBL ST&&&&&&& &trim prefix=&WHERE& prefixOverrides=&AND|OR&&&&&&&&&&&& &if test=&studentName!=null and studentName!='' &&&&&&&&&&&&&&&& ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&studentSex!= null and studentSex!= '' &&&&&&&&&&&&&&&& AND ST.STUDENT_SEX = #{studentSex}&&&&&&&&&&& &/if&&&&&&& &/trim&&&&&/select&&&&set例子的等效trim语句:Xml代码&&&!-- 更新学生信息 --&&&&&update id=&updateStudent& parameterType=&StudentEntity&&&&&&&& UPDATE STUDENT_TBL&&&&&&& &trim prefix=&SET& suffixOverrides=&,&&&&&&&&&&&& &if test=&studentName!=null and studentName!='' &&&&&&&&&&&&&&&& STUDENT_TBL.STUDENT_NAME = #{studentName},&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&studentSex!=null and studentSex!='' &&&&&&&&&&&&&&&& STUDENT_TBL.STUDENT_SEX = #{studentSex},&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&studentBirthday!=null &&&&&&&&&&&&&&&& STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},&&&&&&&&&&& &/if&&&&&&&&&&& &if test=&classEntity!=null and classEntity.classID!=null and classEntity.classID!='' &&&&&&&&&&&&&&&& STUDENT_TBL.CLASS_ID = #{classEntity.classID}&&&&&&&&&&& &/if&&&&&&& &/trim&&&&&&& WHERE STUDENT_TBL.STUDENT_ID = #{studentID};&&&&&/update&&&&3.3 choose (when, otherwise)&&&&&&&& 有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。MyBatis提供了choose 元素,按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行 otherwise中的sql。类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。&&&&&&&& if是与(and)的关系,而choose是或(or)的关系。&&&&&&&& 例如下面例子,同样把所有可以限制的条件都写上,方面使用。选择条件顺序,when标签的从上到下的书写顺序:Xml代码&&&!-- 查询学生list,like姓名、或=性别、或=生日、或=班级,使用choose --&&&&&select id=&getStudentListChooseEntity& parameterType=&StudentEntity& resultMap=&studentResultMap&&&&&&&& SELECT * from STUDENT_TBL ST&&&&&&& &where&&&&&&&&&&& &choose&&&&&&&&&&&&&&& &when test=&studentName!=null and studentName!='' &&&&&&&&&&&&&&&&&&&&&&&& ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')&&&&&&&&&&&&&&& &/when&&&&&&&&&&&&&&& &when test=&studentSex!= null and studentSex!= '' &&&&&&&&&&&&&&&&&&&&&&&& AND ST.STUDENT_SEX = #{studentSex}&&&&&&&&&&&&&&& &/when&&&&&&&&&&&&&&& &when test=&studentBirthday!=null&&&&&&&&&&&&&&&&&&&& AND ST.STUDENT_BIRTHDAY = #{studentBirthday}&&&&&&&&&&&&&&& &/when&&&&&&&&&&&&&&& &when test=&classEntity!=null and classEntity.classID !=null and classEntity.classID!='' &&&&&&&&&&&&&&&&&&&& AND ST.CLASS_ID = #{classEntity.classID}&&&&&&&&&&&&&&& &/when&&&&&&&&&&&&&&& &otherwise&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &/otherwise&&&&&&&&&&& &/choose&&&&&&& &/where&&&&&/select&&&&3.4 foreach对于动态SQL 非常必须的,主是要迭代一个集合,通常是用于IN 条件。List 实例将使用“list”做为键,数组实例以“array” 做为键。&&3.4.1参数为list实例的写法:SQL写法:Xml代码&&&select id=&getStudentListByClassIDs& resultMap=&studentResultMap&&&&&&&& SELECT * FROM STUDENT_TBL ST&&&&&&&& WHERE ST.CLASS_ID IN&&&&&&&&& &foreach collection=&list& item=&classList&& open=&(& separator=&,& close=&)&&&&&&&&&&&& #{classList}&&&&&&&& &/foreach&&&&&&&&&/select&&&&接口的方法声明:Java代码&&public List&StudentEntity& getStudentListByClassIDs(List&String& classList);&&&public List&StudentEntity& getStudentListByClassIDs(List&String& classList); 测试代码,查询学生中,在000003这两个班级的学生:Java代码&&List&String& classList = new ArrayList&String&();&&&&classList.add(&&);&&&&classList.add(&&);&&&&&&&List&StudentEntity& studentList = studentMapper.getStudentListByClassIDs(classList);&&&&for( StudentEntity entityTemp : studentList){&&&&&&& System.out.println(entityTemp.toString());&&&&}&&&List&String& classList = new ArrayList&String&();classList.add(&&);classList.add(&&);List&StudentEntity& studentList = studentMapper.getStudentListByClassIDs(classList);for( StudentEntity entityTemp : studentList){&System.out.println(entityTemp.toString());}&3.4.2参数为Array实例的写法:SQL语句:Xml代码&&&select id=&getStudentListByClassIDs& resultMap=&studentResultMap&&&&&&&& SELECT * FROM STUDENT_TBL ST&&&&&&&& WHERE ST.CLASS_ID IN&&&&&&&&& &foreach collection=&array& item=&ids&& open=&(& separator=&,& close=&)&&&&&&&&&&&& #{ids}&&&&&&&& &/foreach&&&&&/select&&&&&接口的方法声明:Java代码&&public List&StudentEntity& getStudentListByClassIDs(String[] ids);&&&public List&StudentEntity& getStudentListByClassIDs(String[] ids);测试代码,查询学生中,在000003这两个班级的学生:Java代码&&String[] ids = new String[2];&&&&ids[0] = &&;&&&&ids[1] = &&;&&&&List&StudentEntity& studentList = studentMapper.getStudentListByClassIDs(ids);&&&&for( StudentEntity entityTemp : studentList){&&&&&&& System.out.println(entityTemp.toString());&&&&}&
最新教程周点击榜
微信扫一扫今日(8日)下午,据韩国演艺圈相关人士透露:“歌手兼音乐制作人Sleepy与李国主将以新夫妇的形式加入《我们结婚了4》,从下周开始进行录制”。
Sleepy与李国主在《我独自生活》中就配合默契,受到众多瞩目。在上周的《Radio Star》两人又上演暧昧氛围,当时Sleepy说:“李国主改变了我,以前从没有跟我说‘不要这样生活’这种话的人,正如所说的同类为朋,她对我来说就是这样的人,我改变了生活方式,现在开始正常健康地吃饭”。而李国主强调说:“只是想要照顾Sleepy,并不心动”。
而两人还是以夫妇身份参加《我结》,虽然只是假想夫妇,但是能够延续《我独自生活》中两人的默契,对粉丝与观众来说是一件十分值得期待的事。
另一个关于《我们结婚了》的消息,Eric Nam&Solar夫妇即将下车。
《我结》相关负责人表示:“Eric Nam&Solar在结束明日(9日)的录制之后将从《我结》下车”。
今年4月,Eric Nam&Solar两人开始了《我结》之旅,幽默感满满的Solar与温柔细心的Eric Nam之间产生的化学反应让观众们印象深刻,对两人十分喜爱。
很可惜,近8个月的录制后两人即将下车,明日两人也将迎来最后的分别。
在Eric Nam&Solar夫妇下车后,新加入的Sleepy&李国主将会给观众带来怎样的惊喜呢?
更多精彩内容在这里1.
文章出自微信公众号
:hanguome2day
新浪微博@韩国me2day专属帐号
手机微信扫描上方二维码进行订阅
韩国me2day微信公众号最新文章
精品号随机推荐
最值得关注的微信公众号
娱乐看天下,360度全方位立体发布文娱圈猛料、花边新闻。每日“八卦”最新资讯。
野史君一一道来,让你看到不一样的历史,让你发现原来历史可以这样看。
带你去领悟那美妙的世界
搜罗更多劲爆事件,娱乐花边新闻,最受关注的图片更多精彩敬请关注!八卦娱乐头条!!!
提倡国人品质生活,选择有机生态的生活方式,健康,养生,休闲,品味,修炼自己,温暖他人!
每日新鲜美女推送,分享优雅女神高清图片
想了解有关科技、趣味、创意和新奇的产品吗,想寻找创意小礼品和新鲜玩意吗?
喜欢电影朋友关注我吧,我们一起学习交流
微信内人气最旺的星座迷你宝典!分享懂你的星座。
环球旅行,带你看遍全球美景。让你了解旅行的意义。【要求:每天快照、收录与本站相当 本站不定期检查链接,不合要求将转至内页,恕不通知。
全影结婚网:
客服热线: 咨询热线:400-
版权所有:全影网络有限公司 传真: 邮箱:备案号:鲁ICP备号 Copyright &
版权所有 不得转载}

我要回帖

更多关于 城满财富 请问资金池 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信