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、函数的使用
<!-- 添加 -->
<insert id="insert" parameterClass="RuleMaster">
insert into rulemaster(
name,
createtime,
updatetime,
remark
) values (
#name#,
now(),
now(),
#remark#
)
<selectKey keyProperty="id" resultClass="long">
select LAST_INSERT_ID()
</selectKey>
</insert>
<!-- 更新 -->
<update id="update" parameterClass="RuleMaster">
update 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代码
<!-- 更新学生信息 -->
<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>
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>
以上所述是小编给大家介绍的MyBatis动态SQL标签用法实例详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
# mybatis
# 动态sql
# 标签用法
# 动态sql标签用法
# mybatis的动态sql详解(精)
# mybatis动态sql之Map参数的讲解
# MyBatis执行动态SQL的方法
# Mybatis模糊查询和动态sql语句的用法
# Mybatis中的动态SQL语句解析
# MyBatis动态SQL中的trim标签的使用方法
# MyBatis实践之动态SQL及关联查询
# mybatis的动态sql之if test的使用说明
# 详解Mybatis动态sql
# Mybatis超级强大的动态SQL语句大全
# 分页
# 小编
# 多个
# 给大家
# 类似于
# 则为
# 所述
# 写上
# 给我留言
# 有一个
# 复用
# 从上到下
# 所传
# 有任何
# 更灵活
# 选项中
# _starttime
# _endtime
# findByParams
# closeplantime
相关文章:
宝塔面板如何快速创建新站点?
建站主机是否等同于虚拟主机?
如何在阿里云域名上完成建站全流程?
如何通过WDCP绑定主域名及创建子域名站点?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
简单实现Android验证码
英语简历制作免费网站推荐,如何将简历翻译成英文?
建站主机系统SEO优化与智能配置核心关键词操作指南
郑州企业网站制作公司,郑州招聘网站有哪些?
如何破解联通资金短缺导致的基站建设难题?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
网页设计网站制作软件,microsoft office哪个可以创建网页?
建站上传速度慢?如何优化加速网站加载效率?
如何在景安服务器上快速搭建个人网站?
如何制作网站标识牌,动态网站如何制作(教程)?
设计网站制作公司有哪些,制作网页教程?
建站之星如何实现五合一智能建站与营销推广?
微信小程序 五星评分(包括半颗星评分)实例代码
如何通过服务器快速搭建网站?完整步骤解析
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
网站制作员失业,怎样查看自己网站的注册者?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
建站主机空间推荐 高性价比配置与快速部署方案解析
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
制作网站的模板软件,网站怎么建设?
江苏网站制作公司有哪些,江苏书法考级官方网站?
建站主机默认首页配置指南:核心功能与访问路径优化
零基础网站服务器架设实战:轻量应用与域名解析配置指南
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
建站之星代理如何获取技术支持?
北京网站制作公司哪家好一点,北京租房网站有哪些?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
建站主机是什么?如何选择适合的建站主机?
学校建站服务器如何选型才能满足性能需求?
如何在宝塔面板中修改默认建站目录?
教程网站设计制作软件,怎么创建自己的一个网站?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
魔方云NAT建站如何实现端口转发?
电商网站制作价格怎么算,网上拍卖流程以及规则?
建站之星好吗?新手能否轻松上手建站?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何在局域网内绑定自建网站域名?
音乐网站服务器如何优化API响应速度?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
家庭服务器如何搭建个人网站?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
小建面朝正北,A点实际方位是否存在偏差?
建站主机是否属于云主机类型?
招贴海报怎么做,什么是海报招贴?
*请认真填写需求信息,我们会在24小时内与您取得联系。