项目中常见的mybatis xml语法

本文根据本人项目中实际所见频率排出顺序,持续更新调整,新手向,欢迎同学们指出问题

目录

1.<if  ></if>

2.<![CDATA[]]>

3.<foreach > </foreach>

4.<include>

5. <sql id=""></sql> 


 

1.<if  ></if>

如果if中条件的条件成立,则sql会拼加上<if ></if>里面的部分,如果在where后不能直接拼,需要加一个 1=1 也就是true

 <select id="selectUseIf" parameterType="com.soft.test.model.DynamicTestModel" resultMap="userMap">
        select * from t_user where 1=1
        <if test='id != null'>
            and id=#{id}
        </if>
 </select>

 

2.<![CDATA[]]>

<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容“<”
  此标记用于xml文档中,我们先来看看使用转义符的情况。我们知道,在xml中,”<””>””&”等字符是不能直接存入的,否则xml语法检查时会报错,如果想在xml中使用这些符号,必须将其转义为实体,如”&lt;””&gt;””&amp;”,这样才能保存进xml文档。
  在使用程序读取的时候,解析器会自动将这些实体转换回”<””>””&”。举个例子:
  <age> age < 30 </age>
  上面这种写法会报错,应该这样写
  <age> age &lt; 30 </age>

举例:查找时间段

<if test="infoTemplateAll.createTimeEnd != null">
    <![CDATA[ AND create_time <= #{infoTemplateAll.createTimeEnd}]]>
</if>

 

3.<foreach > </foreach>

foreach元素的属性主要有item,index,collection,open,separator,close。

  • item:集合中元素迭代时的别名,该参数为必选。
  • index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选
  • open:foreach代码的开始符号,一般是(和close=")"合用。常用在in(),values()时。该参数可选
  • separator:元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。
  • close: foreach代码的关闭符号,一般是)和open="("合用。常用在in(),values()时。该参数可选。
  • collection: 要做foreach的对象,作为入参时,List对象默认用"list"代替作为键,数组对象有"array"代替作为键,Map对象没有默认的键。当然在作为入参时可以使用@Param("keyName")来设置键,设置keyName后,list,array将会失效。 除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:如果User有属性List ids。入参是User对象,那么这个collection = "ids".如果User有属性Ids ids;其中Ids是个对象,Ids有个属性List id;入参是User对象,那么collection = "ids.id"

举例

<if test="infoTemplateAll.templateTypes != null and infoTemplateAll.templateTypes.size() > 0">
	AND template_type IN
 	<foreach collection="infoTemplateAll.templateTypes" separator="," index="index" item="item"     
 		open="("  close=")">
        #{infoTemplateAll.templateTypes[${index}]}
    </foreach>
 </if>

 

4.<include>

MyBatis中sql标签定义SQL片段,
include标签引用,可以复用SQL片段

sql标签中id属性对应include标签中的refid属性。通过include标签将sql片段和原sql片段进行拼接成一个完整的sql语句进行执行。

<sql id="sqlid">
    res_type_id,res_type
</sql>

<select id="selectbyId" resultType="com.property.vo.PubResTypeVO">
    select
    <include refid="sqlid"/>
    from pub_res_type
</select>
  • 引用公用的sql片段
<include refid="namespace.sqlid"/>

include标签中也可以用property标签,用以指定自定义属性。在sql标签中通过${}取出对应的属性值。

<select id="queryPubResType" parameterType="com.property.vo.PubResTypeVO" resultMap="PubResTypeList">
    select  a.res_type_id,
    <include refid="com.common.dao.FunctionDao.SF_GET_LNG_RES_TYPE">
        <property name="AI_RES_TYPE_ID" value="a.res_type_id"/>
        <property name="lng" value="#{lngId}"/>
        <property name="female" value="'女'"/>
    </include> as res_type
    from    pub_res_type a
</select>

使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。

如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

resultMap:适合使用返回值是自定义实体类的情况

resultType:适合使用返回值得数据类型是非自定义的,即jdk的提供的类型

 

5.<sql id=""></sql> 

MyBatis中sql标签定义SQL片段,
include标签引用,可以复用SQL片段

<sql id="sqlid">
    res_type_id,res_type
</sql>

借鉴博文

https://www.cnblogs.com/yhgn/p/11187304.html

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis XML,有几种方法可以实现模糊查询(like语句)。其常见的三种写法如下: 方法1:使用concat函数和trim元素拼接字符串,在where子句拼接like语句。示例代码如下: ``` <where> <trim suffixOverrides="," > <if test="id != null and id != ''" > and id = #{id} </if> <if test="name != null and name != ''" > and name like concat('%',#{name},'%') </if> </trim> </where> ``` 方法2:使用`${}`语法,在where子句直接拼接like语句。示例代码如下: ``` <where> <if test="examTypeName!=null and examTypeName!=''"> and exam_type_name like '%${examTypeName}%' </if> </where> ``` 方法3:使用`#{}`语法,在where子句拼接like语句。示例代码如下: ``` <where> <if test="examTypeName!=null and examTypeName!=''"> and exam_type_name like '%'#{examTypeName}"'%' </if> </where> ``` 这些方法可以根据具体的需求选择使用。需要注意的是,使用`${}`语法可能存在SQL注入的风险,因此建议在用户输入的值上使用`#{}`语法来防止注入。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ezorm:一个易于使用的Golang ORM工具,支持MyBatis-Like XML模板SQL](https://download.csdn.net/download/weixin_42168341/18777901)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [mybatis xml常用写法-使用like关键字](https://blog.csdn.net/evasnowind/article/details/109167935)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [毕设项目:基于springboot+MyBatis实现的恋家房产平台](https://download.csdn.net/download/qq_35831906/88227269)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值