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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: www一区二区 | 爱情岛论坛亚洲品质自拍视频 | 国产欧美成人免费观看 | 被夫上司强迫中文 | 亚洲冬月枫中文字幕在线看 | 成人精品视频 成人影院 | 亚洲国产精品第一区二区三区 | 美女全身无遮挡 | 日韩中文字幕网站 | 国产资源一区 | 日韩欧美亚洲每日更新网 | 亚洲ss| 色综合久久天天综合观看 | 欧美精品国产一区二区 | 天选之王漫画顾长歌免费阅读 | 成人免费视频一区二区三区 | 妇乱子伦激情 | 色综合综合| eee在线播放成人免费 | 香蕉国产人午夜视频在线观看 | 国产99精品免费视频看6 | 国产午夜永久福利视频在线观看 | 欧美亚洲国产另类 | 牛牛影院成人免费网页 | 黑人艹逼 | 欧美性f| 99热久久这里只有精品23 | 国产免费一区不卡在线 | 久久不射电影网 | 国产v日韩v欧美v精品专区 | 国产在线看片网站 | 亚洲午夜久久久久国产 | futa百合高肉全h | 99久久精品无码一区二区毛片 | 99热精品久久 | 十六一下岁女子毛片免费 | 久久re热在线视频精99 | 久久偷拍国2017的 | 91麻豆精品国产91久久久 | 423hk四虎| 欧美四级无删版影片 |