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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 配置內容 SqlMapConfig.xml中配置的內容和順序如下: * properties(屬性) * settings(全局配置參數) * typeAliases(類型別名) * typeHandlers(類型處理器) * objectFactory(對象工廠) * plugins(插件) * environments(環境集合屬性對象) * environment(環境子屬性對象) * transactionManager(事務管理) * dataSource(數據源) * mappers(映射器) 每個標簽都是個接口,允許對這些接口自定義處理 # databaseIdProvider 多數據庫支持 ~~~ </environments> <!-- databaseIdProvider: 支持多數據庫廠商, type="DB_VENDOR": VendorDatabaseIdProvider作用得到數據庫廠商的標識(驅動getDatabaseProductName()), mybatis就能根據不同的數據廠商發送不同sql, 支持mysql, oracle, sqlServer, xxx --> <databaseIdProvider type="DB_VENDOR"> <!-- 為不同的數據庫廠商起別名 --> <property name="MySQL" value="mysql"/> <property name="Oracle" value="oracle"/> <property name="SQL Server" value="sqlserver"/> </databaseIdProvider> ~~~ 在xml那 ~~~ <!-- 這個sql是在mysql環境下才使用的 --> <insert id="saveUser" parameterType="com.jdxia.domain.User" databaseId="mysql"> insert into user(username, address, sex, birthday) values (#{username}, #{address}, #{sex}, #{birthday}) </insert> <!-- 這個sql是在oracle環境下才使用的 --> <insert id="saveUser" parameterType="com.jdxia.domain.User" databaseId="oracle"> insert into user(username, address, sex, birthday) values (#{username}, #{address}, 1, #{birthday}) </insert> ~~~ sql語句databaseId屬性應用這邊的id **sql的支持** ~~~ <select id="findAll" resultType="com.jdxia.domain.User"> <if test="_databaseId=='mysql'"> select * from user limit 0, 5 </if> <if test="_databaseId=='oracle'"> select * from (select *, rownum as r1 from user where rownum &lt;=5) where r1 &gt;=1; </if> </select> ~~~ **匹配規則** 1. 如果沒有配置databaseIdProvider標簽,那么`databaseId=null` 2. 如果配置了databaseIdProvider標簽,使用標簽配置的name去匹配數據庫信息, 匹配上設置databaseId=配置指定的值,否則依舊為 null 3. 如果databaseId不為null,他只會找到配置databaseId的sql語句 4. MyBatis 會加載不帶 databaseId 屬性和帶有匹配當前數據庫 databaseId 屬性的所有語句。如果同時找到帶有 databaseId 和不帶 databaseId 的相同語句,則后者會被舍棄。 # properties(屬性) SqlMapConfig.xml可以引用java屬性文件中的配置信息如下 在src下定義jdbc.properties 配置文件內容如下: ~~~ jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/app?characterEncoding=utf-8 jdbc.username=root jdbc.password=root ~~~ SqlMapConfig.xml引用如下: ![](https://box.kancloud.cn/50931051b56ad28bbff74f6f2f160d85_916x480.png) 也可以在properties中設置 ~~~ <properties resource="db.properties"> <property name="jdbc.password" value="123" /> </properties> ~~~ 注意: MyBatis 將按照下面的順序來加載屬性: * 在 properties 元素體內定義的屬性首先被讀取。 * 然后會讀取properties 元素中resource或 url 加載的屬性,它會覆蓋已讀取的同名屬性 # environments指定環境 可以指定多個環境一鍵切換 ~~~ <!--配置環境--> <environments default="development"> <!-- 配置2個環境--> <environment id="test"> <!-- 配置事務 --> <transactionManager type="JDBC"/> <!--配置連接池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> <environment id="development"> <!-- 配置事務 --> <transactionManager type="JDBC"/> <!--配置連接池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> ~~~ 根據id來實例化出不同的 ~~~ //實例化Mysql Session工廠 mysqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis/mybatis-config.xml")); //實例化SqlServer Session 工廠 sqlserverSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis/mybatis-config.xml"), "test"); //實例化Oracle Session工廠 oracleSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis/mybatis-config.xml"), "development"); ~~~ # seetings 用來配置MyBatis中的一些設置 http://www.mybatis.org/mybatis-3/zh/configuration.html#settings ~~~ <settings> <setting name="" value="true" /> </settings> ~~~ 關注這些 * lazyLoadingEnabled延遲加載的全局開關 * cacheEnabled緩存全局開關 * mapUnderscoreToCamelCase自動駝峰命名規則,數據庫的A_COLUMN到java的aCloumn轉換 * defaultStatementTimeout: 設置超時時間,決定驅動等待數據庫響應的秒數 * autoMappingBehavior:默認是PRATIAL自動映射,要求列名和javaBean屬性名一致.如果為null會取消自動映射 日志 ~~~ <!--開啟日志打印--> <setting name="logImpl" value="STDOUT_LOGGING"/> ~~~ # typeAliases(類型別名) ## mybatis支持別名: 別名 映射的類型 ~~~ _byte byte _long long _short short _int int _integer int _double double _float float _boolean boolean string String byte Byte long Long short Short int Integer integer Integer double Double float Float boolean Boolean date Date decimal BigDecimal bigdecimal BigDecimal map Map ~~~ ## 自定義別名 在SqlMapConfig.xml中配置如下 typeAlias只能配置domain包中的別名,type屬性是全路徑類名,alias是別名.指定后不再區分大小寫. ![](https://box.kancloud.cn/eb41634be1ad61fee7e9a536a4d5d213_896x357.png) package用于要指定配置別名的包,當指定后,該包下的**實體類**都會注冊別名,并且類名就是別名,不再區分大小寫 或者在類上面使用注解 ~~~ @Alias("user") public class User { ~~~ 然后在User.xml中 ~~~ <mapper namespace="mapper.UserMapper"> <select id="findUserById" parameterType="Integer" resultType="User"> select * from user where id = #{v} </select> </mapper> ~~~ ## 單個別名 使用typeAliases標簽,定義別名;將cn.jdxia.mybatis.po.User 起別名為user; ~~~ <!-- 別名定義 --> <typeAliases> <!-- 針對單個別名定義 type:類型的路徑 alias:別名 --> <typeAlias type="cn.jdxia.mybatis.po.User" alias="user"/> </typeAliases> ~~~ ## 批量別名 mybatis自動掃描包中的po類,自動定義別名,別名是類名(首字母大寫或小寫都可以,一般用小寫) 例如:cn.jdxia.mybatis.po.User起別名為User或者user; ~~~ <!-- 別名定義 --> <typeAliases> <!-- 批量別名定義,指定包名,mybatis自動掃描包中的po類,自動定義別名,別名是類名(首字母大寫或小寫都可以,一般用小寫) --> <package name="cn.jdxia.mybatis.po" /> </typeAliases> ~~~ # typeHandlers類型處理器 無論是MyBatis在預處理語句(PreparedStatement)中設置一個參數時,還是從結果集中取出一個值時,都會用類型處理器將獲取的值以合適的方式轉換為java類型 http://www.mybatis.org/mybatis-3/zh/configuration.html#typeHandlers 在3.4.1之前需要手動注冊,現在不需要了 ![](https://box.kancloud.cn/5c9b55363fb036e9d1093fbba706e50d_780x347.png) ## 自定義類型處理器 每當mybatis設置參數到PreparedStatement或者從ResultSet結果集中取得值時,就會使用TypeHandler來處理數據庫類型與java類型之間轉換 我們可以重寫類型處理器或創建自己的類型處理器來處理不支持的或非標準的類型 步驟 1. 實現org.apache.ibatis.type.TypeHandler接口或者繼承org.apache.ibatis.type,BaseTypeHandler 2. 指定其映射某個JDBC類型(可選操作) 3. 在mybatis全局配置文件中注冊 # 傳遞中文需要注意的 xml中是 ~~~ jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&amp;characterEncoding=utf8 ~~~ 在xml寫的時候,因為是在字符串里面,需要寫`&amp;`表示`&`,但是在文件中應該是不用的,所以配置properties應為: ~~~ jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf8 ~~~ # mappers(映射器) Mapper配置的幾種方法: ~~~ <mapper resource=" " /> ~~~ 使用相對于類路徑的資源(現在的使用方式) ~~~ <mapper resource="sqlmap/User.xml" /> ~~~ --- ~~~ <mapper class=" " /> ~~~ 使用mapper接口類路徑,不是指定xml文件了,是指定類 如: ~~~ <mapper class="mapper.UserMapper" /> ~~~ 注意:此種方法要求mapper接口名稱和mapper映射文件名稱相同,且放在同一個目錄中。 在一個包下并且名字相同 --- 這個是指定**dao接口**所在包,當指定后就不需要在寫mapper以及resource或者class了 ~~~ <package name="" /> ~~~ 注冊指定包下的所有mapper接口 ~~~ <package name="mapper" /> ~~~ 注意:此種方法要求mapper接口名稱和mapper映射文件名稱相同,且放在同一個目錄中。 意思就是包下掃描 # 連接池 連接池就是存儲連接的一個容器. 容器其實就是一個集合對象,該集合必須是線程安全的,不能兩個線程拿到同一連接. 該集合必須實現隊列的特性:先進先出 mybatis提供了三種配置方式 **SqlMapConfig.xml里dataSource標簽** type屬性就是采用何種連接池方式 type屬性取值: * POOLED: 傳統的javax.sql.DataSource規范中的連接池 * UNPOOLED: 傳統的獲取連接方式,也實現了javax.sql.DataSource接口,但是沒有實現池的思想 * JNDI: 采用服務器提供的JNDI技術實現,來獲取DataSource對象,不同的服務器所能拿到的DataSource是不一樣的,注意:如果不是web或者maven的war功能是不能使用的 * 自定義: 實現DataSourceFactory接口,定義數據源的獲取方式 實際中使用spring管理數據源 POOLED和UNPOOLED的區別,看日志輸出 POOLED,會還連接到池中 ~~~ Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@1a1d6a08] Returned connection 438135304 to pool. ~~~ UNPOOLED不會把連接還到池中 ~~~ Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@42f93a98] Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@42f93a98] ~~~ mybatis內部分別定義了java.sql.DataSource接口的UnpooledDataSource,PooledDataSource類來表示UNPOOLED,POOLED類型的數據源 ![](https://img.kancloud.cn/a1/fe/a1fe518ca0ebfb3fb4a5670705fccf27_1068x465.png) # 事務 **自動提交** ~~~ sqlSession.commit(); ~~~ 或者 ~~~ //默認是false factory.openSession(true); ~~~ # transactionManager type: `JDBC|MANAGED|自定義` * JDBC: 使用了jdbc的提交和回滾設置,依賴于從數據源得到的連接來管理事務范圍jdbcTransactionFactory * MANAGED: 不提交或回滾一個連接,讓容器來管理事務的整個生命周期(比如JEE應用服務器的上下文).ManagedTransactionFactory * 自定義: 實現TransactionFactory接口,type=全類名/別名
                  <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>

                              哎呀哎呀视频在线观看