MyBatis学习 之动态SQL语句
>" '' =! xeStneduts dna llun =! xeStneduts"=tset fi< >" llun=! emaNtneduts"=tset fi< TS LBT_TNEDUTS MORF ,OTOHP_TNEDUTS.TS ,EMAN_TNEDUTS.TS ,XES_TNEDUTS.TS ,DI_TNEDUTS.TS TCELES ,DI_SSALC.TS DI_ECALP.TS EREHW
;))(gnirtSot.e(nltnirp.tuo.metsyS
}
}
;)ytitne(fi_tsiLtnedutSteg.reppaMlqScimanyd.siht = tsil >ytitnEtnedutS<tsiL ;)"10000007"(dIecalPtes.ytitne// ;)"10000002"(dIssalCtes.ytitne
。件条断 判行执则空为不果如�断判行进均性属的有所中类体实将。ytitnEtnedutS 类体实为数参 。性活灵加增�断判的件条 此行进不就们我�串符字空于等或 llun 为值果如�断判行进先句语 lqs 态动 fi 用使们我时此 。空为果结询查或错报能可很句语此�llun 为 xeStneduts 或 em aNtneduts 果如时此是但
签标 yeKtceles 1.3
。 �TACNOC 数函接链串符字如例�数函和法语 lqsym 用采均文下 。lqs 态动用使以可们我时这。dI 成生数函的 lqsym、列序的 elcarO 用使。息信 的部全出查是�时空为数参要需们我许也�的空是能可很果结的出询查时此�空是数参的入 传果如时询查件条一某按如例�断判全安些一要需�中件条 erehw 句语 lqs�候时些有
�为改修子例面上 。掉除剔会它则�的头 开 RO 或 DNA 以是容内的回返签标果如 �外此 。 ’erehw‘ 个一入插就它 �话的值回返有中签 标的含包它果如道知会签标”erehw“个这。决解来句语态动 erehw 用使以可们我时这 。LQS 误错的余多字键关”DNA EREHW“导接直会则 �断判的列 EMAN_TNEDUTS 行进会不将�llun 为 em aNtneduts 数参�子例面上果如
TS LBT_TNEDUTS morf * TCELES
�询查的通普很个一看先首。例为询查以们我�中句语 lqs 的型类多许在用可签标 fi
码代 L M X
签标 fi 2.3
ELBALLAC 应响 tnemetatSelballaC 和 tnemetatSderaperP DERAPERP � tnemetatS 应对 �式形句语的 ELBALLAC TNEMETATS 和 DERAPERP�TNEMETATS 持支 sitaByM RETFA EROFEB 。句语 yeKtceles 行 运 再 句 语 tresni 行 运 先 就 � RETFA � 2 �句语 tresni 行执再�ytreporPyek 置 设 后 然 � 键 主 择 选 先 会 � EROFEB � 1 。性属的置设要需果结成生句语 yeKtceles 述描
句语 LQS 态动、三
>"ytitnEtnedutS.ledom.atad.reganam.tneduts.gnimil"=epyTretemarap "ytitnEtneduts_paMtluser"=paMtluser "fi_tsiLtnedutSteg"=di tceles< >-- 件条erehw为作性属的空为不类体实将 - )数参断判(fi - tceles 2 --!< 码代 L M X
{ )tsil : e ytitnEtnedutS( rof
tS.ledom.atad.reganam.tneduts.gnimil"=epyTretemarap "tes_fi_tnedutSetadpu"=di etadpu< >-- 新更性属的空为不类体实将 - )数参断判(tes/fi 4 --!<
{ )(1_2_tset_tceles diov cilbup
。断判中 erehw 在不以可就值赋去不反相�件条个这 erehw 会就值的 应相上附要需只�件条个那制限要需们我�类体实的样这个一 wen �活灵较比时用使
>tceles/< }RAHCRAV=epyTcbdj ,dItneduts{# = DI_TNEDUTS.TS DNA }RAHCRAV=epyTcbdj ,dIecalp.ytitnEecalp{# = DI_ECALP.TS DNA }RAHCRAV=epyTcbdj ,dIecalp{# = DI_ECALP.TS DNA }RAHCRAV=epyTcbdj ,dIssalc.ytitnEssalc{# = DI_SSALC.TS DNA }RAHCRAV=epyTcbdj ,dIssalc{# = DI_SSALC.TS DNA }ETAD=epyTcbdj ,yadhtriBtneduts{# = YADHTRIB_TNEDUTS.TS DNA }REGETNI=epyTcbdj ,xeStneduts{# = XES_TNEDUTS.TS DNA >fi/< >fi/< >fi/< >fi/< >fi/< >fi/< >fi/< >fi/< >" '' =! dItneduts dna llun =! dItneduts"=tset fi<
;)1(xeStnedutStes.ytitne ;)llun(emaNtnedutStes.ytitne ;)(ytitnEtnedutS wen = ytitne ytitnEtnedutS { )(1_2_tset_tceles diov cilbup tseT@ 码代 a v a J
断判件条的 erehw + fi 3.3
;))"82-50-5891"(esrap.litUetaD(yadhtriBtnedutStes.ytitne ;)1(xeStnedutStes.ytitne ;)"好你明黎"(emaNtnedutStes.ytitne
;))"82-50-5891"(esrap.litUetaD(yadhtriBtnedutStes.ytitne ;)(ytitnEtnedutS wen = ytitne ytitnEtnedutS ;)""(emaNtnedutStes.ytitne tseT@ 码代 a v a J ;)1(xeStnedutStes.ytitne
;)(ytitnEtnedutS wen = ytitne ytitnEtnedutS
yek 成生动自取获和�法方口接用调
码代 a v a J
>tresni/< )}dIecalp{# ,}dIssalc{# abi.ehcapa.gro=reldnaHepyt ,BOLB=epyTcbdj ,][etyb=epyTavaj ,otohPtneduts{# ,}yadhtriBtneduts{# ,}xeStneduts{# ,}emaNtneduts{# ,}dItneduts{#( SEULAV )DI_ECALP ,DI_SSALC ,OTOHP_TNEDUTS ,YADHTRIB_TNEDUTS ,XES_TNEDUTS ,EMAN_TNEDUTS ,DI_TNEDUTS(LBT_TNEDUTS OTNI TRESNI >yeKtceles/< )'tneduts'(lavtxen tceles >"EROFEB"=redro "gnirtS"=epyTtluser "dItneduts"=ytreporPyek yeKtceles< >"dItneduts"=ytreporPyek tS.ledom.atad.reganam.tneduts.gnimil"=epyTretemarap "yeKotuAtnedutSetaerc"=di tresni< >--键主动自 生学入插 --!< 码代 L M X
alp.ytitnEecalp dna llun =! dIecalp.ytitnEecalp dna llun =! ytitnEecalp"=tset fi< >" '' =! dIecalp dna llun =! dIecalp"=tset fi<
salc.ytitnEssalc dna llun=! dIssalc.ytitnEssalc dna llun =! ytitnEssalc"=tset fi< >" '' =!dIssalc dna llun =! dIssalc"=tset fi< >" llun =! yadhtriBtneduts"=tset fi<
>tcelesdj , emaNtneduts{# ,'%'(TACNOC(TACNOC EKIL EMAN_TNEDUTS.TS EREHW
}REGETNI=epyTcbdj ,xeStneduts{# = XES_TNEDUTS.TS DNA
Rtneduts"=paMtluser "ytitnEtnedutS"=epyTretemarap "emaNekiLtsiLtnedutSteg"=di tceles< >-- 名姓ekil�tsil生学询查.1—!<
Mybatis中动态SQL,if,where,foreach的使用教程详解
Mybatis中动态SQL,if,where,foreach的使⽤教程详解MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们⽅便的在SQL语句中实现某些逻辑。
MyBatis中⽤于实现动态SQL的元素主要有:ifchoose(when,otherwise)trimwheresetforeachmybatis核⼼对sql语句进⾏灵活操作,通过表达式进⾏判断,对sql进⾏灵活拼接、组装。
1、statement中直接定义使⽤动态SQL:在statement中利⽤if 和 where 条件组合达到我们的需求,通过⼀个例⼦来说明:原SQL语句:<select id="findUserByUserQuveryVo" parameterType ="UserQueryVo" resultType="UserCustom">select * from userwhere username = #{ername} and sex = #{userCustom.sex}</select>现在需求是,如果返回值UserCustom为空或者UserCustom中的属性值为空的话(在这⾥就是ername或者userCustom.sex)为空的话我们怎么进⾏灵活的处理是程序不报异常。
做法利⽤if和where判断进⾏SQL拼接。
<select id="findUserByUserQuveryVo" parameterType ="UserQueryVo" resultType="UserCustom">select * from user<where><if test="userCustom != null"><if test="ername != null and ername != ''"><!-- 注意and不能⼤写 -->and username = #{ername}</if><if test="userCustom.sex != null and userCustom.sex != ''">and sex = #{userCustom.sex}</if></if></where></select>有时候我们经常使⽤where 1=1这条语句来处理第⼀条拼接语句,我们可以使⽤< where > < where />来同样实现这⼀功能。
mybatis使用动态sql模糊查询写法
mybatis使用动态sql模糊查询写法1. 引言1.1 概述本文旨在介绍使用MyBatis进行动态SQL模糊查询的写法。
随着互联网技术的发展和数据量的增加,对数据库的模糊查询需求也越来越多。
而动态SQL是MyBatis框架提供的一种强大的查询特性,可以根据不同条件生成相应的SQL 语句,非常适用于模糊查询场景。
1.2 文章结构本文共包括五个部分。
首先,我们会简要介绍MyBatis动态SQL的概念及其作用;接着,详细介绍了动态SQL语句的分类。
然后,重点围绕动态SQL模糊查询展开讲解,包括使用like关键字和concat函数进行模糊查询两种常见写法。
之后,在示例与解析部分,我们将分别给出三个实际案例来演示如何使用动态SQL进行模糊查询,并进行详尽解析。
最后,我们将在结论与总结部分回顾文章内容,并对MyBatis动态SQL的优势和应用场景进行总结。
1.3 目的通过本文,读者将能够全面掌握使用MyBatis进行动态SQL模糊查询的写法,并了解到其在实际开发中的应用。
同时,本文还旨在引导读者深入了解MyBatis 框架的核心特性和灵活查询的技巧,从而提升数据库模糊查询的效率和准确性。
对于开发人员而言,这将是一篇实用且具有指导意义的文章。
2. MyBatis动态SQL概述2.1 MyBatis简介MyBatis是一个开源的持久化框架,它可以将数据库和Java对象之间的映射关系进行配置,并通过XML或注解方式实现对数据库的访问。
MyBatis提供了丰富的功能和灵活性,使得开发者能够更加方便地进行数据持久化操作。
2.2 动态SQL的作用动态SQL是MyBatis中一项非常重要的特性。
它允许我们根据不同条件来动态生成SQL语句,在遇到不同情况时执行不同的数据库操作。
这样可以大大提升程序的灵活性和可维护性。
2.3 动态SQL语句的分类在MyBatis中,动态SQL语句主要分为四类:- if判断:通过if标签来判断某个条件是否成立,根据条件结果来决定是否包含某部分SQL语句。
mybatis 动态sql if用法
电子合同存证服务合同甲方(以下简称“甲方”):公司名称:法定代表人姓名:注册地址:乙方(以下简称“乙方”):公司名称:法定代表人姓名:注册地址:鉴于甲方拥有一定的电子合同存证服务能力,乙方希望委托甲方为其提供电子合同存证服务,各方经友好协商,达成如下协议:第一条服务内容1.1甲方应根据乙方的需求,为其提供电子合同存证服务,具体服务内容如下:(1)检验、验证和签署电子合同的真实性和完整性;(2)为电子合同提供可追溯的时间戳;(3)提供电子合同存证的相关证明文件;(4)确保电子合同数据的安全性和保密性;(6)其他甲方与乙方约定的服务。
1.2甲方应按照服务内容及时、准确地向乙方提供相关服务。
乙方应根据甲方的要求提供相应的合同、协议等信息,以便甲方进行存证操作。
1.3乙方委托甲方存证的电子合同应符合国家法律法规规定的合法合同,甲方不对电子合同的内容、效力和合法性承担责任。
第二条服务费用及支付方式2.1乙方向甲方支付的服务费用为每份电子合同存证服务收费XXXX元。
2.2服务费用的支付方式为:(1)乙方应在甲方提供存证服务后的7个工作日内,将应付费用以现金/银行转账/电汇等方式支付至甲方指定的账户;(2)乙方应提供相应的付款凭证给予甲方,以便甲方核查。
2.3如乙方逾期未支付服务费用,甲方有权采取如下措施之一或多项:(1)中止电子合同存证服务;(2)要求乙方支付延迟履行的违约金;(3)要求乙方支付逾期履行的滞纳金;(4)追究乙方的违约责任。
第三条保密义务3.1甲方应对乙方委托存证的电子合同数据严格保密,不得泄露、篡改或非法使用。
3.2甲方不得将乙方的电子合同数据提供给任何第三方,除非取得乙方书面同意或法律法规另有规定。
3.3乙方如发现甲方存在泄露、篡改或非法使用电子合同数据等违法违规行为,有权要求甲方承担相应的法律责任,并取得相应的赔偿。
第四条风险责任4.1由于电子合同存证服务所涉及的信息传输和数据存储,可能面临各种风险,包括但不限于网络故障、黑客攻击、系统崩溃等。
MyBatis动态SQL第一篇之实现多条件查询(if、where、trim标签)
MyBatis动态SQL第⼀篇之实现多条件查询(if、where、trim标签)⼀、动态SQL概述以前在使⽤JDBC操作数据时,如果查询条件特别多,将条件串联成SQL字符串是⼀件痛苦的事情。
通常的解决⽅法是写很多的if-else条件语句对字符串进⾏拼接,并确保不能忘了空格或在字段的最后省略逗号。
MyBatis使⽤动态SQL来改善这种情形,动态SQL是基于OGNL的表达式,可⽅便我们在SQL语句中实现某些逻辑。
⽤于实现动态SQL的元素如下。
if:利⽤if实现简单的条件选择choose(when,otherwise):相当于Java中的switch语句,通常与when和otherwise搭配使⽤set:解决动态更新语句trim:可以灵活的去除多余的关键字foreach:迭代⼀个集合,通常⽤于in条件⼆、if⽤法在查询条件不是很多并且较为固定的情况下,最好的解决⽅案是采⽤多参数直接⼊参的⽅式,这样代码⽐较清晰,可读性强。
如下public interface UserMappper{public List<User> getUserList(@Param("userName") String userName,@Param("userRole") Integer roleId);}<select id="getUserList" resultMap="userList">select u.*, r.roleName from smbms_user u, smbms_role rwhere erName like connect ('%', #{userName}, '%')and erRole=#{userRole} and erRole=r.id</select>在上述代码中,参数使⽤了@Param注解,并将参数roleId重命名为userRole测试上述代码,如下在两个条件都给出的情况下,如String userName="孙"; Integer roleId=3,此时会输出正确结果;若传⼊的⽤户⾓⾊roleId为空,即只按⽤户名称进⾏模糊查询,如String userName="孙"; Integer roleId=null,此时输出的结果不满⾜需求:没有输⼊⽤户⾓⾊的情况下,只根据⽤户名称进⾏模糊查询的需求;若传⼊的⽤户⽤户名称userName为“”(空字符串),roleId有值(roleId=3),此时结果是正确的;针对上述这种某字段⽤户输⼊可能为空的情况,我们使⽤动态SQL的if元素来实现多条件查询,如下<select id="getUserList" resultMap="userList">select u.*, r.roleName from smbms_user u, smbms_role r where erRole=r.id<if test="userRole != null"> and erRole = #{userRole}</if><if test="userName != null and userName != ''"> and erName like concat('%', #{userName}, '%')</if></select>在上述代码中,利⽤if元素实现简单的条件判断,if元素的test属性表⽰进⼊if内需要满⾜的条件。
16Mybatis_动态sql_if判断
16Mybatis_动态sql_if判断mybatis的核⼼就是动态sql.什么是动态sql:对sql语句进⾏灵活操作,通过表达式进⾏判断,对sql进⾏灵活拼接、组装。
这篇⽂章讲解sql中的if语句。
它可以对查询条件进⾏判断,如果输⼊参数不为空才进⾏查询条件的拼接。
这篇⽂章的核⼼就是下⾯的这段代码。
<!--<where></where>相当于sql语句中的where关键字。
这个标签还有⼀个功能就是⾃动会去掉第⼀个and.,⽐如下⾯两句sql代码,如果第⼀个满⾜的那么就会去掉and这个关键字。
--><where><if test="userCustom!=null"><if test="userCustom.sex!=null and userCustom.sex!=''">and user.sex= #{userCustom.sex}</if><if test="ername!=null and ername!=''">and ername=#{ername}</if></if></where>下⾯给出u具体案例:案例代码结构如下:除了userMapper.xml和Mybatis_mappertest.java要修改外,其他的代码都不⽤变。
userMapper.xml代码如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><!-- nanmespace:命名空间。
Mybatis中的update动态SQL语句
Mybatis中的update动态SQL语句Mybatis中的CRUD操作(增删改查)中,简单的SQL操作⽐较直观,如查找操作:<select id="findBySrcId" resultMap="entityRelationResultMap">SELECT * FROM ENTITY_RELATION WHERE SRC_ID=#{srcId}</select>其中id对应同名java⽂件中的⽅法,resultMap对应的⾃定义的数据类型(当使⽤java⾃带类型就更容易了,⽐如ng.String之类的)。
但是涉及到更新操作时,可能不需要对所有字段更新,这时不需要更新的字段需要保持原字段信息,当使⽤以下信息就会报错:<update id="updateOne" parameterType="com.inspur.search.data.EntityRelation">update ENTITY_RELATION SET SRC_ID=#{srcId},SRC_TYPE=#{srcType},DEST_ID=#{destId},DEST_TYPE=#{destType},REL_TYPE=#{relType},STATUS=#{status},SN_ID=#{snId}where id=#{id}</update>因为不更新的字段,会被传递null到SQL中,引起异常。
这时就需要进⾏动态SQL拼接,如下,使⽤trim就是为了删掉最后字段的“,”。
主要不⽤单独写SET了,因为set被包含在trim中了:<update id="updateOne" parameterType="com.inspur.search.data.EntityRelation">UPDATE ENTITY_RELATION<trim prefix="set" suffixOverrides=","><if test="srcId!=null">SRC_ID=#{srcId},</if><if test="srcType!=null">SRC_TYPE=#{srcType},</if><if test="destId!=null">DEST_ID=#{destId},</if><if test="destType!=null">DEST_TYPE=#{destType},</if><if test="relType!=null">REL_TYPE=#{relType},</if><if test="status!=null">STATUS=#{status},</if><if test="snId!=null">SN_ID=#{snId},</if></trim>WHERE id=#{id}</update>。
MyBatis动态SQL————MyBatis动态SQL标签的用法
MyBatis动态SQL————MyBatis动态SQL标签的⽤法1.MyBatis动态SQLMyBatis 的强⼤特性之⼀便是它的动态 SQL,即拼接SQL字符串。
如果你有使⽤ JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。
拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。
利⽤动态 SQL 这⼀特性可以彻底摆脱这种痛苦。
通常使⽤动态 SQL 不可能是独⽴的⼀部分,MyBatis 当然使⽤⼀种强⼤的动态 SQL 语⾔来改进这种情形,这种语⾔可以被⽤在任意的 SQL 映射语句中。
动态 SQL 元素和使⽤ JSTL 或其他类似基于 XML 的⽂本处理器相似。
在 MyBatis 之前的版本中,有很多的元素需要来了解。
MyBatis 3 ⼤⼤提升了它们,现在⽤不到原先⼀半的元素就可以了。
MyBatis 采⽤功能强⼤的基于 OGNL 的表达式来消除其他元素。
2.动态SQL标签:if,choose (when, otherwise),trim (where, set),foreach2.1 if标签:直接上代码<select id="queryByIdAndTitle"resultType="Blog">SELECT * FROM BLOGWHERE 1=1<if test="id!= null and title!=null">AND id=#{id} and title=#{title}</if></select>注:if标签⼀般⽤于⾮空验证,如上例,若id为空,if标签⾥的代码,将不会执⾏,反之,则会执⾏。
2.2 choose(when,otherwise)标签:直接上代码<select id="queryBy"resultType="Blog">SELECT * FROM BLOG WHERE 1=1<choose><when test="title != null">AND title like #{title}</when><otherwise>AND id= 1</otherwise></choose></select>注:choose(when,otherwise)标签相当于switch(case,default) ,如上例,若title 为空,when标签⾥的代码,将不会执⾏,默认执⾏otherwise 标签⾥⾯的代码。
MyBatis学习-02参数传递和动态sql拼接
MyBatis学习-02参数传递和动态sql拼接MyBatis参数传递1. 单个参数:mybatis 不会做特殊处理"#{参数名/任意名}:取出参数值"2. 多个参数:多个参数会被封装成⼀个 map,key:param1, .... paramN,或者参数的索引也可以,#{}就是从 map 中获取指定的key的值【命名参数】:明确指定封装参数时map的key;语法格式:@Param(“参数名”),多个参数会被封装成⼀个map;key:使⽤@Param注解指定的值value:参数值"#{指定的 key}取出对应的参数值"3. 传⼊的是Java Bean、POJO、entity时如果传⼊参数正好是我们业务逻辑的数据模型,mybatis会把该对象的属性作为封装的map中的key,#{key}取出map中对应的值4. map集合(多表⼏个字段)mybatis的sql映射语句中的#{}需要更具传⼊的map集合中的key进⾏取值5. TO 或 VO 查询多个如果多个参数不是业务模型中的数据,但是经常要使⽤,推荐编写⼀个TO(Transfer Object)或VO(View Object)数据传输对象,mybatis对其处理⽅式类似传⼊⼀个entity实体类6. 其他类型6.1 当传⼊多个参数时,有的参数使⽤@Param注解修饰,有的没有,怎么取值?// 例如:public User getUser(@Param("id") Integer id, String userName);/*取值:id ====> #{id} 或 #{param1}userName =====> #{param2}*/6.2 传⼊多个参数,且其中⼀个参数为实体类并为@Param注解修饰时//例如:public Employee getEmployee(Integer id, @Param("e") Employee employee);/*取值:id =====> #{param1}employee =====> #{erName} 或 #{erName}*/6.3 如果传⼊的是Collection(List、Set)类型或者是数组,mybatis会进⾏特殊处理,会将传⼊list或者数组封装在map中。
MyBatis之动态SQL:if、choose、when、otherwise、where、。。。
MyBatis之动态SQL:if、choose、when、otherwise、where、。
动态 SQL 是 MyBatis 的强⼤特性之⼀。
如果你使⽤过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后⼀个列名的逗号。
利⽤动态 SQL,可以彻底摆脱这种痛苦。
使⽤动态 SQL 并⾮⼀件易事,但借助可⽤于任何 SQL 映射语句中的强⼤的动态 SQL 语⾔,MyBatis 显著地提升了这⼀特性的易⽤性。
如果你之前⽤过 JSTL 或任何基于类 XML 语⾔的⽂本处理器,你对动态 SQL 元素可能会感觉似曾相识。
在 MyBatis 之前的版本中,需要花时间了解⼤量的元素。
借助功能强⼤的基于 OGNL 的表达式,MyBatis 3 替换了之前的⼤部分元素,⼤⼤精简了元素种类,现在要学习的元素种类⽐原来的⼀半还要少。
⼀、if —— 只要为true就加上后⾯的sql 使⽤动态 SQL 最常见情景是根据条件包含 where ⼦句的⼀部分。
⽐如:<select id="findActiveBlogWithTitleLike" resultType="Blog">SELECT * FROM BLOGWHERE state = ‘ACTIVE’<if test="title != null">AND title like #{title}</if></select> 这条语句提供了可选的查找⽂本功能。
如果不传⼊ “title”,那么所有处于 “ACTIVE” 状态的 BLOG 都会返回;如果传⼊了 “title” 参数,那么就会对 “title” ⼀列进⾏模糊查找并返回对应的 BLOG 结果(细⼼的读者可能会发现,“title” 的参数值需要包含查找掩码或通配符字符)。
MyBatis动态Sql语句
MyBatis动态Sql语句MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法MyBatis中用于实现动态SQL的元素主要有:ifchoose(when,otherwise)trimwheresetforeach1、if对属性进行判断,如果不为空则执行判断条件[html] view plain copy<select id="selectByCriteria" parameterType="com.mucfc.dto.Student" resultMap="BaseResultMap">select * from t_studentwhere<if test="stuId != null and stuId !=''">STU_ID = #{stuId}</if><if test="stuName != null and stuName !=''" >and STU_NAME = #{stuName}</if><if test="stuClass != null and stuClass !=''">and STU_CLASS = #{stuClass}</if><if test="stuSex != null and stuSex !=''">and STU_SEX=#{stuSex}</if><if test="stuAge != null and stuAge !=''">and STU_AGE=#{stuAge}</if></select>来看看结果:这是从web页面输入的参数这是输出的结果这是打印出来的Sql语句从结果可以看出,只有在条件不为空的时候,属性才会赋值。
