當前位置:首頁 » 編程語言 » mybatis中if標簽里用sql語句
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

mybatis中if標簽里用sql語句

發布時間: 2023-03-23 00:09:50

Ⅰ 如何實現基於註解mybatis動態拼寫sql語句

在spring中配置
<,-- 通過掃描的模式,掃描目錄在com.mrorder.目錄下,所有的mapper都繼承SqlMapper介面的介面 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mrorder."/>
<property name="markerInterface" value="com.mrorder..SqlMapper"/>
</bean>

自己寫層方法的介面
public interface OrderMapper extends SqlMapper{

@Select("select * from tbl_order where room like #{room} and mydate like #{mydate}")
public List<Order> getbyroom(OrderPara op);

}
這樣整個語句是寫死的,必須有2個參數,在這種模式下,如何能實現根據room和mydate是否為空來動態的拼寫sql語句
比如當mydate=""
Select("select * from tbl_order where room like #{room} ")
public List<Order> getbyroom(OrderPara op);
如果用xml來配置語句的話,可以用<when test="title ,= null">
and mydate= #{mydate}
</when>
如果是用@Select 這種 改如何做呢?
利用自定義註解,通過反射,拼出SQL語句。

Ⅱ Mybatis寫SQL能if中套if嗎

可以的
Mybatis動態SQL單旁弊一基礎類型春絕參數用if標簽時,test中應該用 _parameter,如:

Java代碼
<select id="selectByName" resultMap="ResultMap" parameterType="java.lang.String" >
select * from table1
<if test="_parameter != null">扒啟姿
where _name = #{name}
</if>
</select>

Ⅲ mybatis 怎麼寫sql語句

mybatis的sql和你在資料庫客戶端執行的sql是一樣的,但是在mybatis中調用的sql一般都是動態的,所以用到了參數傳遞。這個mybatis有對應的標簽以及相應的變數來實現。你可以搜索下mybatis標簽。同時給你一個參考的你看看,這個是一個查詢用戶的
<select id="queryUsers" parameterType="map" resultType="xx.xx.xx.bean.UserBean">
<![CDATA[
select
ID,
LOGIN_NAME AS loginName,
PASSWORD,
REAL_NAME AS realName,
POSITION,
(SELECT D.POSITION_NAME FROM UNIT_POSITION D WHERE D.POSITION_CODE=T.POSITION) POSITIONNAME,
USER_TYPE AS userType,
SEX,
PID,
TO_CHAR(T.BIRTHDAY,'YYYY-MM-DD') BIRTHDAY,
EMAIL,
CONTACT_TEL AS contactTel,
CONTACT_MOBILE AS contactMobile,
CONTACT_FAX AS contactFax,
CONTACT_ZIP AS contactZip,
CONTACT_ADDR AS contactAddr,
STATUS,
EDUCATION,
(SELECT D.EDUCATION_NAME FROM UNIT_EDUCATION D WHERE D.EDUCATION_CODE=T.EDUCATION AND D.STATUS=0) EDUCATIONNAME,
NATION,
POLITICAL,
REMARK,
TO_CHAR(T.CREATE_DATE,'YYYY-MM-DD HH24:MI:SS') createDate,
(SELECT D.REAL_NAME FROM UNIT_USER D WHERE D.ID= T.CREATE_USER_ID) createUserId,
TO_CHAR(T.UPDATE_DATE,'YYYY-MM-DD HH24:MI:SS') updateDate,
(SELECT D.REAL_NAME FROM UNIT_USER D WHERE D.ID= T.UPDATE_USER_ID) updateUserId
from UNIT_USER T
]]>
<where>
T.STATUS='1'
<if test="realName !=null and realName !=''">
and T.REAL_NAME like '%${realName}%'
</if>
<if test="nexusDpartment !=null">
AND T.ID IN (SELECT DISTINCT D.USER_ID FROM UNIT_USER_DEPT D WHERE D.DEPT_CODE IN (${nexusDpartment}))
</if>
<if test="deptCode !=null and deptCode !=''">
AND T.ID IN (SELECT DISTINCT D.USER_ID FROM UNIT_USER_DEPT D WHERE D.DEPT_CODE = #{deptCode})
</if>
</where>
<if test="sort != null and sort != ''">
order by ${sort}
<if test="direction != null and direction != ''">
${direction}
</if>
</if>
</select>

Ⅳ mybatis中動態sql語句的實際應用場景是怎麼樣的,比如說if,具體在什麼情況下可以使用,給高分,謝謝!

<where>
<trim prefixOverrides="and">
<if test="id!=null">
and c.id=#{id}
</if>
<if test="oid!=null and oid!=0">
and b.id=#{oid}
</if>
<if test="startDate!=null">
<if test="endDate!=null">
and a.pay_time BETWEEN #{startDate} AND #{endDate}
</if>
</if>
</trim>
</where>
service層如果參數為null,mybatis執行sql語句的時候就不會去拼接你指定的if標簽中的sql語句

Ⅳ mybatis select if條件判斷可以執行sql語句嗎

<where></where>相當於sql語句侍運中的where關鍵字。
這個標凱旦簽還有一個功能就是自動會去掉第一個and.,比如下面兩句sql代碼,如果第一個滿足的那麼就會去掉and這個關鍵字。

-->
<where>
<if test="userCustom!=null">
<if test="盯談擾userCustom.sex!=null and userCustom.sex!=''">
and user.sex= #{userCustom.sex}
</if>
<if test="userCustom.username!=null and userCustom.username!=''" >

and user.username=#{userCustom.username}
</if>

</if>

Ⅵ mybatis中動態sql語句有哪些

mybatis的動態sql是基於ognl表達式的,它可以幫助我們方便的在sql語句中實現某些邏輯。
mybatis中用於實現動態sql的元素主要有:
if
choose(when,otherwise)
trim
where
set
foreach
http://www.open-open.com/lib/view/open1326100765125.html
詳細可以參考這個,有圖解教程,希望可以幫到你

Ⅶ mybatis if where標簽怎麼使用

先看不加判斷的sql語句怎麼寫?

.

我們看到where和and。也就是說,當username和sex都有值的時候 使用where和and

那如果只有sex怎麼辦?或者只有username怎麼辦?這種情況下,上面語句就會出問題了。

所以,可以使用where標簽和if標簽。

小二,先上截圖,給大爺們看看,然後咱們在講解。

在Mapper-User.xml文件中:

.

接下來講解where、if標簽含義:肢滑

<where>:聲明where標簽開始

</where>:表示where標簽結束

<if>:if標簽開始

test:是判斷的表達式。

注意,在表達式中並且是用字母and而非使用&符號

字元串判斷雙引號套單引號使用

</if>:if標簽結束

.

where標簽會自動判斷前面是否有欄位,如果有欄位會使用and sex=${sex}這個語句。

如果沒有欄位,and會被忽略直接跟在where後面。

也就是說,如果蔽飢碼username為空但是sex不為空的話。輸入的sql又是什麼?

username和sex都存在的測試類:

.

執行後控制台宏哪輸入的sql語句為:

.

如果username為空只有sex有值,會報錯嗎?

請看測試類:

.

再看,執行後輸出的sql語句:

Ⅷ mybatis里的頁面的if標簽怎麼用

[html]
view
plain

如果
userqueryvo中傳入查詢條件,再進行sql拼接
test中usercustom.username表示從userqueryvo讀取屬性值
and
username
like
'%${usercustom.username}%'
and
sex
=
#{usercustom.sex}
根據id集合查詢用戶信息
最終拼接的效果:
select
id
,username
,birthday
from
user
where
username
like
'%小明%'
and
id
in
(16,22,25)
collection:集合的屬性
open:開始循環拼接的串
close:結束循環拼接的串
item:每次循環取到的對象
separator:每兩次循環中間拼接的串
#{id}
select
id
,username
,birthday
from
user
where
username
like
'%小談讓明%'
and
(id
=
16
or
id
=
22
or
id
=
25)
<foreach
collection="ids"
open="
and
(
"
close=")"
item="id"
separator="or">
id
=
#{id}

還有很的查詢條件
[html]
view
plain

select
id,username,birthday
from
user
where標簽相當
於where關鍵字,可以自動去除第一個and
引用sql片段,並侍納如果sql片段和引用處不在同一個mapper必須前邊加namespace
下邊還有很其它的條件
<include
refid="其它的sql片段絕沒">

Ⅸ mybatis中sql語句怎麼寫

<select id="queryUsers" parameterType="map" resultType="xx.xx.xx.bean.UserBean">
<![CDATA[
select
ID,
LOGIN_NAME AS loginName,
PASSWORD,
REAL_NAME AS realName,
POSITION,
(SELECT D.POSITION_NAME FROM UNIT_POSITION D WHERE D.POSITION_CODE=T.POSITION) POSITIONNAME,
USER_TYPE AS userType,
SEX,
PID,
TO_CHAR(T.BIRTHDAY,'YYYY-MM-DD') BIRTHDAY,
EMAIL,
CONTACT_TEL AS contactTel,
CONTACT_MOBILE AS contactMobile,
CONTACT_FAX AS contactFax,
CONTACT_ZIP AS contactZip,
CONTACT_ADDR AS contactAddr,
STATUS,
EDUCATION,
(SELECT D.EDUCATION_NAME FROM UNIT_EDUCATION D WHERE D.EDUCATION_CODE=T.EDUCATION AND D.STATUS=0) EDUCATIONNAME,
NATION,
POLITICAL,
REMARK,
TO_CHAR(T.CREATE_DATE,'YYYY-MM-DD HH24:MI:SS') createDate,
(SELECT D.REAL_NAME FROM UNIT_USER D WHERE D.ID= T.CREATE_USER_ID) createUserId,
TO_CHAR(T.UPDATE_DATE,'YYYY-MM-DD HH24:MI:SS') updateDate,
(SELECT D.REAL_NAME FROM UNIT_USER D WHERE D.ID= T.UPDATE_USER_ID) updateUserId
from UNIT_USER T
]]>
<where>
T.STATUS='1'
<if test="realName !=null and realName !=''">
and T.REAL_NAME like '%${realName}%'
</if>
<if test="nexusDpartment !=null">
AND T.ID IN (SELECT DISTINCT D.USER_ID FROM UNIT_USER_DEPT D WHERE D.DEPT_CODE IN (${nexusDpartment}))
</if>
<if test="deptCode !=null and deptCode !=''">
AND T.ID IN (SELECT DISTINCT D.USER_ID FROM UNIT_USER_DEPT D WHERE D.DEPT_CODE = #{deptCode})
</if>
</where>
<if test="sort != null and sort != ''">
order by ${sort}
<if test="direction != null and direction != ''">
${direction}
</if>
</if>
</select>