<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # SqlSession * **SqlSession的實例不是線程安全的,因此不能被共享** * SqlSession每次使用完成后需要正確關閉,這個關閉操作是必須的 * SqlSession可以直接調用方法的id進行數據庫操作,但是我們一般還是推薦使用SqlSession獲取到Dao接口的代理類(MyBatis自動創建),執行代理對象的方法,可以更安全的鏡像類型檢查操作 # ORM ORM 是 Object Relational Mapping (對象關系映射)的縮寫。通俗點講,就是將對象與關系數據庫綁定,用對象來表示關系數據。在 O/R Mapping 的世界里,有兩個基本的也是重要的需要了解,即 VO , PO 。 VO ,值對象 (Value Object) , PO ,持久對象 (Persisent Object) ,它們是由一組屬性和屬性的 get 和 set 方法組成。從結構上看,它們并沒有什么不同的地方。但從其意義和本質上來看是完全不同的。 1. VO 是用 new 關鍵字創建,由 GC 回收的。   PO 則是向數據庫中添加新數據時創建,刪除數據庫中數據時削除的。并且它只能存活在一個數據庫連接中,斷開連接即被銷毀。 2. VO 是值對象,精確點講它是業務對象,是存活在業務層的,是業務邏輯使用的,它存活的目的就是為數據提供一個生存的地方。 PO 則是有狀態的,每個屬性代表其當前的狀態。它是物理數據的對象表示。使用它,可以使我們的程序與物理數據解耦,并且可以簡化對象數據與物理數據之間的轉換。 3. VO 的屬性是根據當前業務的不同而不同的,也就是說,它的每一個屬性都一一對應當前業務邏輯所需要的數據的名稱。 PO 的屬性是跟數據庫表的字段一一對應的。 PO 對象需要實現序列化接口。 # PO,VO,TO,BO,DAO,POJO解釋 ## PO(persistant object) 持久對象 在 o/r 映射的時候出現的概念,如果沒有 o/r 映射,沒有這個概念存在了。通常對應數據模型 ( 數據庫 ), 本身還有部分業務邏輯的處理。可以看成是與數據庫中的表相映射的 java 對象。最簡單的 PO 就是對應數據庫中某個表中的一條記錄,多個記錄可以用 PO 的集合。 PO中應該不包含任何對數據庫的操作。 ## VO(value object) 值對象 通常用于業務層之間的數據傳遞,和 PO 一樣也是僅僅包含數據而已。但應是抽象出的業務對象 , 可以和表對應 , 也可以不 , 這根據業務的需要 . 個人覺得同 DTO( 數據傳輸對象 ), 在 web 上傳遞。 ## TO(Transfer Object) 數據傳輸對象 在應用程序不同 tie( 關系 ) 之間傳輸的對象 ## BO(business object) 業務對象 從業務模型的角度看 , 見 UML 元件領域模型中的領域對象。封裝業務邏輯的 java 對象 , 通過調用 DAO 方法 , 結合 PO,VO 進行業務操作。 business object: 業務對象 主要作用是把業務邏輯封裝為一個對象。這個對象可以包括一個或多個其它的對象。 比如一個簡歷,有教育經歷、工作經歷、社會關系等等。 我們可以把教育經歷對應一個 PO ,工作經歷對應一個 PO ,社會關系對應一個 PO 。 建立一個對應簡歷的 BO 對象處理簡歷,每個 BO 包含這些 PO 。 這樣處理業務邏輯時,我們就可以針對 BO 去處理。 # QO :查詢對象 ## POJO(plain ordinary java object) 簡單無規則 java 對象 純的傳統意義的 java 對象。就是說在一些 Object/Relation Mapping 工具中,能夠做到維護數據庫表記錄的 persisent object 完全是一個符合 Java Bean 規范的純 Java 對象,沒有增加別的屬性和方法。我的理解就是最基本的 Java Bean ,只有屬性字段及 setter 和 getter 方法! ## DAO(data access object) 數據訪問對象 是一個 sun 的一個標準 j2ee 設計模式, 這個模式中有個接口就是 DAO ,它負持久層的操作。為業務層提供接口。此對象用于訪問數據庫。通常和 PO 結合使用, DAO 中包含了各種數據庫的操作方法。通過它的方法 , 結合 PO 對數據庫進行相關的操作。夾在業務邏輯與數據庫資源中間。配合 VO, 提供數據庫的 CRUD 操作 ... ## DTO Data Transfer Object 數據傳輸對象 主要用于遠程調用等需要大量傳輸對象的地方。 比如我們一張表有 100 個字段,那么對應的 PO 就有 100 個屬性。 但是我們界面上只要顯示 10 個字段, 客戶端用 WEB service 來獲取數據,沒有必要把整個 PO 對象傳遞到客戶端, 這時我們就可以用只有這 10 個屬性的 DTO 來傳遞結果到客戶端,這樣也不會暴露服務端表結構 . 到達客戶端以后,如果用這個對象來對應界面顯示,那此時它的身份就轉為 VO DAO :數據訪問對象 —— 同時還有 DAO 模式 DTO :數據傳輸對象 —— 同時還有 DTO 模式 O/R Mapper 對象 / 關系 映射 定義好所有的 mapping 之后,這個 O/R Mapper 可以幫我們做很多的工作。通過這些 mappings, 這個 O/R Mapper 可以生成所有的關于對象保存,刪除,讀取的 SQL 語句,我們不再需要寫那么多行的 DAL 代碼了。 # 實體 Model( 實體模式 ) DAL( 數據訪問層 ) IDAL( 接口層 ) DALFactory( 類工廠 ) BLL( 業務邏輯層 ) BOF Business Object Framework 業務對象框架 SOA Service Orient Architecture 面向服務的設計 EMF Eclipse Model Framework # 架構 ~~~ javaBean->配置文件(編寫sql,預編譯,設置參數,執行sql,封裝結果)->DbRecords ~~~ ![](https://box.kancloud.cn/5e1232ce9bc6e998b24fde5bd94491c5_933x799.png) 1. mybatis配置 SqlMapConfig.xml,此文件作為mybatis的全局配置文件,配置了mybatis的運行環境等信息。 mapper.xml文件即sql映射文件,文件中配置了操作數據庫的sql語句。此文件需要在SqlMapConfig.xml中加載。 通過mybatis環境等配置信息構造SqlSessionFactory即會話工廠 2. 由會話工廠創建sqlSession即會話,操作數據庫需要通過sqlSession進行 3. mybatis底層自定義了Executor執行器接口操作數據庫,Executor接口有兩個實現,一個是基本執行器、一個是緩存執行器 4. Mapped Statement也是mybatis一個底層封裝對象,它包裝了mybatis配置信息及sql映射信息等。mapper.xml文件中一個sql對應一個Mapped Statement對象,sql的id即是Mapped statement的id。 5. Mapped Statement對sql執行輸入參數進行定義,包括HashMap、基本類型、pojo,Executor通過Mapped Statement在執行sql前將輸入的java對象映射至sql中,輸入參數映射就是jdbc編程中對preparedStatement設置參數 6. Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本類型、pojo,Executor通過Mapped Statement在執行sql后將輸出結果映射至java對象中,輸出結果映射過程相當于jdbc編程中對結果的解析處理過程 **各層** ![](https://img.kancloud.cn/46/15/4615491815fab7ac4938b7571f218c4a_851x635.png) # 安裝 mybaits的代碼由github.com管理 下載地址:https://github.com/mybatis/mybatis-3/releases # 加入配置文件 **SqlMapConfig.xml** 在config下創建SqlMapConfig.xml,如下: ~~~ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 和spring整合后 environments配置將廢除 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理 --> <transactionManager type="JDBC" /> <!-- 數據庫連接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/app?useUnicode=true&amp;characterEncoding=utf8" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <mappers> <mapper resource="sqlmap/User.xml" /> </mappers> </configuration> ~~~ SqlMapConfig.xml是mybatis核心配置文件,配置文件內容為數據源、事務管理 **log4j.properties** 在config下創建log4j.properties如下: ~~~ # Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n ~~~ mybatis默認使用log4j作為輸出日志信息 # 駝峰命名 遇到查詢數據庫表中的數據,其它字段都有內容,只有其中一個字段內容為null。mysql中該字段的命名為head_url,后來查明原因是需要在Mybatis開啟數據庫字段自動映射為駝峰命名。 在mybatis-config.xml中設置mapUnderscoreToCamelCase屬性為true: ~~~ <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> ~~~ idea中CamelCase插件: 1. 安裝方法 idea菜單欄-file-settings-搜索"plugins"-點擊下面按鈕‘browse repositories‘-搜索“CamelCase”-點擊安裝 2. 使用方法 安裝后重新打開idea,選中內容,快捷鍵shit+alt+u,選中內容中的單詞 就會變,直到變成你想要的。必須要字符串本來就是下劃線或者駝峰這些類型,username不行,userName可以 這個真的很方便,特別是mysql數據庫字段帶下劃線 直接復制字段到java,開發很快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看