MyBatis 核心配置文件深入浅出
🙊🙊作者主頁:🔗求不脫發的博客
📔📔 精選專欄:🔗SSM直擊大廠
📋📋 精彩摘要:MyBatis 核心配置文件(xxxConfig.xml),該文件配置了MyBatis的一些全局信息,,包含數據庫連接信息和MyBatis運行時所需的各種特性,以及設置和響應MyBatis行為的一些屬性。本文將深入淺出的介紹MyBatis核心配置文件中常用的標簽配置。
💞💞覺得文章還不錯的話歡迎大家點贊👍?收藏???評論💬支持博主🤞
📚目錄
📖MyBatis 核心配置文件深入淺出
1??層級關系
2??environments 環境標簽
3??mapper 映射標簽
4??Properties 配置文件標簽
5??typeAliases 定義別名標簽
6??typeHandlers 類型處理器標簽
7??plugins 第三方插件標簽
8??本章小結
📖MyBatis 核心配置文件深入淺出
1??層級關系
- configguration 配置
- properties 屬性
- settings 設置
- typeAliases 類型別名
- typeHandlers 類型處理器
- objectFactory 對象工廠
- plugins 插件
- environments 環境?
- environment?環境變量
- transactionManager 事務管理器
- dataSource數據源
- environment?環境變量
- databaseIdProvider 數據庫廠商標識
- mappers 映射器
2??environments 環境標簽
事務管理器(transactionManager)類型有兩種:?
| ????????????????????????????????????????????????事務管理器(transactionManager) | |
| JDBC: | 直接使用了JDBC 的提交和回滾設置,它依賴于從數據源得到的連接來管理事務作用域。 |
| MANAGED: | 它從來不提交或回滾一個連接,而是讓容器來管理事務的整個生命周期(比如JEE 應用服務器的上下文)。 默認情況下它會關閉連接,然而一些容器并不希望這樣,因此需要將 closeConnection 屬性設置 為 false 來阻止它默認的關閉行為。 |
數據源(dataSource)類型有三種:
| ????????????????????????????????????????????????????????????????數據源(dataSource) | |
| UNPOOLED: | 這個數據源的實現只是每次被請求時打開和關閉連接。 |
| POOLED: | 這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來。 |
| JNDI: | 這個數據源的實現是為了能在如 EJB 或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然后放置 一個 JNDI 上下文的引用 |
📝3??mapper 映射標簽
該標簽用于加載映射,加載方式有如下幾種:
| 加載方式 | 例: |
| 使用相對于類路徑資源引用(常用) | <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> |
| 使用完全限定資源定位符(URL) | <mapper url="file:///var/mappers/AuthorMapper.xml"/> |
| 使用映射器接口實現類完全限定類名 | <mapper class="org.mybatis.builder.AuthorMapper"/> |
| 包內映射器接口實現全部注冊映射器 | <package name="org.mybatis.builder"/> |
4??Properties 配置文件標簽
?實際開發中,習慣將數據源的配置信息單獨抽取成一個properties文件,該標簽可以加載額外配置的properties文件。
<!--1、加載數據庫相關配置文件db.properties--><properties resource="db.properties"/><!--2、配置數據源環境--><environments default="mybatis"><environment id="mybatis"><transactionManager type="JDBC"></transactionManager><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>5??typeAliases 定義別名標簽
User全限定名:com.mybatis.domain.User
使用typeAliases標簽定義別名
<!--定義別名--><typeAliases><typeAlias type="com.mybatis.domain.User" alias="user"/></typeAliases>上面我們是自定義的別名,mybatis框架已經為我們設置好的一些常用的類型的別名
| 別名 | 數據類型 |
| string | String? |
| long | Long |
| int | Integer |
| double | Double |
| boolean | Boolean |
| ... | ... |
📝6??typeHandlers 類型處理器標簽
無論是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數時,還是從結果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型。下表描述了一些默認的類型處理器(截取部分)。
| 類型處理器 | Java 類型 | JDBC 類型 |
| BooleanTypeHandler | java.lang.Boolean, boolean | 數據庫兼容的 BOOLEAN |
| ByteTypeHandler | java.lang.Byte, byte | 數據庫兼容的 NUMERIC 或 BYTE |
| ShortTypeHandler | java.lang.Short, short | 數據庫兼容的 NUMERIC 或 SHORT INTEGER |
| IntegerTypeHandler | java.lang.Integer, int | 數據庫兼容的 NUMERIC 或 INTEGER |
| LongTypeHandler | java.lang.Long, long | 數據庫兼容的 NUMERIC 或 LONG INTEGER |
| FloatTypeHandler | java.lang.Float, float | 數據庫兼容的 NUMERIC 或 FLOAT |
| DoubleTypeHandler | java.lang.Double, double | 數據庫兼容的 NUMERIC 或 DOUBLE |
| BigDecimalTypeHandler | java.math.BigDecimal | 數據庫兼容的 NUMERIC 或 DECIMAL |
| StringTypeHandler | java.lang.String | CHAR, VARCHAR |
| ClobTypeHandler | java.lang.String | CLOB, LONGVARCHAR |
| NStringTypeHandler | java.lang.String | NVARCHAR, NCHAR |
| NClobTypeHandler | java.lang.String | NCLOB |
| ByteArrayTypeHandler | byte[] | 數據庫兼容的字節流類型 |
| BlobTypeHandler | byte[] | BLOB, LONGVARBINARY |
| DateTypeHandler | java.util.Date | TIMESTAMP |
| DateOnlyTypeHandler | java.util.Date | DATE |
| TimeOnlyTypeHandler | java.util.Date | TIME |
| SqlTimestampTypeHandler | java.sql.Timestamp | TIMESTAMP |
| SqlDateTypeHandler | java.sql.Date | DATE |
| SqlTimeTypeHandler | java.sql.Time | TIME |
| ObjectTypeHandler | Any | OTHER 或未指定類型? |
| EnumTypeHandler | Enumeration Type? | VARCHAR-任何兼容的字符串類型,存儲枚舉的名稱(而不是索引) |
| EnumOrdinalTypeHandler | Enumeration Type | 任何兼容的 NUMERIC 或 DOUBLE 類型,存儲枚舉的索引(而不是名稱)。? |
可以重寫類型處理器或創建自己的類型處理器來處理不支持的或非標準的類型。
具體的做法為:
例如需求:
? ? ? ? 一個Java中的Date數據類型,我想將之存到數據庫的時候存成一個1970年至今的毫秒數,取出來時轉換成java的Date,即java的Date與數據庫的varchar毫秒值之間轉換。
開發步驟:
① 定義轉換類繼承類BaseTypeHandler<T>
② 覆蓋4個未實現的方法,其中setNonNullParameter為java程序設置數據到數據庫的回調方法,getNullableResult 為查詢時 mysql的字符串類型轉換成 java的Type類型的方法
public class MyDateTypeHandler extends BaseTypeHandler<Date> {public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType type) {preparedStatement.setString(i, date.getTime() + "");}public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {return new Date(resultSet.getLong(s));}public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {return new Date(resultSet.getLong(i));}public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {return callableStatement.getDate(i);} }③ 在MyBatis核心配置文件中進行注冊
<!--注冊類型自定義轉換器--> <typeHandlers><typeHandler handler="com.mybatis.typeHandlers.MyDateTypeHandler"></typeHandler> </typeHandlers>④ 直接使用即可
7??plugins 第三方插件標簽
MyBatis 可以使用第三方的插件來對功能進行擴展。
例如分頁助手?PageHelper?是將分頁的復雜操作進行封裝,使用簡單的方式即可獲得分頁的相關數據。
開發步驟:
| PageHelper.startPage(int? pagenum,int pagesize); | 設置分頁參數,當前頁,當前頁展示的條數 |
| pageInfo.getTotal() | 總條數 |
| pageInfo.getPages() | 總頁數 |
| pageInfo.getPageNum() | 當前頁 |
| pageInfo.getPageSize()) | 當前頁展示的條數 |
| pageInfo.isIsFirstPage() | 當前頁是否為第一頁 |
| pageInfo.isIsLastPage() | 當前頁是否為最后一頁 |
8??本章小結
MyBatis核心配置文件常用標簽:
1??environments 環境標簽
2??mapper 映射標簽
3??Properties 配置文件標簽
4??typeAliases 定義別名標簽
5??typeHandlers 類型處理器標簽
6??plugins 第三方插件標簽
總結
以上是生活随笔為你收集整理的MyBatis 核心配置文件深入浅出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 应对10月20日微软黑屏的方法
- 下一篇: PC软件进程解锁