作用:將數據連接單獨配置在db.properties中,只需要在SqlMapConfig.xml中加載db.properties的屬性值,在SqlMapConfig.xml中就不需要對數據庫連接參數進行硬編碼。數據庫連接參數只配置在db.properties中,方便對參數進行統一管理,其它xml可以引用該db.properties。
db.properties的內容:
jdbc.driver=com.MySQL.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatisjdbc.username=rootjdbc.passWord=root
在SqlMapConfig.xml中加載db.properties
<!-- 加載數據庫文件db.properties --><properties resource="db.properties"> <!-- properties中還可以配置一些屬性名和屬性值,此處的優先加載 --> <!-- <property name="driver" value=""/> --> </properties> <!-- 和spring整合后 environments配置將廢除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理,事務控制由mybatis管理--> <transactionManager type="JDBC" /> <!-- 數據庫連接池,由mybatis管理--> <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>properties特性:
注意:
建議:
不要在properties元素體內添加任何屬性值,只將屬性值定義在properties文件中。
在properties文件中定義屬性名要有一定的特殊性,如xxxx.xxxx(jdbc.driver)
三:settings全局參數配置mybatis框架運行時可以調整一些運行參數。比如,開啟二級緩存,開啟延遲加載等等。全局參數會影響mybatis的運行行為。
mybatis-settings的配置屬性以及描述
| setting(設置) | Description(描述) | valid Values(驗證值組) | Default(默認值) |
| cacheEnabled | 在全局范圍內啟用或禁用緩存配置 任何映射器在此配置下。 | true | false | TRUE |
| lazyLoadingEnabled | 在全局范圍內啟用或禁用延遲加載。禁用時,所有相關聯的將熱加載。 | true | false | TRUE |
| aggressiveLazyLoading | 啟用時,有延遲加載屬性的對象將被完全加載后調用懶惰的任何屬性。否則,每一個屬性是按需加載。 | true | false | TRUE |
| multipleResultSetsEnabled | 允許或不允許從一個單獨的語句(需要兼容的驅動程序)要返回多個結果集。 | true | false | TRUE |
| useColumnLabel | 使用列標簽,而不是列名。在這方面,不同的驅動有不同的行為。參考驅動文檔或測試兩種方法來決定你的驅動程序的行為如何。 | true | false | TRUE |
| useGeneratedKeys | 允許JDBC支持生成的密鑰。兼容的驅動程序是必需的。此設置強制生成的鍵被使用,如果設置為true,一些驅動會不兼容性,但仍然可以工作。 | true | false | FALSE |
| autoMappingBehavior | 指定MyBatis的應如何自動映射列到字段/屬性。NONE自動映射。 PARTIAL只會自動映射結果沒有嵌套結果映射定義里面。 FULL會自動映射的結果映射任何復雜的(包含嵌套或其他)。 | NONE,PARTIAL,FULL | PARTIAL |
| defaultExecutorType | 配置默認執行人。SIMPLE執行人確實沒有什么特別的。 REUSE執行器重用準備好的語句。 BATCH執行器重用語句和批處理更新。 | SIMPLE,REUSE,BATCH | SIMPLE |
| safeRowBoundsEnabled | 允許使用嵌套的語句RowBounds。 | true | false | FALSE |
| mapUnderscoreToCamelCase | 從經典的數據庫列名A_COLUMN啟用自動映射到駱駝標識的經典的java屬性名aColumn。 | true | false | FALSE |
| localCacheScope | MyBatis的使用本地緩存,以防止循環引用,并加快反復嵌套查詢。默認情況下(session)會話期間執行的所有查詢緩存。如果localCacheScope=STATMENT本地會話將被用于語句的執行,只是沒有將數據共享之間的兩個不同的調用相同的SqlSession。 | SESSION STATEMENT | SESSION |
| dbcTypeForNull | 指定為空值時,沒有特定的JDBC類型的參數的JDBC類型。有些驅動需要指定列的JDBC類型,但其他像NULL,VARCHAR或OTHER的工作與通用值。 | JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER | OTHER |
| lazyLoadTriggerMethods | 指定觸發延遲加載的對象的方法。 | A method name list separated by commas | equals,clone,hashCode,toString |
| defaultScriptingLanguage | 指定所使用的語言默認為動態SQL生成。 | A type alias or fully qualified class name. | org.apache.ibatis.scripting.xmltags .XMLDynamicLanguageDriver |
| callSettersOnNulls | 指定如果setter方法??或地圖的put方法時,將調用檢索到的值是null。它是有用的,當你依靠Map.keySet()或null初始化。注意原語(如整型,布爾等)不會被設置為null。 | true | false | FALSE |
| logPrefix | 指定的前綴字串,MyBatis將會增加記錄器的名稱。 | Any String | Not set |
| logImpl | 指定MyBatis的日志實現使用。如果此設置是不存在的記錄的實施將自動查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | Not set |
| proxyFactory | 指定代理工具,MyBatis將會使用創建懶加載能力的對象。 | CGLIB | JAVASSIST | CGLIB |
官方文檔settings的例子

<setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/></settings>View Code四:typeAiases(別名)--重點掌握
在mapper.xml中,定義很多的statement,statement需要parameterType指定輸入參數的類型、需要resultType指定輸出結果的映射類型。
如果在指定類型時輸入類型全路徑,不方便進行開發,可以針對parameterType或resultType指定的類型定義一些別名,在mapper.xml中通過別名定義,方便開發。
4.1.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 |
4.2.自定義別名
4.2.1:單個別名定義(在SqlMapConfig.xml)
<!-- 別名定義:針對單個別名定義 type:類型的路徑; alias:別名 --> <typeAliases><typeAlias type="com.mybatis.entity.User" alias="user"/></typeAliases>
UserMapper.xml引用別名:
<select id="findUserById" parameterType="int" resultType="user" > select * from t_user where id=#{id}</select>4.2.2:批量定義別名(常用)
<!-- 批量別名的定義: package:指定包名,mybatis會自動掃描包中的pojo類,自動定義別名,別名就是類名(首字母大寫或小寫都可以) --> <typeAliases> <package name="com.mybatis.entity"/> <packagename="其它包"/> </typeAliases>五:typeHandlers(類型處理器)
mybatis中通過typeHandlers完成jdbc類型和java類型的轉換。
通常情況下,mybatis提供的類型處理器滿足日常需要,不需要自定義.
mybatis支持類型處理器:
類型處理器 | Java類型 | JDBC類型 |
BooleanTypeHandler | Boolean,boolean | 任何兼容的布爾值 |
ByteTypeHandler | Byte,byte | 任何兼容的數字或字節類型 |
ShortTypeHandler | Short,short | 任何兼容的數字或短整型 |
IntegerTypeHandler | Integer,int | 任何兼容的數字和整型 |
LongTypeHandler | Long,long | 任何兼容的數字或長整型 |
FloatTypeHandler | Float,float | 任何兼容的數字或單精度浮點型 |
DoubleTypeHandler | Double,double | 任何兼容的數字或雙精度浮點型 |
BigDecimalTypeHandler | BigDecimal | 任何兼容的數字或十進制小數類型 |
StringTypeHandler | String | CHAR和VARCHAR類型 |
ClobTypeHandler | String | CLOB和LONGVARCHAR類型 |
NStringTypeHandler | String | NVARCHAR和NCHAR類型 |
NClobTypeHandler | String | NCLOB類型 |
ByteArrayTypeHandler | byte[] | 任何兼容的字節流類型 |
BlobTypeHandler | byte[] | BLOB和LONGVARBINARY類型 |
DateTypeHandler | Date(java.util) | TIMESTAMP類型 |
DateOnlyTypeHandler | Date(java.util) | DATE類型 |
TimeOnlyTypeHandler | Date(java.util) | TIME類型 |
SqlTimestampTypeHandler | Timestamp(java.sql) | TIMESTAMP類型 |
SqlDateTypeHandler | Date(java.sql) | DATE類型 |
SqlTimeTypeHandler | Time(java.sql) | TIME類型 |
ObjectTypeHandler | 任意 | 其他或未指定類型 |
EnumTypeHandler | Enumeration類型 | VARCHAR-任何兼容的字符串類型,作為代碼存儲(而不是索引)。 |
6.1:通過resource加載單個映射文件
<!-- 加載映射文件 --> <mappers> <!--通過resource方法一次加載一個映射文件 --> <mapper resource="sqlmap/User.xml"/> <mapper resource="mapper/UserMapper.xml"/> </mappers>
6.2:通過mapper接口加載單個映射文件
<!-- 通過mapper接口加載單個映射配置文件 遵循一定的規范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個目錄中; 上邊規范的前提是:使用的是mapper代理方法; --> <mapper class="com.mybatis.mapper.UserMapper"/>
按照上邊的規范,將mapper.java和mapper.xml放在一個目錄,且同名。

6.3:批量加載mapper(推薦使用)
<!-- 批量加載映射配置文件,mybatis自動掃描包下面的mapper接口進行加載 遵循一定的規范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個目錄中; 上邊規范的前提是:使用的是mapper代理方法; --> <package name="com.mybatis.mapper"/>
新聞熱點
疑難解答