Mybatis4 之Mybatis動態sql的實現代碼_MsSql

來源:腳本之家  責任編輯:小易  

這個區別不是很大,最主要的區別就是mybatis簡化了編碼的過程,不需要去寫dao的實現類,直接寫一個dao的接口,再寫一個xml配置文件,整個mybatis就配置好了,也就是數據庫就連接好了,然后在zdservice里面直接調用dao就可以了,但是ibatis則不可以,必須要回寫dao的實現類,再寫個return getSqlMapClientTemplate().queryForList()神馬的,mybatis是ibatis的升級版本。還有些區別就是xml里面的sql語句的寫法有些小變化,但是不大。Mybatis 實現了接口綁定,使用更加方便。在ibatis2.x中我們需要在DAO的實現類中指定具體對應哪個xml映射文件,而Mybatis實現了DAO接口與xml映射文件的綁定,自動為我們生成接口的具體實現,使用起來變得更加省事和方便。這可以說是Mybatis最重要的改答進www.13333515.buzz防采集請勿采集本網。

1.什么是動態SQL

1、基本信息不同 mybatis:MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單

傳統的使用JDBC的方法,相信大家在組合復雜的的SQL語句的時候,需要去拼接,稍不注意哪怕少了個空格,都會導致錯誤。Mybatis的動態SQL功能正是為了解決這種問題, 其通過 if, choose, when, otherwise, trim, where, set, foreach標簽,可組合成非常靈活的SQL語句,從而提高開發人員的效率。

Batis的返回值參數類型也有種:resultMap與resultClass 這兩種類型的選擇可以用兩句話說明之: 一:當結果集列名和類的屬性名完全相對應的時候,則可直接用resultClass直接指定查詢結果類型。二

SQL語句不固定, 會根據前臺用戶的操作而進行變化的SQL語句, 可以被稱之為動態SQL. 在MyBatis中, 提供了一組標簽, 用于方便的實現動態SQL, 不需要通過java代碼拼接字符串了.

可以不寫。但是需要在mapper接口中采用注解的方式將參數注解進去

###2.動態sql中的標簽

{\"total\":100,\"rows\":[{\"name\":\"張三\",\"id\":1},{\"name\":\"李四\",\"id\":2}]} 需要注意的是: 返回結果必須是JSON格式而不是普通字符串。2.注意JSON字符串中的單雙引號轉義。【建議】在服務端Java代碼中使用

1. <if>

Mybatis有三種基本的Executor執行器,SimpleExecutor、ReuseExecutor、BatchExecutor。SimpleExecutor:每執行一次update或select,就開啟一個Statement對象,用完立刻關閉Statement對象。

用于條件判斷, test屬性表示判斷結果, 要求是一個boolean.

2.<where>

用于維護where子句, 通常配合一起使用. 如下功能:

a)當沒有條件時, 不會創建WHERE關鍵字;

b)當有條件時, 會自動生成WHERE關鍵字;

c)會自動去掉第一個條件的and/or關鍵字.

3.<choose><when><otherwise>

功能類似于switch…case…default, 表示多分支判斷, 只能成立一個條件

<mapper namespace="com.bjsxt.mapper.UserMapper"> <select id="selByCondition" resultType="user"> select * from tb_user <where> <if test="id != null"> and id=#{id} </if> <if test="username != null and username != ''"> and username=#{username} </if> <if test="age != null"> and age &lt;&gt; #{age} </if> <choose> <when test="birthday != null and birthday != ''"> and birthday = #{birthday} </when> <otherwise> and birthday is null </otherwise> </choose> </where> </select></mapper>

4.<bind>

對參數進行加工, 通常用于模糊查詢給參數加通配符

<select id="sel2" resultType="user"> <include refid="base_sql" /> <where> <if test="realname != null and realname != ''"> <bind name="realname" value="'%' + realname + '%'"/> and realname like #{realname} </if> </where></select>

5.<include>

配合使用, 用于提取通用sql語句片段, 用于引用SQL片段

<sql id="base_sql"> select id, username, password, realname, age, birthday, reg_time regTime from tb_user</sql><select id="sel2" resultType="user"> <include refid="base_sql" /> <where> <if test="realname != null and realname != ''"> <bind name="realname" value="'%' + realname + '%'"/> and realname like #{realname} </if> </where></select>

6.<set>

用于維護update語句中的set子句, 特點是可以刪除多余的逗號

<update id="upd"> update tb_user <set> <if test="username != null and username != ''"> username=#{username}, </if> <if test="age != null"> age=#{age} </if> </set> where id=#{id}</update>

7.<foreach>

遍歷集合(數組, List, Set, Map), 通常用于in操作或批量新增. 屬性簡介:

a)collection: 要遍歷的集合

b)item: 迭代項

c)open: 以什么字符開頭

d)close: 以什么字符結束

e)separator: 多個迭代項之間的分隔符

<delete id="delBatch"> delete from tb_user <where> id in <foreach collection="ids" item="id" open="(" close=")" separator=","> #{id} </foreach> </where></delete>

8.<trim>

在語句的前后進行追加和去除指定的字符.

<insert id="insBatch"> insert into tb_user values <foreach collection="users" item="user" separator=","> <trim prefix="(" prefixOverrides="," suffix=")" suffixOverrides=","> ,default, #{user.username}, #{user.password}, #{user.realname}, #{user.age}, #{user.birthday}, now(), </trim> </foreach></insert>

知識點補充:靜態sql與動態sql有什么區別

SQL 語句從編譯和運行的角度可以分為兩種,靜態 SQL和 動態 SQL,這兩種 SQL 在使用方式、運行機制和性能表現等方面各有特點 :

靜態 SQL:靜態 SQL 語句一般用于嵌入式 SQL 應用中,在程序運行前,SQL 語句必須是確定的,例如 SQL 語句中涉及的列名和表名必須是存在的。靜態 SQL 語句的編譯是在應用程序運行前進行的,編譯的結果會存儲在數據庫內部。而后程序運行時,數據庫將直接執行編譯好的 SQL 語句,降低運行時的開銷。

動態 SQL:動態 SQL 語句是在應用程序運行時被編譯和執行的,例如,使用 DB2 的交互式工具 CLP 訪問數據庫時,用戶輸入的 SQL 語句是不確定的,因此 SQL 語句只能被動態地編譯。動態 SQL 的應用較多,常見的 CLI 和 JDBC 應用程序都使用動態 SQL。

靜態sql:語句類型在編程時候必須是確定好的。比如

select * from employee where empno='abc'select * from employee where empno='12'

都必須是確定的,唯一可以變化的是abc的值。

動態sql:語句類型可以在運行期間指定,比如clp就是最典型的動態sql程序,你可以輸入任何命令。

靜態sql的存取路徑是在運行前就確定好的,而動態sql的存取路徑是在運行時動態生成的。因此生成的存取計劃相對更優,但考慮到生成存取路徑的開銷,有可能應用程序的運行時間相對會比靜態sql長些。

總結

到此這篇關于Mybatis4 之Mybatis動態sql的實現代碼的文章就介紹到這了,更多相關mybatis動態sql內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

1、DAO層代碼可以通過現有插件直接生成,大大提高編碼效率和準確性(相比手工coding的失誤等);2、mybatis已有的連接池管理,緩存管理等所帶來的代碼性能優勢和可靠性(作為一個工業級的開源框架,其代碼是久經考驗的);3、一致的編碼風格大大減少了代碼的溝通交流成本;4 mybatis自動提供了一級和二級緩存(需要配置打開),強大的動態sql,自動化的session管理,都比手工維護來的方便和安全5,面向對象的開發效率會更高,畢竟可以自動生成數據庫表的Model對象,少寫一些基本sql。建議使用,不管是否團隊作業6.不用重復寫resultset到domain的轉化了。7.JDBC想要取到自己封裝mybatis的association和collection你就會就頭大了內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • mybatis的動態sql語句實現
  • mybatis實現動態sql的實現方法
  • mybatis中的動態sql語句解析
  • mybatis動態sql之if標簽的用法詳解
  • mybatis動態sql之map參數的講解
  • mybatis模糊查詢和動態sql語句的用法
  • mybatis動態sql實現配置過程解析
  • mssql和sqlite中關于if not exists 的寫法
  • having的用法以及與where區別介紹
  • 返回sql執行時間的存儲過程
  • sql server代理服務無法啟動的解決方法
  • transactional replication(事務復制)詳解之如何跳過一個事務
  • sql server中的forwarded record計數器影響io性能的解決方法
  • sql server 如何去掉內容里面的html標簽
  • sqlserver中with(nolock)深入分析
  • sql server中清空所有數據表中的記錄
  • 該行已經屬于另一個表 的解決方法
  • jdbc和mybatis的區別
  • mybatis和ibatis的區別
  • 什么是mybatis?
  • myBatis的優缺點?
  • mybatis和ibatis的區別
  • mybatis 都能返回什么類型啊
  • mybatis parametertype可以不寫嗎
  • mybatis 中row 和 total什么意思
  • mybatis都有哪些executo執行器,它們之間的區別是什么
  • mybatis 中in 怎么用
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁mssqlmybatis的動態sql語句實現mybatis實現動態sql的實現方法mybatis中的動態sql語句解析mybatis動態sql之if標簽的用法詳解mybatis動態sql之map參數的講解mybatis模糊查詢和動態sql語句的用法mybatis動態sql實現配置過程解析mssql和sqlite中關于if not exists 的寫法having的用法以及與where區別介紹返回sql執行時間的存儲過程sql server代理服務無法啟動的解決方法transactional replication(事務復制)詳解之如何跳過一個事務sql server中的forwarded record計數器影響io性能的解決方法sql server 如何去掉內容里面的html標簽sqlserver中with(nolock)深入分析sql server中清空所有數據表中的記錄該行已經屬于另一個表 的解決方法sql server 2012 安裝圖解教程(附sql server數據庫入門學習總結microsoft sql server 2012 數據sql重復記錄查詢的幾種方法win7系統安裝sqlserver2000的詳細sqlserver中distinct的用法(不重sql server錯誤代碼大全及解釋(sql-order by 多字段排序(升序、sql將一個表中的數據插入到另一個用sql語句添加刪除修改字段、一些sqlserver 數據庫連接字符串中的可選項收sql server誤區30日談 第26天 sql server一個分頁存儲過程代碼教你怎么使用sql游標實例分享編程經驗點滴 動態sql的拼接技巧sqlserver登陸后報不能為空不能為null的錯sqlserver 動態創建臨時表的語句分享sql_server全文索引的使用實例演示sql服務器無法啟動的解決方法sql with as用法詳解
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果