MyBatis概論及配置說明
一、什么是mybatis?
MyBatis 是一款優秀的半自動的ORM持久層框架,它支持自定義 SQL、存儲過程以及高級映射。
MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。
MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄
二、MyBaits與JDBC
JDBC核心對象
DriverManager,數據庫驅動管理對象
Connection,數據庫連接對象
Statement | PrepareStatement ,操作數據庫SQL語句對象
ResultSet,結果集對象
MyBaits核心對象
SqlSession對象,該對象包含了執行SQL語句的所有方法,例如JDBC里面Connection

Executor接口,將傳遞過來的參數動態生成SQL語句,負責查詢緩存。
MappedStatement對象,該對象負責對SQL封裝,用于存儲需要映射的SQL語句及參數等信息
ResultHandler對象,用戶返回結果集合,封裝成最紅想要的數據類型,可以自定義返回類型
三、MyBaits執行流程

依賴:
//mybatis依賴配置 implementation 'org.mybatis:mybatis:3.5.15' //MySQL連接驅動 implementation 'com.mysql:mysql-connector-j:8.2.0
mybatis核心組件:
①SqlSessionFactoryBuilder:構建SqlSessionFactory的構建器,采用了分布構建方式進行構建
②SqlSessionFactory:生產SqlSession的工廠(工廠設計模式),在項目的生命周期應該以單例的形式進行存在
③SqlSession:mybatis圍繞SqlSession進行工作,
提供:發送執行sql語句;
獲取mapper映射器;
控制事務
④mapper映射器:接口+映射文件(注解或者xml)xml常用
注意:在xml中&是特殊符號,有具體的語義,要使用&表示連接
mybatis不支持方法重載
因為MyBatis動態代理尋找策略是:全限定名+方法名,不涉及參數,所以MyBatis不支持方法重載。
方法重載:方法名相同,參數列表不同
配置文件:mybatis-config.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核心配置文件--> <configuration> <!--通過 properties文件進行配置datasource數據源--> <properties resource="datasource.properties"/> <!--settings:會改變mybatis的運行時行為 logImpl:指定mybatis所有日志的具體實現,未指定時將自動查找 mapUnderscoreToCamelCase:駝峰映射 autoMapperBehavior:指定mybatis應如何自動映射列到字段或屬性 (NONE:關閉自動映射;PARTIAL只會自動映射沒有定義嵌套結果映射的字段;FULL會自動映射任何) ..... --> <settings> <!-- 開啟駝峰映射 默認是關閉的--> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <!--類型別名:不區分大小寫--> <typeAliases> <!-- 針對類型單獨進行別名配置--> <typeAlias type="com.monster.pojo.Student" alias="student"/> <!-- 位于指定包下指定別名,別名即為類的簡單名稱(mybatis 的別名不區分大小寫)--> <package name="com.monster.pojo"/> </typeAliases> <!--類型處理器:處理Java對象屬性和數據表字段類型不一致的類型轉換 BooleanTypeHandler FloatTypeHandler BigDecimalTypeHandler EnumTypeHandler: 數據庫兼容的字節流類型【VARCHAR 或任何兼容的字符串類型,用來存儲枚舉的名稱(而不是索引序數值)】 .....等等 --> <typeHandlers> <!-- 單獨加載 自定義類型轉換處理器--> <!-- <typeHandler handler="com.monster.typehandler.GenderTypeHandler"--> <!-- javaType="com.monster.enums.Gender"/>--> <!-- mybatis自帶的類型轉換器(這兒是枚舉轉換器)--> <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.monster.enums.Gender"/> <!--包加載--> <!-- <package name="com.monster.typehandler"/>--> </typeHandlers> <!-- 自定義對象工廠:當創建結果集的時候,mybatis會使用一個對象工廠創建這個結果集的實例,然后實現里面的方法 --> <objectFactory type="com.monster.factory.MyObjectFactory"/>
<!-- 插件(plugins):允許你在映射語句執行過程中的某一點進行攔截調用。
-->
<!-- 環境配置 --> <environments default="development"> <environment id="development"> <!-- 事務管理器(需要實現Transaction接口) JDBC:采用JdbcTransaction生成的JdbcTransaction對象實現,以JDBC的方式對數據庫的事務進行操作 MANAGED:采用ManagedTnansaction生成的WanagedTransaction對象實現。它的提交和回滾不需要任何操作,而是把事務交給容器處理。 在默認情況下會自動關閉連接,然而容器并不希望這樣做,因此需要將closeConnection屬性設置為false來阻止它默認的關閉行為 --> <transactionManager type="JDBC"/> <!-- 數據源環境 POOLED:連接池 UNPOOLED:非連接池的方式創建連接 JNDI:在外部(容器)配置數據源 --> <dataSource type="POOLED"> <!-- 連接驅動--> <property name="driver" value="${driverClassName}"/> <!-- 在xml中&是特殊符號,有具體的語義,要使用&表示連接--> <property name="url" value="jdbc:mysql://localhost:3306/studentmanage?userUnicode=true&characterEncoding=UTF8"/> <property name="username" value="longhj"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 映射器 ①類名 ②包名 ③注解映射 --> <mappers> <!--<mapper resource="com/monster/mapper/StudentMapper.xml"/> 順序:mapper >> package --> <!--通過注解映射的mapper直接被掃描,不需要通過xml注冊--> <!-- 省略:<mapper class="com.monster.mapper.BookMapper"/>--> <package name="com/monster/mapper"/> </mappers> </configuration>
浙公網安備 33010602011771號