MyBatis 入門到精通(二) SQL語句映射XML文件

MyBatis 真正強大之處就在這些映射語句,也就是它的魔力所在。對于它的強大功能,SQL 映射文件的配置卻非常簡單。

如果您比較SQL 映射文件配置與JDBC 代碼,您很快可以發現,使用SQL 映射文件配置可以節省95%的代碼量。MyBatis 被創建來專注于SQL,但又給您自己的實現極大的空間。

?

需要配置的基本元素

1. cache – 配置給定模式的緩存

2. cache-ref – 從別的模式中引用一個緩存

3. resultMap – 這是最復雜而卻強大的一個元素了,它描述如何從結果集中加載對象

4. sql – 一個可以被其他語句復用的SQL 塊

5. insert – 映射INSERT 語句

6. update – 映射UPDATE 語句

7. delete – 映射DELEETE 語句

8. select - 映射SELECT語句

?

?

配置注意

SQL 映射XML 文件只有一些基本的元素需要配置,并且要按照下面的順序來定義
寫好SQL語句映射文件后,需要在MyBAtis主配置文件mappers標簽中引用!
例如:
[html]?view plaincopy
  1. <!--mappers是告訴MyBatis?去哪尋找映射SQL?的語句。可以使用類路徑中的資源引用,或者使用字符,輸入確切的URL?引用。-->??
  2. <mappers>??
  3. ????<mapper?resource="com/accp/mybatis/data/BlogMapper.xml"?/>??
  4. </mappers>??

?

當Java接口與XML文件在一個相對路徑下時,可以不在myBatis配置文件的mappers中聲明。

?

?

?

SQL?

這個元素可以被用來定義可重用的SQL代碼段,可以包含在其他語句中。

?

例子請看下面select中例子

?

?

SELECT

mybatis select是mybatis 中最常用的元素之一。
對簡單的查詢,select 元素的配置是相當簡單的:
[html]?view plaincopy
  1. <?xml?version="1.0"?encoding="UTF-8"??>??
  2. <!DOCTYPE?mapper??
  3. PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"??
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">??
  5. <mapper?namespace="com.accp.mybatis.model.Blog">??
  6. ??????
  7. ????<!--可重用的SQL代碼段-->??
  8. ????<sql?id="blog_column">id,title,author_id?as?authorId</sql>??
  9. ??????
  10. ????<select?id="selectBlog_as_map"?parameterType="int"?resultType="hashmap">??
  11. ????????select?<include?refid="blog_column"/>?from?Blog?where?id?=?#{id}??
  12. ????</select>??
  13. ??????
  14. </mapper>??

?這個語句被稱作selectBlog_as_map,使用一個int (或Integer)類型的參數,并返回一個HashMap類型的對象

?

#{id}告訴mybatis創建了一個PreparedStatement(預處理語句)參數。

在JDBC中,類似的代碼如下:

?

[java]?view plaincopy
  1. String?selectBlog_as_map?=?“select?*?from?Blog?where?id?=?”;???
  2. PreparedStatement?ps?=?conn.prepareStatement(selectBlog_as_map);???
  3. ps.setInt(1,id);???
測試代碼:
[java]?view plaincopy
  1. public?static?void?selectBlogAsMap(int?id)?{??
  2. ????SqlSession?session?=?sqlMapper.openSession();??
  3. ????Map<String,?Object>?map?=?session.selectOne("selectBlog_as_map",id);??
  4. ????System.out.println(map);??
  5. ????session.close();??
  6. }??


?

SELECT的屬性還有很多的屬性可以配置,具體的如下:
屬性描述取值默認
id在這個模式下唯一的標識符,可被其它語句引用??
parameterType傳給此語句的參數的完整類名或別名??
resultType語句返回值類型的整類名或別名。注意,如果是集合,
那么這里填寫的是集合的項的整類名或別名,而不是集合本身的類名。
(resultType 與resultMap 不能并用)
??
resultMap引用的外部resultMap 名。結果集映射是MyBatis 中最強大的特性。
許多復雜的映射都可以輕松解決。(resultType 與resultMap 不能并用)
??
flushCache如果設為true,則會在每次語句調用的時候就會清空緩存。select 語句默認設為falsetrue|falsefalse
useCache如果設為true,則語句的結果集將被緩存。select 語句默認設為false true|false false
timeout 設置驅動器在拋出異常前等待回應的最長時間,默認為不設值,由驅動器自己決定
true|falsefalse
timeout設置驅動器在拋出異常前等待回應的最長時間,默認為不設值,由驅動器自己決定正整數未設置
fetchSize設置一個值后,驅動器會在結果集數目達到此數值后,
激發返回,默認為不設值,由驅動器自己決定
正整數驅動器決定
statementTypestatement,preparedstatement,callablestatement。
預準備語句、可調用語句
STATEMENT
PREPARED
CALLABLE
PREPARED
resultSetTypeforward_only,scroll_sensitive,scroll_insensitive
只轉發,滾動敏感,不區分大小寫的滾動
FORWARD_ONLY
SCROLL_SENSITIVE
SCROLL_INSENSITIVE
驅動器決定

?

INSERT

簡單的insert語句:
[html]?view plaincopy
  1. <?xml?version="1.0"?encoding="UTF-8"??>??
  2. <!DOCTYPE?mapper??
  3. PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"??
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">??
  5. <mapper?namespace="com.accp.mybatis.model.Blog">??
  6. ??
  7. ????<insert?id="insertBlog"?parameterType="Blog">??
  8. ????????insert?into?Blog??
  9. ????????????(id,title,author_id)??
  10. ????????values??
  11. ????????????(#{id},#{title},#{authorId})??
  12. ????</insert>??
  13. ??
  14. </mapper>??

對于insert如果你的數據庫支持自動生成主鍵的字段(比如 MySQL 和 SQL Server),那么你可以設置 useGeneratedKeys=”true”,然后把keyProperty 設成對應的列,就搞定了。

例如Blog表已經對 id 使用了自動生成的列類型,那么語句如下:

?

[html]?view plaincopy
  1. <?xml?version="1.0"?encoding="UTF-8"??>??
  2. <!DOCTYPE?mapper??
  3. PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"??
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">??
  5. <mapper?namespace="com.accp.mybatis.model.Blog">??
  6. ??
  7. ????<insert?id="insertBlog"?parameterType="Blog"?useGeneratedKeys=”true”?keyProperty=”id”>??
  8. ????????insert?into?Blog??
  9. ????????????(title,author_id)??
  10. ????????values??
  11. ????????????(#{title},#{authorId})??
  12. ????</insert>??
  13. ??????
  14. </mapper>??


還可以使用selectKey元素。下面例子,使用mysql數據庫nextval('student')為自定義函數,用來生成一個key。

?

例如:

?

[html]?view plaincopy
  1. <?xml?version="1.0"?encoding="UTF-8"??>??
  2. <!DOCTYPE?mapper??
  3. PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"??
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">??
  5. <mapper?namespace="com.accp.mybatis.model.Blog">??
  6. ????<insert?id="insertBlog"?parameterType="Blog"?>??
  7. ????????<selectKey?keyProperty="studentID"?resultType="String"?order="BEFORE">????
  8. ???????????select?nextval('id')????
  9. ????????</selectKey>????
  10. ????????insert?into?Blog??
  11. ????????????(id,title,author_id)??
  12. ????????values??
  13. ????????????(#{id},#{title},#{authorId})??
  14. ????</insert>???
  15. </mapper>??



?

insert語句屬性配置細節:

屬性描述取值默認
id在這個模式下唯一的標識符,可被其它語句引用??
parameterType傳給此語句的參數的完整類名或別名??
flushCache如果設為true,則會在每次語句調用的時候就會清空緩存。select 語句默認設為falsetrue|falsefalse
useCache如果設為true,則語句的結果集將被緩存。select 語句默認設為false true|false false
timeout 設置驅動器在拋出異常前等待回應的最長時間,默認為不設值,由驅動器自己決定
true|falsefalse
timeout設置驅動器在拋出異常前等待回應的最長時間,默認為不設值,由驅動器自己決定正整數未設置
fetchSize設置一個值后,驅動器會在結果集數目達到此數值后,激發返回,默認為不設值,由驅動器自己決定正整數驅動器決定
statementTypestatement,preparedstatement,callablestatement。
預準備語句、可調用語句
STATEMENT
PREPARED
CALLABLE
PREPARED
useGeneratedKeys

告訴MyBatis 使用JDBC 的getGeneratedKeys 方法來獲取數據庫自己生成的主鍵(MySQL、SQLSERVER 等

關系型數據庫會有自動生成的字段)。默認:false

true|falsefalse
keyProperty

標識一個將要被MyBatis 設置進getGeneratedKeys 的key 所返回的值,或者為insert 語句使用一個selectKey

子元素。

??

?

?

selectKey語句屬性配置細節:

?

屬性描述取值
keyPropertyselectKey 語句生成結果需要設置的屬性。?
resultType生成結果類型,MyBatis 允許使用基本的數據類型,包括String 、int類型。?
order可以設成BEFORE 或者AFTER,如果設為BEFORE,那它會先選擇主鍵,
然后設置keyProperty,再執行insert語句;如果設為AFTER,它就先運行insert 語句再運行selectKey 語句,
通常是insert 語句中內部調用數據庫(像Oracle)內嵌的序列機制。
BEFORE
AFTER
statementType像上面的那樣, MyBatis 支持STATEMENT,PREPARED和CALLABLE 的語句形式,
?對應Statement ,PreparedStatement 和CallableStatement 響應
STATEMENT
PREPARED
CALLABLE

?

UPDATE,DELETE

update 簡單例子:
[html]?view plaincopy
  1. <?xml?version="1.0"?encoding="UTF-8"??>??
  2. <!DOCTYPE?mapper??
  3. PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"??
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">??
  5. <mapper?namespace="com.accp.mybatis.model.Blog">??
  6. ????<update?id="updateBlog"?parameterType="Blog">????
  7. ???????UPDATE?Blog????
  8. ????????????SET?title?=?#{title},?????
  9. ????????????????author_id?=?#{author.id},????
  10. ?????????WHERE?id?=?#{id};??
  11. ????</update>????
  12. </mapper>??

delete 簡單例子:
[html]?view plaincopy
  1. <delete?id="deleteBlog"?parameterType="Blog">????
  2. ??????DELETE?FROM?BLOG?WHERE?ID?=?#{id}????
  3. </delete>??

update、delete語句屬性配置細節:

?

屬性描述取值默認
id在這個模式下唯一的標識符,可被其它語句引用??
parameterType傳給此語句的參數的完整類名或別名??
flushCache如果設為true,則會在每次語句調用的時候就會清空緩存。select 語句默認設為falsetrue|falsefalse
useCache如果設為true,則語句的結果集將被緩存。select 語句默認設為false true|false false
timeout 設置驅動器在拋出異常前等待回應的最長時間,默認為不設值,由驅動器自己決定
true|falsefalse
timeout設置驅動器在拋出異常前等待回應的最長時間,默認為不設值,由驅動器自己決定正整數未設置
fetchSize設置一個值后,驅動器會在結果集數目達到此數值后,激發返回,默認為不設值,由驅動器自己決定正整數驅動器決定
statementTypestatement,preparedstatement,callablestatement。
預準備語句、可調用語句
STATEMENT
PREPARED
CALLABLE
PREPARED

Parameters

這個元素說的直白點就是定義參數。注意一個語句中只能有一個參數。
所以參數類型在以后的使用中,可能需要復雜的類型,比如hashmap,一個復雜的對象等。例如:
[html]?view plaincopy
  1. <?xml?version="1.0"?encoding="UTF-8"??>??
  2. <!DOCTYPE?mapper??
  3. PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"??
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">??
  5. <mapper?namespace="com.accp.mybatis.model.Blog">??
  6. ??????
  7. ????<insert?id="insertBlog"?parameterType="Blog">??
  8. ????????insert?into?Blog??
  9. ????????????(id,title,author_id)??
  10. ????????values??
  11. ????????????(#{id},#{title},#{author.id})??
  12. ????</insert>??
  13. </mapper>??


如果blog類型的參數對象傳遞到了語句中,id、title和author屬性將會被查找,然后它們的值就被傳遞到預處理語句的參數中。
這點對于傳遞參數到語句中非常好。但是對于參數映射也有一些其他的特性。
首先,像MyBatis的其他部分,參數可以指定一個確定的數據類型。
[html]?view plaincopy
  1. #{property,javaType=int,jdbcType=NUMERIC}??
像MyBatis的剩余部分,javaType通常可以從參數對象中來確定,除非對象是一個HashMap。那么javaType應該被確定來保證使用正確類型處理器。
注意:如果null被當作值來傳遞,對于所有可能為空的列,JDBC Type是需要的。也可以通過閱讀PreparedStatement. setNull()方法的JavaDocs文檔來研究它。
為了以后自定義類型處理器,你可以指定一個確定的類型處理器類(或別名),比如:
[html]?view plaincopy
  1. #{age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler}??
盡管它看起來繁瑣,但是實際上是你很少設置它們其中之一。
對于數值類型,對于決定有多少數字是相關的,有一個數值范圍。
[html]?view plaincopy
  1. #{height,javaType=double,jdbcType=NUMERIC,numericScale=2}??
mode屬性允許你指定IN,OUT或INOUT參數。如果參數為OUT或INOUT,參數對象屬性的真實值將會被改變,就像你期望你需要你個輸出參數。如果mode為OUT(或INOUT),而且jdbcType為CURSOR(也就是Oracle的REFCURSOR),你必須指定一個resultMap來映射結果集到參數類型。要注意這里的javaType屬性是可選的,如果左邊的空白是jdbcType的CURSOR類型,它會自動地被設置為結果集。
[html]?view plaincopy
  1. #{department,??
  2. ????mode=OUT,??
  3. ????jdbcType=CURSOR,??
  4. ????javaType=ResultSet,??
  5. ????resultMap=departmentResultMap}??
字符串替換
默認情況下,使用#{}格式的語法會導致MyBatis創建預處理語句屬性并以它為背景設置安全的值(比如?)。這樣做很安全,很迅速,也是首選的做法,有時你只是想直接在SQL語句中插入一個不改變的字符串。比如,像ORDER BY,你可以這樣來使用:
ORDER BY ${columnName}
這里MyBatis不會修改或轉義字符串。

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


resultMap

resultMap 元素是MyBatis中最重要最強大的元素。它就是讓你遠離90%的需要從結果集中取出數據的JDBC代碼的那東西,而且在一些情形下允許你做一些JDBC不支持的事情。事實上,編寫相似于對復雜語句聯合映射這些等同的代碼,也許可以跨過上千行的代碼。ResultMap的設計就是簡單語句不需要明確的結果映射,而很多復雜語句確實需要描述它們的關系。
[java]?view plaincopy
  1. package?com.accp.mybatis.model;??
  2. ??
  3. public?class?Blog?{??
  4. ????private?Integer?id;??
  5. ????private?String?title;??
  6. ????private?Integer?authorId;??
  7. ??
  8. //省略get和set方法??
  9. }??

基于JavaBean的規范,上面這個類有3個屬性:id,title和authorId。這些在select語句中會精確匹配到列名。
這樣的一個JavaBean可以被映射到結果集,就像映射到HashMap一樣簡單。
[html]?view plaincopy
  1. <?xml?version="1.0"?encoding="UTF-8"??>??
  2. <!DOCTYPE?mapper??
  3. PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"??
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">??
  5. <mapper?namespace="com.accp.mybatis.model.Blog">????
  6. ??????
  7. ????<select?id="selectBlog_by_id"?parameterType="int"?resultType="Blog">??
  8. ????????select?*?from?Blog?where?id?=?#{id}??
  9. ????</select>??
  10. ??
  11. </mapper>??

這些情況下,MyBatis會在幕后自動創建一個ResultMap,基于屬性名來映射列到JavaBean的屬性上。如果列名沒有精確匹配,你可以在列名上使用select字句的別名(一個標準的SQL特性)來匹配標簽。
ResultMap最優秀的地方你已經了解了很多了,但是你還沒有真正的看到一個。只是出于示例的原因,讓我們來看看最后一個示例中外部的resultMap是什么樣子的,這也是解決列名不匹配的另外一種方式。
[html]?view plaincopy
  1. <resultMap?id="Blog_result"?type="Blog"?>??
  2. ????<id?column="id"?property="id"?/>??
  3. ????<result?column="title"?property="title"/>??
  4. ????<result?column="author_id"?property="authorId"/>??
  5. </resultMap>??



引用它的語句使用resultMap屬性就行了(注意我們去掉了resultType屬性)。比如:
[html]?view plaincopy
  1. <?xml?version="1.0"?encoding="UTF-8"??>??
  2. <!DOCTYPE?mapper??
  3. PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"??
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">??
  5. <mapper?namespace="com.accp.mybatis.model.Blog">??
  6. ??
  7. ??
  8. ????<resultMap?id="Blog_result"?type="Blog"?>??
  9. ????????<id?column="id"?property="id"?/>??
  10. ????????<result?column="title"?property="title"/>??
  11. ????????<result?column="author_id"?property="authorId"/>??
  12. ????</resultMap>????
  13. ??
  14. ????<!--?resultType與resultMap不能同時使用?-->?????
  15. ????<select?id="selectBlog_by_id"?parameterType="int"?resultMap="Blog_result">??
  16. ????????select?*?from?Blog?where?id?=?#{id}??
  17. ????</select>??
  18. ??
  19. </mapper>??

轉載于:https://www.cnblogs.com/duanxz/p/4742168.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375623.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375623.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Monitoring the process execution and memory consumption in its lifetime

<?xml version"1.0" encoding"utf-8"?> Monitoring the process execution and memory consumption in its lifetimeMonitoring the process execution and memory consumption in its lifetime Recently, I am working on a research project whi…

設置和清除LD_LIBRARY_PATH

"" 設置 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/the/path/you/want/setexport LD_LIBRARY_PATH/the/path/you/want/set "" 查看設置 echo $LD_LIBRARY_PATH "" 清除 unset LD_LIBRARY_PATH

Jenkins中切換devtoolset

source /opt/rh/devtoolset-4/enable or source scl_source enable devtoolset-4

告訴一個遠程團隊協作的故事

Lisette Sutherland和Elinor Slomba在一起收集一些人的故事&#xff0c;這些人的業務模式須要依靠遠程團隊正確完畢工作。故事中體現出遠程團隊怎樣協作。怎樣跨越距離的障礙&#xff0c;怎樣建立信任&#xff0c;怎樣完畢任務。即將出版的《高能協作&#xff1a;遠程戰地指南》…

混沌數學之呂陳吸引子

呂陳吸引子&#xff08;Lu Chen attractor&#xff09;也稱Lu attractor 吸引子是2002年中國科學院數學與系統科學研究院研究員 呂金虎&#xff08;Jinhu Lu)&#xff0c;Suchun Zhang 和香港城市大學電子工程系講座教授陳關榮&#xff08; Guangrong Chen &#xff09;發現和分…

整數反轉

給出一個 32 位的有符號整數&#xff0c;你需要將這個整數中每位上的數字進行反轉。 示例 1: 輸入: 123 輸出: 321示例 2: 輸入: -123 輸出: -321示例 3: 輸入: 120 輸出: 21注意: 假設我們的環境只能存儲得下 32 位的有符號整數&#xff0c;則其數值范圍為 [?231, 231 ?…

C# char[]與string之間的相互轉換

string 兌換 Char[] string ss "abcdefg";char[] cc ss.ToCharArray();Char[] 轉換成string string s new string(cc);byte[] 與 string 之間的轉換 byte[] bb Encoding.UTF8.GetBytes(ss);string s Encoding.UTF8.GetString(bb);string[] 轉換成string string …

java 直接 訪問WebSphere JNDI

代碼如下: Hashtable<String, String> env new Hashtable<String, String>();env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");env.put(Context.PROVIDER_URL, "iiop://localhost:2809");Co…

Standard C++ Episode 7

六、C的I/O流庫 C&#xff1a;fopen/fclose/fread/fwrite/fprintf/fscanf/fseek/ftell... C&#xff1a;對基本的I/O操作做了類的封裝&#xff0c;其功能沒有任何差別&#xff0c;用法和C的I/O流也非常近似。 七、格式化I/O <</>> 1 /*2 *格式化I/O練習3 */4 #in…

在Android設備與Mac電腦之間傳輸文件

不同于Windows和Linux&#xff0c;Android設備連接到Mac電腦上是看不見掛載的目錄的&#xff0c;既然看不到了Android設備的掛載目錄&#xff0c;如何在Android設備與Mac電腦之間傳輸文件呢&#xff1f; 原來Android官方提供了傳輸文件的工具&#xff01;訪問www.android.com/f…

mysql語句在node.js中的寫法

總結一下mysql語句在node.js中的各種寫法&#xff0c;參考了npm網站mysql模塊給的實例。 查詢 select //1 db.query(select * from tuanshang_users where user_id < 10,function(err,results,fields){//if(err) throw err;console.log( results );if(!!results.length){con…

jqPlot圖表插件學習之折線圖-散點圖-series屬性

一、準備工作 首先我們需要到官網下載所需的文件&#xff1a; 官網下載&#xff08;筆者選擇的是jquery.jqplot.1.0.8r1250.zip這個版本&#xff09; 然后讀者需要根據自己的情況新建一個項目并且按照如下的方式加載對應的js和css&#xff08;因為筆者在VS2012環境下新建的&…

node.js基礎:數據存儲

無服務器的數據存儲 內存存儲 var http require(http); var count 0; //服務器訪問次數存儲在內存中 http.createServer(function(req,res){res.write(hello count);res.end(); }).listen(3000);    基于文件的存儲 node.js中主要用fs文件系統模塊來管理文件的存儲。 文件…

CUDA 6.5 VS2013 Win7:創建CUDA項目

運行環境&#xff1a; Win7VS2013CUDA6.5 1.創建win32空項目 2.右鍵項目解決方案-->生成項目依賴項-->生成自定義 3.右鍵項目解決方案-->屬性-->配置屬性-->常規-->平臺工具集 配置屬性-->VC目錄-->包含目錄&#xff0c;添加 $(CUDA_INC_PATH) 連接器-…

c/c++編碼規范(2)--作用域

2. 作用域 靜止使用class類型的靜態或全局變量。 6. 命名約定 6.1. 函數名&#xff0c;變量名&#xff0c;文件名要有描述性&#xff0c;少用縮寫。 6.2. 文件命名 6.2.1. 文件名要全部用小寫。可使用“_”或"-"&#xff0c;遵從項目規范&#xff0c;沒有規范&#x…

subversion svnserver服務啟動與配置

svnserve 是一個輕量級的服務&#xff0c; 使用自定義的協議通過TCP/IP與客戶端通訊。 客戶端通過由 svn:// 或者 svnssh:// 開始的URL訪問svnserve服務器。 啟動服務器 端口監控&#xff08;inetd&#xff09;模式 如果你打算用端口監控來啟動處理客戶的訪問請求的進程&#x…

mongodb地理空間索引原理閱讀摘要

http://www.cnblogs.com/taoweiji/p/3710495.html 具體原理在上面 簡單概述&#xff0c;&#xff08;x,y&#xff09;經緯度坐標&#xff0c;通過geohash的方式&#xff0c;通過N次方塊四分割生成一個坐標碼&#xff0c;然后用坐標碼進行BTREE的索引建立轉載于:https://www.cnb…

angular 頁面加載時可以調用 函數處理

轉載于 作者:海底蒼鷹地址:http://blog.51yip.com/jsjquery/1599.html 我希望頁面加載的時候&#xff0c;我能馬上處理頁面的數據&#xff0c;如請求API .... 所以這樣設置 在某個頁面的控制器中 監聽頁面load phonecatControllers.controller(registerctr, [$scope, $routePa…

刪除排序數組中的重復項

給定一個排序數組&#xff0c;你需要在原地刪除重復出現的元素&#xff0c;使得每個元素只出現一次&#xff0c;返回移除后數組的新長度。 不要使用額外的數組空間&#xff0c;你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。 示例 1: 給定數組 nums [1,1,2…

android 處理鼠標滾輪事件 【轉】

android處理鼠標滾輪事件&#xff0c;并不是如下函數&#xff1a; 1&#xff09; public boolean onKeyDown(int keyCode, KeyEvent event) 2) public boolean dispatchKeyEvent(KeyEvent event) 3) public boolean onTouchEvent(MotionEvent event) 而是如下函數 …