当前位置:网站首页>Dynamic SQL of ibatis
Dynamic SQL of ibatis
2022-07-05 11:28:00 【Full stack programmer webmaster】
1. Introduce
1 <select id="getUsers"
2
3 parameterClass="user"
4
5 resultMap="get-user-result">
6
7 select
8
9 id,
10
11 name,
12
13 sex
14
15 from t_user
16
17 <dynamic prepend="WHERE">
18
19 <isNotEmpty prepend="AND" property="name">
20
21 name like #name#
22
23 </isNotEmpty>
24
25 <isNotEmpty prepend="AND" property="address">
26
27 address like #address#
28
29 </isNotEmpty>
30
31 </dynamic>
32
33 </select>adopt dynamic node , You can define a dynamic WHERE Clause . this WHERE Clause may contain two statements for name and address The judgment condition of the field . Whether these two fields are added to the search depends on the query conditions provided by the user .
The semantics of this node is , If the parameter class ”name” Property is not empty (isNotEmpty, That is, a non empty string ””), In the generated SQL Where The sentence includes the judgment condition (name like #name#), among #name# Will take the name Property value padding .
name Property corresponds to isNotEmpty node , because ibatis Will automatically determine whether to add prepend Prefix , here (name like #name#) yes WHERE The first conditional clause in clause , There is no need to AND Prefix , So automatically omit .
Decision nodes are not limited to isNotEmpty,ibatis Provides a wealth of decision definition functions . It can be divided into two categories :
One 、 Monism
Unary decision is the decision of attribute value itself , If the attribute is NULL, Whether it is null, etc .
In the above example isNotEmpty It's a typical unary decision .
The unary decision node has :
<isPropertyAvailable> Whether this property is provided in the parameter class
<isNotPropertyAvailable> And <isPropertyAvailable> contrary
<isNull> Whether the attribute value is NULL
<isNotNull> And <isNull> contrary
<isEmpty> If the property is Collection perhaps String, Its size whether <1,
If not the above two types , Through
String.valueOf( Property value )
Get it String After the value of type , Judge it size whether <1
<isNotEmpty> And <isEmpty> contrary .
Two 、 Binary decision
Binary decision has two decision parameters , One is the attribute name , It's the decision value , Such as
<isGreaterThan prepend=”AND” property=”age”
compareValue=”18″>
(age=#age#)
</isGreaterThan>
among ,property=”age” Property name specified ”age”,compareValue=”18” To specify
The judgment value is ”18”.
The above decision node isGreaterThan The corresponding semantics is : If age Property is greater than
18(compareValue), It's in SQL Add (age=#age#) Conditions .
The binary decision nodes are :
The node name Property value and compareValues The relationship between
<isEqual> equal .
<isNotEqual> Unequal .
<isGreaterThan> Greater than
<isGreaterEqual> Greater than or equal to
<isLessThan> Less than
<isLessEqual> Less than or equal to
2. The Works of Liezi
For some special symbols , If greater than >、 Less than no. < You need to write in <![CDATA[]] China can effectively , Otherwise, it will fail . 1、 dynamic SQL fragment
adopt SQL Fragments achieve code reuse
1 <!-- Dynamic conditional paging query -->
2 <sql id="sql_count">
3 select count(*)
4 </sql>
5 <sql id="sql_select">
6 select *
7 </sql>
8 <sql id="sql_where">
9 from icp
10 <dynamic prepend="where">
11 <isNotEmpty prepend="and" property="name">
12 name like '%$name$%'
13 </isNotEmpty>
14 <isNotEmpty prepend="and" property="path">
15 path like '%path$%'
16 </isNotEmpty>
17 <isNotEmpty prepend="and" property="area_id">
18 area_id = #area_id#
19 </isNotEmpty>
20 <isNotEmpty prepend="and" property="hided">
21 hided = #hided#
22 </isNotEmpty>
23 </dynamic>
24 <dynamic prepend="">
25 <isNotNull property="_start">
26 <isNotNull property="_size">
27 limit #_start#, #_size#
28 </isNotNull>
29 </isNotNull>
30 </dynamic>
31 </sql>
32 <select id="findByParamsForCount" parameterClass="map" resultClass="int">
33 <include refid="sql_count"/>
34 <include refid="sql_where"/>
35 </select>
36 <select id="findByParams" parameterClass="map" resultMap="icp.result_base">
37 <include refid="sql_select"/>
38 <include refid="sql_where"/>
39
40 </select>2、 Number range query
The parameter name is fabricated , Non database fields , such as _img_size_ge、_img_size_lt Field
1 <isNotEmpty prepend="and" property="_img_size_ge">
2 <![CDATA[
3 img_size >= #_img_size_ge#
4 ]]>
5 </isNotEmpty>
6 <isNotEmpty prepend="and" property="_img_size_lt">
7 <![CDATA[
8 img_size < #_img_size_lt#
9 ]]>
10 </isNotEmpty>
11
12 Multiple use of one parameter is also allowed
1 <isNotEmpty prepend="and" property="_now">
2 <![CDATA[
3 execplantime >= #_now#
4 ]]>
5 </isNotEmpty>
6 <isNotEmpty prepend="and" property="_now">
7 <![CDATA[
8 closeplantime <= #_now#
9 ]]>
10 </isNotEmpty>3、 Time range query
1 <isNotEmpty prepend="" property="_starttime">
2 <isNotEmpty prepend="and" property="_endtime">
3 <![CDATA[
4 createtime >= #_starttime#
5 and createtime < #_endtime#
6 ]]>
7 </isNotEmpty>
8 </isNotEmpty> 4、in Inquire about
1 <isNotEmpty prepend="and" property="_in_state">
2 state in ('$_in_state$')
3 </isNotEmpty>5、like Inquire about
1 <isNotEmpty prepend="and" property="chnameone">
2 (chnameone like '%$chnameone$%' or spellinitial like '%$chnameone$%')
3 </isNotEmpty>
4 <isNotEmpty prepend="and" property="chnametwo">
5 chnametwo like '%$chnametwo$%'
6 </isNotEmpty> 6、or Conditions
1 <isEqual prepend="and" property="_exeable" compareValue="N">
2 <![CDATA[
3 (t.finished='11' or t.failure=3)
4 ]]>
5 </isEqual>
6
7 <isEqual prepend="and" property="_exeable" compareValue="Y">
8 <![CDATA[
9 t.finished in ('10','19') and t.failure<3
10 ]]>
11 </isEqual>7、where Subquery
1 <isNotEmpty prepend="" property="exprogramcode">
2 <isNotEmpty prepend="" property="isRational">
3 <isEqual prepend="and" property="isRational" compareValue="N">
4 code not in
5 (select t.contentcode
6 from cms_ccm_programcontent t
7 where t.contenttype='MZNRLX_MA'
8 and t.programcode = #exprogramcode#)
9 </isEqual>
10 </isNotEmpty>
11 </isNotEmpty>
12
13 <select id="findByProgramcode" parameterClass="string" resultMap="cms_ccm_material.result">
14 select *
15 from cms_ccm_material
16 where code in
17 (select t.contentcode
18 from cms_ccm_programcontent t
19 where t.contenttype = 'MZNRLX_MA'
20 and programcode = #value#)
21 order by updatetime desc
22 </select>9、 Use of functions
1 <!-- add to -->
2 <insert id="insert" parameterClass="RuleMaster">
3 insert into rulemaster(
4 name,
5 createtime,
6 updatetime,
7 remark
8 ) values (
9 #name#,
10 now(),
11 now(),
12 #remark#
13 )
14 <selectKey keyProperty="id" resultClass="long">
15 select LAST_INSERT_ID()
16 </selectKey>
17 </insert>
18 <!-- to update -->
19 <update id="update" parameterClass="RuleMaster">
20 update rulemaster set
21 name = #name#,
22 updatetime = now(),
23 remark = #remark#
24 where id = #id#
25 </update>10、map Result set
1 <!-- Dynamic conditional paging query -->
2 <sql id="sql_count">
3 select count(a.*)
4 </sql>
5 <sql id="sql_select">
6 select a.id vid,
7 a.img imgurl,
8 a.img_s imgfile,
9 b.vfilename vfilename,
10 b.name name,
11 c.id sid,
12 c.url url,
13 c.filename filename,
14 c.status status
15 </sql>
16 <sql id="sql_where">
17 From secfiles c, juji b, videoinfo a
18 where
19 a.id = b. videoid
20 and b.id = c.segmentid
21 and c.status = 0
22 order by a.id asc,b.id asc,c.sortnum asc
23 <dynamic prepend="">
24 <isNotNull property="_start">
25 <isNotNull property="_size">
26 limit #_start#, #_size#
27 </isNotNull>
28 </isNotNull>
29 </dynamic>
30 </sql>
31 <!-- Returns the total number of records not downloaded -->
32 <select id="getUndownFilesForCount" parameterClass="map" resultClass="int">
33 <include refid="sql_count"/>
34 <include refid="sql_where"/>
35 </select>
36 <!-- Return records that have not been downloaded -->
37 <select id="getUndownFiles" parameterClass="map" resultClass="java.util.HashMap">
38 <include refid="sql_select"/>
39 <include refid="sql_where"/>
40 </select>Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/109452.html Link to the original text :https://javaforall.cn
边栏推荐
- 阻止浏览器后退操作
- R3live series learning (IV) r2live source code reading (2)
- SSL证书错误怎么办?浏览器常见SSL证书报错解决办法
- Question and answer 45: application of performance probe monitoring principle node JS probe
- 【爬虫】wasm遇到的bug
- COMSOL -- 3D casual painting -- sweeping
- Idea set the number of open file windows
- How can edge computing be combined with the Internet of things?
- Technology sharing | common interface protocol analysis
- The ninth Operation Committee meeting of dragon lizard community was successfully held
猜你喜欢

The ninth Operation Committee meeting of dragon lizard community was successfully held

如何将 DevSecOps 引入企业?

Idea set the number of open file windows

Wechat nucleic acid detection appointment applet system graduation design completion (6) opening defense ppt

AutoCAD -- mask command, how to use CAD to locally enlarge drawings

高校毕业求职难?“百日千万”网络招聘活动解决你的难题

R3live series learning (IV) r2live source code reading (2)

In the last process before the use of the risk control model, 80% of children's shoes are trampled here

Harbor image warehouse construction

【爬虫】charles unknown错误
随机推荐
C # to obtain the filtered or sorted data of the GridView table in devaexpress
如何将 DevSecOps 引入企业?
跨境电商是啥意思?主要是做什么的?业务模式有哪些?
技术管理进阶——什么是管理者之体力、脑力、心力
力扣(LeetCode)185. 部门工资前三高的所有员工(2022.07.04)
Harbor image warehouse construction
爬虫(9) - Scrapy框架(1) | Scrapy 异步网络爬虫框架
pytorch训练进程被中断了
Dspic33ep clock initialization program
汉诺塔问题思路的证明
Lombok 同时使⽤@Data和@Builder 的坑,你中招没?
Unity xlua monoproxy mono proxy class
高校毕业求职难?“百日千万”网络招聘活动解决你的难题
Basic part - basic project analysis
DDR4的特性与电气参数
【爬虫】wasm遇到的bug
R3Live系列学习(四)R2Live源码阅读(2)
TSQL – identity column, guid, sequence
Ffmpeg calls avformat_ open_ Error -22 returned during input (invalid argument)
Differences between IPv6 and IPv4 three departments including the office of network information technology promote IPv6 scale deployment