mybatis 动态sql|详解MyBatis动态SQL标签用法

更新时间:2019-02-21 来源:考试资讯 点击:

【www.0477edu.com--考试资讯】

  本文通过实例代码给大家介绍了MyBatis动态SQL标签用法,具有参考借鉴价值,需要的朋友可以参考一下。想了解更多相关信息请持续关注我们应届毕业生考试网!

  1、动态SQL片段

  通过SQL片段达到代码复用

  <!-- 动态条件分页查询 -->

  <sql id="sql_count">

  select count(*)

  </sql>

  <sql id="sql_select">

  select *

  </sql>

  <sql id="sql_where">

  from icp

  <dynamic prepend="where">

  <isNotEmpty prepend="and" property="name">

  name like '%$name$%'

  </isNotEmpty>

  <isNotEmpty prepend="and" property="path">

  path like '%path$%'

  </isNotEmpty>

  <isNotEmpty prepend="and" property="area_id">

  area_id = #area_id#

  </isNotEmpty>

  <isNotEmpty prepend="and" property="hided">

  hided = #hided#

  </isNotEmpty>

  </dynamic>

  <dynamic prepend="">

  <isNotNull property="_start">

  <isNotNull property="_size">

  limit #_start#, #_size#

  </isNotNull>

  </isNotNull>

  </dynamic>

  </sql>

  <select id="findByParamsForCount" parameterClass="map" resultClass="int">

  <include refid="sql_count"/>

  <include refid="sql_where"/>

  </select>

  <select id="findByParams" parameterClass="map" resultMap="icp.result_base">

  <include refid="sql_select"/>

  <include refid="sql_where"/>

  </select>

  2、数字范围查询

  所传参数名称是捏造所得,非数据库字段,比如_img_size_ge、_img_size_lt字段

  <isNotEmpty prepend="and" property="_img_size_ge">

  <![CDATA[

  img_size >= #_img_size_ge#

  ]]>

  </isNotEmpty>

  <isNotEmpty prepend="and" property="_img_size_lt">

  <![CDATA[

  img_size < #_img_size_lt#

  ]]>

  </isNotEmpty>

  多次使用一个参数也是允许的

  <isNotEmpty prepend="and" property="_now">

  <![CDATA[

  execplantime >= #_now#

  ]]>

  </isNotEmpty>

  <isNotEmpty prepend="and" property="_now">

  <![CDATA[

  closeplantime <= #_now#

  ]]>

  </isNotEmpty>

  3、时间范围查询

  <isNotEmpty prepend="" property="_starttime">

  <isNotEmpty prepend="and" property="_endtime">

  <![CDATA[

  createtime >= #_starttime#

  and createtime < #_endtime#

  ]]>

  </isNotEmpty>

  </isNotEmpty>

  4、in查询

  <isNotEmpty prepend="and" property="_in_state">

  state in ('$_in_state$')

  </isNotEmpty>

  5、like查询

  <isNotEmpty prepend="and" property="chnameone">

  (chnameone like '%$chnameone$%' or spellinitial like '%$chnameone$%')

  </isNotEmpty>

  <isNotEmpty prepend="and" property="chnametwo">

  chnametwo like '%$chnametwo$%'

  </isNotEmpty>

  6、or条件

  <isEqual prepend="and" property="_exeable" compareValue="N">

  <![CDATA[

  (t.finished='11'  or t.failure=3)

  ]]>

  </isEqual>

  <isEqual prepend="and" property="_exeable" compareValue="Y">

  <![CDATA[

  t.finished in ('10','19') and t.failure<3

  ]]>

  </isEqual>

  7、where子查询

  <isNotEmpty prepend="" property="exprogramcode">

  <isNotEmpty prepend="" property="isRational">

  <isEqual prepend="and" property="isRational" compareValue="N">

  code not in

  (select t.contentcode

  from cms_ccm_programcontent t

  where t.contenttype='MZNRLX_MA'

  and t.programcode = #exprogramcode#)

  </isEqual>

  </isNotEmpty>

  </isNotEmpty>

  <select id="findByProgramcode" parameterClass="string" resultMap="cms_ccm_material.result">

  select *

  from cms_ccm_material

  where code in

  (select t.contentcode

  from cms_ccm_programcontent t

  where t.contenttype = 'MZNRLX_MA'

  and programcode = #value#)

  order by updatetime desc

  </select>

  9、函数的使用

  <!-- 添加 -->

  < id="" parameterClass="RuleMaster">

  into rulemaster(

  name,

  createtime,

  updatetime,

  remark

  ) values (

  #name#,

  now(),

  now(),

  #remark#

  )

  <selectKey keyProperty="id" resultClass="long">

  select LAST_INSERT_ID()

  </selectKey>

  </>

  <!-- 更新 -->

  <id="update" parameterClass="RuleMaster">

  rulemaster set

  name = #name#,

  updatetime = now(),

  remark = #remark#

  where id = #id#

  </update>

  10、map结果集

  <!-- 动态条件分页查询 -->

  <sql id="sql_count">

  select count(a.*)

  </sql>

  <sql id="sql_select">

  select a.id        vid,

  a.img       imgurl,

  a.img_s     imgfile,

  b.vfilename vfilename,

  b.name      name,

  c.id        sid,

  c.url       url,

  c.filename  filename,

  c.status    status

  </sql>

  <sql id="sql_where">

  From secfiles c, juji b, videoinfo a

  where

  a.id = b. videoid

  and b.id = c.segmentid

  and c.status = 0

  order by a.id asc,b.id asc,c.sortnum asc

  <dynamic prepend="">

  <isNotNull property="_start">

  <isNotNull property="_size">

  limit #_start#, #_size#

  </isNotNull>

  </isNotNull>

  </dynamic>

  </sql>

  <!-- 返回没有下载的记录总数 -->

  <select id="getUndownFilesForCount" parameterClass="map" resultClass="int">

  <include refid="sql_count"/>

  <include refid="sql_where"/>

  </select>

  <!-- 返回没有下载的记录 -->

  <select id="getUndownFiles" parameterClass="map" resultClass="java.util.HashMap">

  <include refid="sql_select"/>

  <include refid="sql_where"/>

  </select>

  11、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代码

  <!-- 更新学生信息 -->

  <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>

  12、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>

本文来源:http://www.0477edu.com/zhongkao/44948/

为您推荐

2017年小学三年级语文下册教学计划【优秀篇】

教学计划可以具体规定一定学校的学科设置、各门学科的教学顺序、教学时数以及各种活动等。以下是烟花美文网小编搜索整理的关于2017年小学三年级语文下册教学计划【优秀篇】,供参考借鉴,希望对各位老师有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!各版本三年级语文下学期教学计划汇总2017年各版

2019-04-14 14:29:40   2017小学语文教研计划  

北师大版2017年数学升中试题_2017北师大版数学一年级下册教学计划

教学计划对于整个学期教学的进行有指导作用,以下是烟花美文网小编搜索整理的关于2017北师大版数学一年级下册教学计划,供参考借鉴,希望对各位老师有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!各版本小学一年级数学下册教学计划汇总2017各版本小学一年级数学下册教学计划范文小学一年级下学期数

2019-04-14 14:29:40   2017北师大数学七年级  

2018护士执业考试分数线_历年护士执业考试分数线是多少分

目前2017年护士资格考试分数线公布时间还未确定,2016年护士执业资格考试分数线公布时间为7月21日,请考生耐心等待中国卫生人才网官方通知,近期就会公布下面烟花美文网小编带大家一起来看看历年护士执业考试分数线,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!2016年护士考试

2019-02-21 04:45:47   历年护士证考试分数线  

【2018全国高考作文题目】2017年全国高考作文题目汇总【实时更新】

高考作文是每一年大家关注的热点,2017年高考作文会是什么样的题目,届时小编会第一时间发布最新消息!本文是烟花美文网小编搜索整理的全国31省市2017高考作文题目,供各位考生们参考!想了解更多相关信息请持续关注我们应届毕业生考试网!2017高考作文汇总地区 科目2017高考作文题目新课标I卷老外眼中

2019-02-18 04:20:04   2017全国高考满分作文  

西南交通大学毕业生去向|2016年西南交通大学毕业生就业质量报告

西南交通大学招生就业处发布了《西南交通大学2016年毕业生就业质量年度报告》,该报告作为评估西南交大学生就业质量的重要文件,一直受到大家的关注。下面烟花美文网小编带大家一起来看看详细内容,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!亮点导读:2016届毕业生就业率相关情况截

2019-02-07 21:49:33   2016年高校毕业生就业