mybatis中动态sql常用的标签及用法,动态sql的where标签
目录
关于在哪里标签用法使用在哪里标签及一些注意点在哪里标签简单使用
关于where标签用法
xml映射文件部分内容:
SELECT id= selectif condition 结果类型= com。黑克图。测试包。POJO。产品从产品中选择产品标识产品标识,供应商标识产品标识,产品名称产品名称,产品desc产品desc,如果测试=产品标识!=空和普罗迪!= 和prod _ id=# { prodId }/if if test= prodName!=空和prodName!= 和prod _ name=# { prodName }/if/where/select映射文件中的在哪里标签可以过滤掉条件语句中的第一个和或或者关键字。以上结构化查询语言当普罗迪!=空时会被框架的在哪里标签去除掉多余的和关键字,生成的结构化查询语言如下:
挑选产品标识产品标识,供应商标识供应商标识,产品名称产品名称,产品表名产品描述产品在哪里产品标识=?而prod_name=?注:在哪标签只能去除第一个条件中出现的前置和关键字。像以下情况,在哪里就无能为力了:
SELECT id= selectif condition 结果类型= com。黑克图。测试包。POJO。产品从产品中选择产品标识产品标识,供应商标识产品标识,产品名称产品名称,产品desc产品desc,如果测试=产品标识!=空和普罗迪!= prod_id=#{prodId}和/if if test=prodName!=空和prodName!= prod_name=#{prodName}和/if /where/selectMybatis会把次结构化查询语言语句拼接成:
挑选产品标识产品标识,供应商标识供应商标识,产品名称产品名称,产品表名产品描述产品在哪里产品标识=?而prod_name=?在哪里无法去除掉后面的和关键字,此时结构化查询语言语句出现语法错误。
要想解决以上在哪里标签无法处理的问题,可以考虑使用整齐标签。
使用where标签及一些注意点
where标签简单使用
自己习惯性配上映射对象这个大家根据自己习惯去写,可以直接使用地图去接返回参数
//返回对象映射结果映射ID=结果映射 type= com。XXX。根。 CONN root 结果列= CONN _ ID 属性= connId JDBC类型= NUMERIC /结果列= CONN _ NO 属性= VARCHAR /结果列= STA _ ID 属性= staId JDBC类型= NUMERIC /g
t; <result column="RUN_MODE" property="runMode" jdbcType="VARCHAR"/> <result column="SRV_ID" property="srvId" jdbcType="NUMERIC"/> <result column="LINE_ID" property="lineId" jdbcType="NUMERIC"/></resultMap>
// 此处为使用 where相关SQL<select id="listConnection" parameterType="java.util.Map" resultMap="ResultMap"> SELECT A.CONN_ID, A.CONN_NO, A.STA_ID, A.RUN_MODE, A.SRV_ID, A.LINE_ID FROM CONN A where 1=1 <if test="srvId!= null" > AND SRV_ID= #{srvId,jdbcType=DECIMAL} </if></select>
jdbcType 加上可以避免在映射时出现某些错误
jdbc出现的需求及 解决什么问题:当mybatis执行mapping文件时,如果某个映射的参数为空,无法确定他的类型时需要用到jdbcType来确定类型。
// 此处为使用 where 标签SQL<select id="listConnection" parameterType="java.util.Map" resultMap="ResultMap"> SELECT A.CONN_ID, A.CONN_NO, A.STA_ID, A.RUN_MODE, A.SRV_ID, A.LINE_ID FROM CONN A <where> <if test="srvId!= null"> A.SRV_ID= #{srvId,jdbcType=DECIMAL} </if> <if test="runMode!= null"> AND A.RUN_MODE= #{runMode,jdbcType=VARCHAR} </if> </where></select>
到这里大家可以看到where标签使用和不适用的一些区别
首先是 where后面加 1=1,在使用where关键字时,因为条件不确定存在不存在,要加上 1=1这个垃圾条件来解决条件为空时where失去存在的意义;但是< where >标签中不需要加 1=1这个垃圾条件,因为where标签会自动处理只有在一个以上的< if >标签有值时才去插入WHERE子句到SQL中。
然后是另一个问题条件AND 条件,where标签会自动去除首个条件中的AND,这样大家就可以不用去管第一个条件是否为空可以直接给所有if标签中的条件都加上AND,但是自己还是习惯的将第一个条件去掉AND ,但是如果遇到前边已经有一个存在的条件的情况下,那接下来所有的if中的条件开头AND是必须要加的,如:
<select id="listConnection" parameterType="java.util.Map" resultMap="ResultMap"> SELECT A.CONN_ID, A.CONN_NO, A.STA_ID, A.RUN_MODE, A.SRV_ID, A.LINE_ID FROM CONN A <where> A.CONN_ID=1 <if test="srvId!= null"> AND A.SRV_ID= #{srvId,jdbcType=DECIMAL} </if> <if test="runMode!= null"> AND A.RUN_MODE= #{runMode,jdbcType=VARCHAR} </if> </where></select>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。