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

mybatis排序sql

發布時間: 2022-05-25 13:56:28

㈠ mybatis動態sql怎麼排序

具體點啊order by 。最多就是加判斷去拼接

㈡ 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>

㈢ mybatis中的sql語句中#和$的區別

1. #將傳入的數據都當成一個字元串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".

2. $將傳入的數據直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那麼解析成sql時的值為order by user_id, 如果傳入的值是id,則解析成的sql為order by id.

3. #方式能夠很大程度防止sql注入。

4.$方式無法防止Sql注入。
5.$方式一般用於傳入資料庫對象,例如傳入表名.

6.一般能用#的就別用$.
MyBatis排序時使用order by 動態參數時需要注意,用$而不是#
字元串替換
默認情況下,使用#{}格式的語法會導致MyBatis創建預處理語句屬性並以它為背景設置安全的值(比如?)。這樣做很安全,很迅速也是首選做法,有時你只是想直接在SQL語句中插入一個不改變的字元串。比如,像ORDER BY,你可以這樣來使用:
ORDER BY ${columnName}
這里MyBatis不會修改或轉義字元串。

重要:接受從用戶輸出的內容並提供給語句中不變的字元串,這樣做是不安全的。這會導致潛在的SQL注入攻擊,因此你不應該允許用戶輸入這些欄位,或者通常自行轉義並檢查。

㈣ mybatis中特殊SQL的幾種配置方法

1.in條件for循環
<select id="getBooList" resultMap="java.util.Map" parameterType="java.util.List" >
select booking_no, max(booking_general_seq) max_seq from interface_booking_t where booking_no in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
group by booking_no
</select>
2.insert並且返回主鍵
<insert id="insertAndGetId" parameterType="com.phy.mlisp.management.domain.Document">
<selectKey resultType="long" order="BEFORE" keyProperty="id">
SELECT MLISP_DOCUMENT_SEQ.NEXTVAL as ID from DUAL
</selectKey>
insert into MLISP_DOCUMENT_T (ID, NAME, ALIAS,
FILE_SIZE,CONTENT,STATUS,CREATE_BY,CREATE_DATE,LAST_UPDATE_BY,
LAST_UPDATE_DATE)
values (#{id},#{name,jdbcType=VARCHAR}, #{alias,jdbcType=VARCHAR},#{fileSize,jdbcType=INTEGER},
#{content,jdbcType=BLOB},
#{status,jdbcType=INTEGER},#{createBy,jdbcType=VARCHAR},SYSDATE,
#{lastUpdateBy,jdbcType=VARCHAR},SYSDATE)
</insert>

3.批量insert
<insert id="batchInsert" parameterType="java.util.List">
insert into INTERFACE_BOOKING_CONTA_T (ID, BOOKING_ID, BOOKING_CONTAINER_SEQ,
CONTA_TYPE, CONTA_SIZE, CONTA_QUANTITY,
CONTA_SIZE_TYPE_ISO)
select interface_booking_conta_seq.NEXTVAL,A.* from(
<foreach collection="list" item="item" index="index" separator="UNION ALL" >
(select #{item.bookingId,jdbcType=DECIMAL}, #{item.bookingContainerSeq,jdbcType=DECIMAL},
#{item.contaType,jdbcType=VARCHAR}, #{item.contaSize,jdbcType=VARCHAR}, #{item.contaQuantity,jdbcType=DECIMAL},
#{item.contaSizeTypeIso,jdbcType=VARCHAR} from al)
</foreach>) A
</insert>

4.批量更新
<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
UPDATE WCP_DISPATCH_CONTA_T
<set>
<if test="item.dispatchId != null">
DISPATCH_ID = #{item.dispatchId,jdbcType=DECIMAL},
</if>
</set>
WHERE DISPATCH_ID = #{item.dispatchId,jdbcType=DECIMAL}
</foreach>
</update>

㈤ 用mybatis開發sql怎麼寫

用Spring框架,在applicationContext.xml文件里配置以下內容:
<!-- 讀取db.properties文件的內容 -->
<util:properties id = "jdbc" location = "classpath:db.properties"/>
<!-- 配置DataSource -->
<bean id = "ds" class = "org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value = "#{jdbc.driver}"/>
<property name="url" value = "#{jdbc.url}"/>
<property name="username" value = "#{jdbc.user}"/>
<property name="password" value = "#{jdbc.pwd}"/>
</bean>

<!-- 配置SqlSessionFactoryBean -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入DataSource -->
<property name="dataSource" ref="ds"/>
<!-- 注入映射文件的位置信息 -->
<property name="mapperLocations" value="classpath:com/tarena/oss/entity/*.xml"/>
</bean>

<!--
配置MapperSourceConfigurer:
掃描制定包下面所有的類,
創建符合Mapp介面要求的對象,
並且會將創建好的對象放到spring容器裡面
-->
<bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入要掃描的包名 -->
<property name="basePackage" value = "com.tarena.oss."/>

</bean>
其中,要導入的包有:
mybatis-3.2.5.jar
mybatis-spring-1.2.2.jar
寫好實體類之後,在創建一個mapper.xml文件。
註:實體類的屬性名一定要和表的欄位名一致。在mapper.xml映射文件里寫sql語句。格式為:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="的路徑名">

<!--
查詢。
parameterType:如果返回值是一個整數,標准用法是java.lang.Integer,
可以簡寫為"int"。
-->
<select id = "和裡面的方法名一致" parameterType="參數類型"
resultType="com.tarena.oss.entity.Admin">
查詢的sql語句
</select>
<!--
使用resultMap來解決實體類的屬性名,與表的欄位名不一致的情況。
type屬性: 實體類的名字。
property屬性: 實體類的屬性名。
column屬性: 表的欄位名。
注:如果屬性名與欄位名一樣,就不用寫了。
-->
</mapper>
其他語句在<mapper></mapper>里寫,方法和select一樣。

希望可以幫到你!

㈥ mybatis怎麼執行sql語句值

例如在一個 XXMapper.xml 中:
?

1
2
3

<select id="executeSql" resultType="map">
${_parameter}
</select>

你可以如下調用:
?

1

sqlSession.selectList("executeSql", "select * from sysuser where enabled = 1");

或者你可以在 XXMapper.java 介面中定義如下方法:
?

1

List<Map> executeSql(String sql);

然後使用介面調用方法:
?

1

xxMapper.executeSql("select * from sysuser where enabled = 1");

上面這些內容可能都會,下面在此基礎上再復雜一點。
假如像上面SQL中的enabled = 1我想使用參數方式傳值,也就是寫成 enabled = #{enabled},如果你沒有遇到過類似這種需求,可能不明白為什麼要這么寫,舉個例子,要實現一種動態查詢,可以在前台通過配置 SQL,提供一些查詢條件就能實現一個查詢的功能(為了安全,這些配置肯定是開發或者實施做的,不可能讓用戶直接操作資料庫)。
針對這個功能,使用 MyBatis 實現起來相當容易。配置 SQL 肯定要執行,用上面講的這種方式肯定可以執行 SQL,如何提供參數呢?參數就是enabled = #{enabled}中的#{enabled}部分。如果再多一些條件,一個配置好的 SQL 如下:
?

1
2
3

select * from sysuser
where enabled = #{enabled}
and userName like concat('%',#{userName},'%')

這種情況下,該怎麼用 MyBatis 實現呢?
首先 XML 中修改如下:
?

1
2
3

<select id="executeSql" resultType="map">
${sql}
</select>

介面中的方法修改為:
?

1

List<Map> executeSql(Map map);

然後調用方法:
?

1
2
3
4
5
6
7
8
9
10
11
12
13

Map map = new HashMap();
//這里的 sql 對應 XML 中的 ${sql}
map.put("sql", "select * from sysuser "
+ " where enabled = #{enabled} "
+ " and userName like concat('%',#{userName},'%')");
//#{enabled}
map.put("enabled", 1);
//#{userName}
map.put("userName", "admin");
//介面方式調用
List<Map> list = xxMapper.executeSql(map);
//sqlSession方式調用

㈦ spring mvc mybatis sql倒序查詢怎麼寫

後面直接加上select
*
from tchc_details
where tchc_update_id = #{tchcUpdateId,jdbcType=INTEGER} order by tchc_update_id desc 試試

㈧ 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 orderbyclause怎麼用

字元串替換。

默認情況下,使用#{}格式的語法會導致MyBatis創建預處理語句屬性並以它為背景設置安全的值(比如?)。這樣做很安全,很迅速也是首選做法,有時你只是想直接在SQL語句中插入一個不改變的字元串。比如,像ORDER BY,你可以這樣來使用:

ORDER BY ${columnName}

這里MyBatis不會修改或轉義字元串。

重要:接受從用戶輸出的內容並提供給語句中不變的字元串,這樣做是不安全的。這會導致潛在的SQL注入攻擊,因此你不應該允許用戶輸入這些欄位,或者通常自行轉義並檢查。

MyBatis排序:

MyBatis排序時,ORDER BY 後的參數應該形如:ORDER BY ${sname} ${sord}

sname : 排序欄位

sord : 排序順序 (ASC,DESC)

MyBatis排序時,ORDER BY 後的參數如果形如:ORDER BY #{sname} #{sord}

sname : 排序欄位

sord : 排序順序 (ASC,DESC)

則不能返回想當然正確的結果。

(9)mybatis排序sql擴展閱讀:

各類編程語言:

C語言即中文版的C語言。

O語言O語言是一款中文計算機語言(或稱套裝:O匯編語言、O中間語言、O高級語言)。

AAuto是專用於桌面軟體快速開發的新型混合型編程語言。

APL、A+和J。

Ada是一種表現能力很強的通用程序設計語言。

ActionScriptActionScript是Flash的腳本語言,與JavaScript相似,ActionScript是一種面向對象編程語言。

AWKAWK是一種優良的文本處理工具。

Basic是一種設計給初學者使用的程序設計語言。

Brainfuck是一種極小化的計算機語言。

C++、C#: C語言是一種面向過程的計算機程序設計語言; C++是一種靜態數據類型檢查的,支持多重編程範式的通用程序設計語言。

它支持過程化程序設計、數據抽象、面向對象程序設計、製作圖標等等泛型程序設計等多種程序設計風格。C#是微軟公司發布的一種面向對象的、運行於 .NET Framework 之上的高級程序設計語言。

網路—編程