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
相关文章:
建站之星客服服务时间及联系方式如何?
如何通过NAT技术实现内网高效建站?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
网站制作软件有哪些,制图软件有哪些?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
网站制作价目表怎么做,珍爱网婚介费用多少?
TestNG的testng.xml配置文件怎么写
寿县云建站:智能SEO优化与多行业模板快速上线指南
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
建站之星CMS五站合一模板配置与SEO优化指南
如何在Golang中引入测试模块_Golang测试包导入与使用实践
建站之星下载版如何获取与安装?
如何获取开源自助建站系统免费下载链接?
如何通过.red域名打造高辨识度品牌网站?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
如何基于云服务器快速搭建网站及云盘系统?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
如何在云主机上快速搭建网站?
nginx修改上传文件大小限制的方法
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
c++ stringstream用法详解_c++字符串与数字转换利器
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
如何正确选择百度移动适配建站域名?
移民网站制作流程,怎么看加拿大移民官网?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
建站之星ASP如何实现CMS高效搭建与安全管理?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
盘锦网站制作公司,盘锦大洼有多少5G网站?
Android自定义listview布局实现上拉加载下拉刷新功能
如何打造高效商业网站?建站目的决定转化率
大连 网站制作,大连天途有线官网?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
深圳网站制作培训,深圳哪些招聘网站比较好?
建站之星多图banner生成与模板自定义指南
官网建站费用明细查询_企业建站套餐价格及收费标准指南
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
宝塔新建站点报错如何解决?
如何选择高效稳定的ISP建站解决方案?
如何在IIS服务器上快速部署高效网站?
seo网站制作优化,网站SEO优化步骤有哪些?
清除minerd进程的简单方法
如何在云服务器上快速搭建个人网站?
如何在宝塔面板中修改默认建站目录?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何选择高效便捷的WAP商城建站系统?
*请认真填写需求信息,我们会在24小时内与您取得联系。