一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

2020-06-11 16:37YEN_CSDN JAVA教程

動態SQL就是動態的生成SQL。接下來通過本文給大家介紹Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解的相關知識,感興趣的朋友一起看看吧

動態SQL就是動態的生成SQL。

if標記

假設有這樣一種需求:查詢用戶,當用戶名不等于“admin”的時候,我們還需要密碼為123456。

數據庫中的數據為:

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

MyBatisConfig.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--定義別名 注意typeAliases一定要在environments之前-->
<typeAliases>
<typeAlias type="jike.book.pojo.JiKeUser" alias="JiKeUser"/>
<typeAlias type="jike.book.pojo.Author" alias="Author"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/jikebook"/>
<property name="username" value="root"/>
<property name="password" value="*****"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="jike/book/map/jikeUser.xml"/>
</mappers>
</configuration>

JiKeUser.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="/">
<select id="selectSQL" resultType="JiKeUser" parameterType="JiKeUser">
SELECT * FROM jikebook.jikeuser
WHERE 1=1
<if test="userName!='admin'">
AND password=#{password}
</if>
</select>
</mapper>

測試類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package jike.book.test;
import jike.book.pojo.JiKeUser;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
/**
* DateTime: 2016/9/6 13:36
* 功能:
* 思路:
*/
public class TestSQL {
public static void main(String[] args) {
// 資源路徑
String resource="jike/book/map/MyBatisConfig.xml";
Reader reader=null;
SqlSession session;
try {
reader= Resources.getResourceAsReader(resource);
} catch ( IOException e ) {
e.printStackTrace();
}
SqlSessionFactory sqlMapper=new SqlSessionFactoryBuilder().build(reader);
session=sqlMapper.openSession();
JiKeUser jiKeUser=new JiKeUser();
jiKeUser.setPassword("123456");
List<JiKeUser> userList=session.selectList("selectSQL",jiKeUser);
for ( JiKeUser user:userList ) {
System.out.println("userName:"+user.getUserName());
}
session.close();
}
}

運行結果為:

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

choose標記

假設我們當前有這么一個需求:查詢用戶,如果用戶名不為空就加上用戶名這個條件,如果id不為空也加上id這個條件,否則的話就是設置密碼不為空,這就是一個多路選擇。

MyBatisConfig.xml不改變,在JikeUser.xml中加上:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<select id="selectJiKeUserChoose" resultType="JiKeUser" parameterType="JiKeUser">
select * from jikeuser where 1=1
<choose>
<when test="userName!=null">
and userName like #{userName}
</when>
<when test="id!=0">
and id =#{id}
</when>
<otherwise>
and password is not null
</otherwise>
</choose>
</select>

測試類:假設用戶名不為空:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package jike.book.test;
import jike.book.pojo.JiKeUser;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
/**
* DateTime: 2016/9/6 13:36
* 功能:
* 思路:
*/
public class TestSQL {
public static void main(String[] args) {
// 資源路徑
String resource="jike/book/map/MyBatisConfig.xml";
Reader reader=null;
SqlSession session;
try {
reader= Resources.getResourceAsReader(resource);
} catch ( IOException e ) {
e.printStackTrace();
}
SqlSessionFactory sqlMapper=new SqlSessionFactoryBuilder().build(reader);
session=sqlMapper.openSession();
JiKeUser jiKeUser=new JiKeUser();
jiKeUser.setUserName("YEN");
List<JiKeUser> userList=session.selectList("selectJiKeUserChoose",jiKeUser);
for ( JiKeUser user:userList ) {
System.out.println("userName:"+user.getUserName());
}
session.close();
}
}

結果為:

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

假設不設置用戶名這個條件,即注釋掉jiKeUser.setUserName("YEN");:

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

where標記、set標記

上面我們在choose中查詢是不能確定子連接條件中的and是寫還是不寫,因此加了一個1=1.而where會只能的去判斷該不該加。

?
1
2
3
4
5
6
7
8
9
10
11
<select id="selectJiKeUserWhere" resultType="JiKeUser" parameterType="JiKeUser">
select * from jikeuser
<where>
<if test="userName!=null">
and userName like #{userName}
</if>
<if test="id!=null">
and id =#{id}
</if>
</where>
</select>

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

set標記智能賦值,會自動去掉多余的”,”。

?
1
2
3
4
5
6
7
8
<update id="updateJiKeUserSet" parameterType="JiKeUser">
update JiKeUser
<set>
<if test="userName != null">userName=#{userName},</if>
<if test="password != null">password=#{password},</if>
</set>
where id=#{id}
</update>

操作之前的數據:

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

操作:

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

操作結果:

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

?
1
2
3
4
5
6
7
8
9
10
11
<update id="updateUserTrim" parameterType="JiKeUser">
UPDATE JiKeUser
<trim prefix="SET" suffixOverrides="," suffix="WHERE id = #{id}" >
<if test="userName != null and userName != '' ">
userName = #{userName},
</if>
<if test="password != null and password != '' ">
password=#{password},
</if>
</trim>
</update>
Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

foreach標記

通常用于循環查詢或循環賦值

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

?
1
2
3
4
5
6
7
8
9
10
<select id="selectJiKeUserForeach" resultType="JiKeUser" parameterType="list">
select * from jikeuser
<where>
id in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</where>
</select>

測試:

Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解

以上所述是小編給大家介紹的Mybatis動態SQL之if、choose、where、set、trim、foreach標記實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/yen_csdn/article/details/52449436

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91在线老师啪国自产 | 好爽好深好猛好舒服视频上 | 成人男女啪啪免费观看网站 | 麻豆视频免费在线观看 | 日本妇人成熟免费不卡片 | 欧美怡红院视频一区二区三区 | 乌克兰17一18处交 | 亚洲色图第四色 | 新版孕妇bbwbbwbbw | 亚洲欧美在线免费 | 5g影院天天5g天天爽大陆 | 青青草原伊人网 | 国产欧美曰韩一区二区三区 | 国产成人精品在线观看 | 久久久久嫩草影院精品 | 久久91精品国产91 | 四虎影视在线观看2413 | 女人国产香蕉久久精品 | 日本高清视频网站 | 四虎精品成人a在线观看 | 喜马拉雅听书免费版 | 精品无码国产污污污免费网站2 | 日本性生活免费看 | 午夜办公室在线观看高清电影 | 精品久久久久久国产91 | 女教师巨大乳孔中文字幕免费 | 牧教师在线观看 | 歪歪视频在线播放无遮挡 | 国产特黄a级在线视频 | 99re这里只有精品在线观看 | 亚洲国产第一区二区香蕉日日 | 高清一级片 | 国产一区二区精品 | 特级老女人淫片高清视频 | 无套白浆 | 99久久精品无码一区二区毛片 | 百合漫画咱啪全彩抚慰 | 国产精品欧美日韩一区二区 | 母乳在线播放 | 369看片网| 日本最新免费二区 |