MyBatis的動態語句使用
1. 動態查詢語句
可以根據傳入的bean來判斷,動態的拼接SQL語句
SQL語句
<select id="findUserInfo" parameterType="UserInfo" resultType="UserInfo">
select * from userinfo
<where>
<if test="id!=0">
and id = #{id}
</if>
<if test="name!=null and name!=''" >
and name like #{name}
</if>
<if test="address!=null and address!=''">
and address like #{address}
</if>
</where>
</select>
- Java語句
SqlSession session = MyBatisUtil.openSession();
UserInfoDao dao = session.getMapper(UserInfoDao.class);
UserInfo u = new UserInfo();
u.setId(4);
u.setName("%a%");
u.setAddress("%c%");
session.commit();
session.close();
此處的Like語句如果用
#
,需要在傳入的引數中設定%
,如果用的是$
,則需要在SQL語句中寫'%#{param}%'
- 使用
#
SQL:and name like #{name}
Java:u.setName("%a%");
- 使用
$
SQL:name like '%${name}%'
Java:u.setName("a");
2. 傳入多個引數
傳入多個引數時需要用集合或陣列進行傳值
SQL
<select id="findUserInfoByIdArray" resultType="UserInfo">
select * from userinfo where id in
<!-- item名稱沒有限制,和取值的屬性一致即可 -->
<!-- collection為傳入的引數型別,可以為list或array,open為需要拼接的開始符號,separator為分割符號,close為結束符號 -->
<foreach collection="array" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
- Java
SqlSession session = MyBatisUtil.openSession();
UserInfoDao dao = session.getMapper(UserInfoDao.class);
List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(2);
ids.add(3);
List<UserInfo> list = dao.findUserInfoByIds(ids);
session.close();
3. SQL語句複用
- 被複用的SQL語句
<!-- SQL語句複用 -->
<sql id="ids">
where id in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</sql>
- 使用
<select id="findUserInfoByIds" resultType="UserInfo">
select * from userinfo
<!--refid為被複用的sql語句ID-->
<include refid="ids" />
</select>
4. 批量操作
- 使用foreach迴圈實現批量操作
- SQL
<insert id="insertBatch" parameterType="java.util.List">
insert into userinfo(id,name,address)
values
<foreach collection="list" item="data" separator=",">
(#{data.id},#{data.name},#{data.address})
</foreach>
</insert>
- Java
SqlSession session = MyBatisUtil.openSession();
UserInfoDao dao = session.getMapper(UserInfoDao.class);
List<UserInfo> list = new ArrayList<UserInfo>();
UserInfo u1 = new UserInfo(5,"c5","dalian");
UserInfo u2 = new UserInfo(6,"c6","dalian");
UserInfo u3 = new UserInfo(7,"c7","dalian");
UserInfo u4 = new UserInfo(8,"c8","dalian");
UserInfo u5 = new UserInfo(9,"c9","dalian");
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
list.add(u5);
dao.insertBath(list);
session.commit();
session.close();
5. 動態的拼接更新語句
- 通過判斷條件來動態的拼接更新語句
- SQL
<update id="updateUserInfo" parameterType="UserInfo">
update userinfo
<set>
<if test="name!=null and name!=''">
name=#{name},
</if>
<if test="address!=null and name!=''">
address=#{address},
</if>
</set>
where id=#{id}
</update>
- Java
SqlSession session = MyBatisUtil.openSession();
UserInfoDao dao = session.getMapper(UserInfoDao.class);
//此處不能所有值都為空,否則SQL語句沒有更新條件會有異常
UserInfo u = new UserInfo(4, "啦啦啦", null);
dao.updateUserInfo(u);
session.commit();
session.close();
相關推薦
Mybatis動態語句部分收集
指定 表達 ogl override 通過 find 管道 可能 val where: <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG <wh
Mybatis動態語句,if test字串不用進行null判斷
開發十年,就只剩下這套架構體系了! >>>
Mybatis動態SQL語句使用
第一個 from 在外 字符串 each nbsp mea pack ger 在實際開發中,有時候查詢條件可能是不確定的,查詢條件可能有多條也可能沒有,這時候就需要用到動態的sql語句拼接功能。 一、if、where、sql標簽的使用 需求:在一些高級查詢中,查詢條件存
Mybatis動態sql語句(OGNL語法)
type 語法 key ognl select 動態 font tab class 下面是Mybatis動態sql語句(即OGNL語法)的簡單案例 1.創建表 create table test(id int primary key auto_increment,n
mybatis實現動態語句查詢
前幾天和朋友忽然聊到怎麼可以動態查詢sql,也就是不管傳遞過來多少欄位,以及欄位對應的值,都可以使用這種通用的查詢方法;也許很多部落格上面都有這種查詢的方式,其實我也是參照了其他人的部落格之後,使用springboot+ssm自己建立了一個Demo; 1.首先看一下目錄結構:
使用Mybatis動態sql語句時出現:元素內容必須由格式正確的字元資料或標記組成
>號用>表示,<號用<;表示 @Select("<script> select sum(amount) from user_bills where " + " bill_type=#{billType
mybatis-動態SQL語句
一、CONCAT字串拼接 1. sql中字串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%'); 2. 使用 ${...} 代替 #{...} SELEC
mybatis動態sql語句
mybatis 的動態sql語句是基於OGNL表示式的。可以方便的在 sql 語句中實現某些邏輯. 總體說來mybatis 動態SQL 語句主要有以下幾類: if 語句 (簡單的條件判斷) choose (when,otherwize) ,相當於java
mybatis 動態sql語句
mybatis 的動態sql語句是基於OGNL表示式的。可以方便的在 sql 語句中實現某些邏輯. 總體說來mybatis 動態SQL 語句主要有以下幾類: if 語句 (簡單的條件判斷) choose (when,otherwize) ,相當於java 語言
分享知識-快樂自己:Mybatis 基礎動態語句
目錄: User: package mlq.bean; /** * 使用者實體類 */ public class User { private Integer uId; private String userName; private String user
MyBatis MySQL limit分頁含運算動態語句
MySQL基本的分頁語句 select * from table limit offset,pageSize 正常情況下是沒問題的,如果offset是動態的 select * from table l
mybatis 動態sql語句實現多條件查詢(foreach的使用)
一、前言 現有一個需求:實現多條件、不確定條件的搜尋功能。 類似於淘寶網進行搜尋商品的時候,可以在搜尋框進行模糊搜尋,同時可以進行條件篩選,例如想買一隻 口紅? 的時候,可以在搜尋框內輸入“口紅”,還可以選擇品牌、是否包郵、價格區間等等。。最後搜尋出來的結果是滿足所有篩選的
MyBatis的動態語句使用
1. 動態查詢語句 可以根據傳入的bean來判斷,動態的拼接SQL語句 SQL語句 <select id="findUserInfo" parameterType="UserInfo" resultType="UserInfo">
mybatis 動態拼接mysql語句
問題描述 當傳入的引數存在空時,在生成的mysql語句中,應該不存在,此時需要動態拼接mysql語句。 拼接方法 mybatis 的 trim 標籤 下面是修改語句的拼接: ... <update id="updateUser" parame
框架-MyBatis動態sql語句
學習總結: 1.當entity類中的變數名與資料庫表中的欄位名不一致時。 "UserMapper.xml" 新增: <resultMap type="User" id="userlist"><result property="uid" column="ui
MyBatis學習筆記-08.MyBatis動態Sql語句foreach的collection的用法以及用foreach實現批量刪除與批量新增
本次將繼續記MyBatis動態Sql語句的choose和foreach:一、choose(較少應用):有時我們不想應用到所有的條件語句,而只想從中擇其一項。針對這種情況,MyBatis 提供了 choo
MyBatis單個引數的動態語句引用
在使用mybatis的動態sql時,有時需要根據引數值來動態拼接mysql,比如下面的示例: 根據出版社和作者查詢圖書列表,如果為空則不做該條件過濾(注:此處有2個引數) public void getBookList(String publisher,String au
Mybatis 動態Sql語句《常用》
意義 rom 存在 問題 rri 也會 輸出 ray 便是 MyBatis 的強大特性之一便是它的動態 SQL。如果你有使用 JDBC 或其他類似框架的經驗,你就能體會到根據不同條件拼接 SQL 語句有多麽痛苦。拼接的時候要確保不能忘了必要的空格,還要註意省掉列名列表最後
MyBatis動態SQL————MyBatis動態SQL標簽的用法
efi 數組 cnblogs 朋友 正常 scm jdbc pojo 動態語言 1.MyBatis動態SQL MyBatis 的強大特性之一便是它的動態 SQL,即拼接SQL字符串。如果你有使用 JDBC 或其他類似框架的經驗,你就能體會到根據不同條件拼接 SQL 語句有多
4.mybatis動態SQL拼接/取值/OGNL
align log 值方法 enter png 動態 mybatis框架 -a ognl 4.mybatis動態SQL拼接/取值 一、mybatis框架的SQL拼接是采用OGNL表達式進行的,以下我會列出常用的取值方法。 圖片來源:慕課網 1.1常用的取值方法: 1.2特