1. 程式人生 > 程式設計 >Android Studio 4.1沒有GsonFormat外掛的解決

Android Studio 4.1沒有GsonFormat外掛的解決

一、Mybatis簡介
1、什麼是mybatis
	Mybatis是由apache提供的一個針對持久層開源框架,對JDBC訪問資料庫的過程進行了簡化和封裝
	使用mybatis可以只關注SQL語句本身,而不需要關注(JDBC中的)註冊驅動、獲取連線、獲取傳輸器、釋放資源等過程。
	mybatis可以將要執行的SQL語句使用xml檔案的方式或者註解方式配置起來,在執行時,將Java物件中攜帶的引數值和SQL骨架進行對映,
     生產最終要執行的SQL,將執行的結果處理後再返回。 2、mybatis的優勢 1)JDBC連線訪問資料庫有大量重複的程式碼,而mybatis可以極大的簡化JDBC程式碼 2)JDBC沒有自帶連線池,而mybatis自帶的有連線池 3)JDBC中是將SQL語句、連線引數寫死在程式中,而mybatis是將SQL語句以及連線引數都寫在配置檔案中。 4)JDBC執行查詢後得到的ResultSet我們需要手動處理,而mybatis執行查詢後得到的結果會處理完後,將處理後的結果返回。 。。。 二、mybatis的快速入門程式 1、準備資料: 執行 /unit08-mybatis/sql指令碼.txt 檔案中的所有sql語句,建立yonghedb庫,並建立emp表,往emp表中插入若干條記錄。 2、建立專案、匯入jar包、提供測試類 2.1.建立的Maven的java專案:CGB-Mybatis-01 2.2.在專案的pom檔案中匯入依賴:junit、mysql驅動、mybatis、log4j等 2.3.提供mybatis-config.xml檔案 mybatis-config檔案中主要配置了事務管理方式、連線資料庫的引數、匯入mapper檔案 2.4.提供EmpMapper.xml檔案 EmpMapper檔案主要配置將來要執行的SQL語句(查詢、新增、刪除、修改) 2.5.提供Emp實體類 如果要查詢所有的員工資訊,員工資訊查詢出來後需要封裝到Java物件中 因為這裡需要提供的Emp(員工)類,這個類用於封裝所有的員工資訊 com.tedu.pojo.Emp ---------------------------------------------------- pojo(plain old/ordinary java object): 簡單java物件 如果一個類只是用來封裝資料的(比如為了封裝員工資訊而提供的Emp類) 這樣的類我們稱之為POJO類,通過該類生成的物件稱之為POJO物件 ---------------------------------------------------- 有哪些資訊(資料)需要封裝到Emp類中,就在Emp類中提供什麼的屬性/變數 在Emp中提供4個變數(id、name、job、salary)分別用來封裝emp表中的id、name、job、salary四列資料。 ---------------------------------------------------- 重寫toString:是為了在列印Emp物件時,輸出的是物件中所儲存的值,而不是輸出地址值 ---------------------------------------------------- 在編寫實體類(POJO類)時,如果要新增有參建構函式,建議將無參建構函式也帶上! 三、MyBatis中的佔位符 0、啟用log4j: 專門為Java語言提供的一套日誌框架,可以通過log4j列印程式中執行的日誌資訊 由於mybatis預設已經整合了log4j,使用log4j只需要完成以下兩步操作: 1)新增log4j的jar包 2)新增log4j的配置檔案(檔名必須是log4j.properties,檔案必須要放在類目錄下) 因為log4j底層就是到類目錄下找名稱為log4j.properites的檔案 1、#{}佔位符: 其實就是JDBC中的問號(?)佔位符,在mybatis底層會講#{}佔位符翻譯成問號(?)佔位符 如果在SQL語句中只有一個#{}佔位符,{}中名稱沒有要求,但不能是空的; 如果在SQL語句中的#{}佔位符,不止一個,引數值需要通過Map或者POJO物件進行封裝; 如果通過Map集合來封裝SQL引數值,#{}佔位符中的名稱要和Map中的key保持一致! 因為在mybatis底層是通過#{}佔位符中的名稱,作為key,到map中獲取對應的value; 如果通過POJO物件來封裝SQL引數值,#{}佔位符中的名要在POJO物件中有對應的getXxx方法, 例如:#{job}佔位符中的名稱為job,那麼就意味著,在Emp中必然有getJob()方法或者有job變數,如果兩者都有,會優先通過getXxx方法來獲取POJO物件中儲存的屬性值 mybatis和log4j預設已經做了整合,所以我們可以直接啟用log4j來列印mybatis執行過程中的日誌資訊 1)匯入log4j的jar包 2)在原始碼根目錄下提供一個 log4j.properties 檔案,並提供配置資訊 2、${}佔位符: #{}佔位符: 相當於JDBC中的問號(?)佔位符,它是為SQL語句中的引數值進行佔位,例如: insert into emp values(null,#{name},#{job},#{salary} ); update emp set job=#{job},salary=#{salary} where name=#{name} delete from emp where name=#{name} delete from emp where id=#{id} select * from emp where name=#{name} and job=#{job} ${}佔位符: 是為SQL語句中的某一個SQL片段進行佔位,將引數傳遞過來時,是直接將引數拼接在${}佔位符所在的位置,因為是直接拼接,所以可能會引發SQL注入攻擊,因此不推薦大量使用! 如果SQL語句中只有一個#{}佔位符,引數可以不用封裝,直接傳遞即可! 但如果SQL語句中哪怕只有一個${}佔位符,引數也必須得先封裝到Map或者POJO物件中,再把Map或者POJO物件傳遞過去! mybatis底層在執行SQL語句時,使用的就是PreparedStatement物件來傳輸SQL語句! PreparedStatement: 可以防止SQL注入攻擊 1)先將SQL骨架傳送給資料庫伺服器進行編譯並確定下來(骨架一旦確定,就無法更改) 王海濤 select * from emp where name=? 2)再將SQL中的引數傳遞給伺服器(此時如果引數中再包含關鍵字或者SQL特殊字串,也不能影響骨架,只會被當成普通的文字來處理!) 二、動態SQL標籤 1、if標籤:對test屬性中的條件進行判斷,如果判斷結果是true,包含在if標籤內部的SQL片段就會參與執行;如果判斷結果是false,那麼包含在if標籤內部的SQL片段將不會執行; 2、where標籤:對於放在where標籤中的條件進行檢測,如果有任何一個條件執行,where標籤就會生成where關鍵字,並且where標籤也可以去除內部多餘的連線詞(and或or) 3、foreach標籤: foreach標籤可以對傳過來的陣列或集合進行遍歷 collection: 如果傳過來只有一個數組(或List集合),collection指定的值則為array(或list),如果傳的引數有多個,用map集合進行封裝, collection指定的值則為陣列/集合在map中的key; open: 指定所生成字串中的起始符號; close: 指定所生成字串中的結束符號; item: 指定佔位符中的名稱; separator: 指定遍歷的元素之間的間隔符; 三、Mapper介面開發 mapper介面開發要滿足以下四個規則: 1)寫一個介面,要求介面的全類名(包名+介面名) 要等於mapper檔案的namespace值 namespace=介面的全類名 2)mapper檔案中要執行的SQL,在介面中得有對應的介面方法,而且SQL標籤的id值要等於方法名 SQL語句的id值=方法名 3)如果是查詢SQL,resultType屬性中指定的型別,要和介面方法的返回值型別保持一致 (如果介面方法返回的是List集合,resultType屬性只需要指定集合中的泛型) 4)SQL標籤上的引數型別(可以省略) 要和 介面方法的引數型別保持一致 /* 1.獲取EmpMapper介面的實現類例項 * 框架底層可以根據getMapper方法接收的EmpMapper介面的位元組碼物件,提供介面的實現類, * 並根據介面的實現類,建立實現類的例項,同時也可以獲取介面的全類名(=namespace) */ EmpMapper mapper = session.getMapper(EmpMapper.class); /* 2.呼叫findAll01方法 * 框架底層可以在執行findAll01方法時,根據上面獲取的 * 介面全類名(=namespace)+當前方法名(=SQL標籤的id值), * 就可以定位到要執行的SQL語句, 執行完SQL語句後,對結果進行封裝處理,將處理完的結果再返回! */ List<Emp> list = mapper.findAll01(); 四、內容補充 1、POJO(Plain Old Java Object / Plain Ordinary Java Object) 簡單Java物件: 是指專門用於封裝資料的物件(內部可以有私有屬性,以及對應的get和set方法,沒有處理業務的方法) 比如:為了封裝員工資訊而提供的Emp類,這個類中只有少量的屬性和對應的set和get方法,是用於封裝員工資訊的,這樣的類我們就稱之為POJO類。 2、Emp中的屬性為什麼不用基本資料型別? public class Emp { private Integer id; private String name; private String job; private Double salary; //private double score; //預設值為 0.0; private Double score; //預設值為 null }