当前位置:网站首页>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
边栏推荐
- COMSOL--三维图形的建立
- 技术分享 | 常见接口协议解析
- MFC pet store information management system
- How did the situation that NFT trading market mainly uses eth standard for trading come into being?
- How to understand super browser? What scenarios can it be used in? What brands are there?
- Ziguang zhanrui's first 5g R17 IOT NTN satellite in the world has been measured on the Internet of things
- 中非 钻石副石怎么镶嵌,才能既安全又好看?
- COMSOL -- establishment of geometric model -- establishment of two-dimensional graphics
- MySQL giant pit: update updates should be judged with caution by affecting the number of rows!!!
- 不要再说微服务可以解决一切问题了!
猜你喜欢
随机推荐
Cron表达式(七子表达式)
Crawler (9) - scrape framework (1) | scrape asynchronous web crawler framework
Modulenotfounderror: no module named 'scratch' ultimate solution
How can China Africa diamond accessory stones be inlaid to be safe and beautiful?
【Oracle】使用DataGrip连接Oracle数据库
[JS] extract the scores in the string, calculate the average score after summarizing, compare with each score, and output
I used Kaitian platform to build an urban epidemic prevention policy inquiry system [Kaitian apaas battle]
C operation XML file
TSQL – identity column, guid, sequence
Codeforces Round #804 (Div. 2)
【爬虫】wasm遇到的bug
DDoS attack principle, the phenomenon of being attacked by DDoS
Cdga | six principles that data governance has to adhere to
7 themes and 9 technology masters! Dragon Dragon lecture hall hard core live broadcast preview in July, see you tomorrow
How to make full-color LED display more energy-saving and environmental protection
go语言学习笔记-分析第一个程序
[first release in the whole network] (tips for big tables) sometimes it takes only 1 minute for 2 hours of SQL operation
Spark Tuning (I): from HQL to code
【爬虫】charles unknown错误
[advertising system] parameter server distributed training