簡介
MyBatis 是一款優秀的持久層架構,它支援定制化 SQL、存儲過程以及進階映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設定參數以及擷取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生資訊,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成資料庫中的記錄。
全局配置檔案
<?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>
<!-- 屬性 -->
<properties resource="db.properties"></properties>
<!-- 别名 -->
<typeAliases>
<typeAlias type="com.example.mybatis.entity.User" value="u"></typeAlias>
<package name="com.example.mybatis.enity" />
</typeAliases>
<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="autoMappingUnknownColumnBehavior"
value="WARNING" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25" />
<setting name="defaultFetchSize" value="100" />
<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>
<!-- 環境們 -->
<environments default="development">
<!-- id為環境的唯一辨別 -->
<environment id="development">
<!-- 事物管理 -->
<transactionManager type="JDBC" />
<!-- 資料源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 多資料庫支援 -->
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"></property>
<property name="Oracle" value="oracle"></property>
<property name="SQL Server" value="sql server"></property>
</databaseIdProvider>
<!-- sql映射檔案注冊 -->
<mappers>
<mapper resource="com/example/mybatis/dao/UserMapper.xml"></mapper>
<mapper class="com.example.mybatis.dao.UserMapperAnnotaion"></mapper>
</mappers>
</configuration>
标簽介紹
1.properties
properties标簽是為MyBatis的全局配置檔案設定屬性,由外部檔案引入,一般使用配置檔案類來引入資料
源。
資料源的屬性檔案的名稱為編寫規範為xxxx.properties,部落客這邊設定的資料源名稱為db.properties,配置文
件的内容編寫規範為key=value,等于号兩邊沒有空格例如:
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
username=root
password=root
properties的引入方式有兩種,一種是resource:在包内部映入,例如屬性檔案在config包下面,那麼它的屬性引入為:<properties resource="db.properties"></properties>;另一種的引入為url:映入網絡檔案或磁盤中的檔案。
2.settings
settings設定在全局配置檔案中比較重要
<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="autoMappingUnknownColumnBehavior" value="WARNING" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25" />
<setting name="defaultFetchSize" value="100" />
<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>
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyMwQDO1QTM0ETOyQDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
3.typeAliases
typeAliases是為java類型起别名的一個标簽,預設的為類名的小寫,如果設定了value那麼它的别名為value的值,package設定的是為目前包包括子包下面的所有類,這就有個問題,如果目前包和子包下面的類名一樣,那麼就會起沖突,這樣樣的解決方式就是使用注解方式,@Alias("user"),使用的前提是得引入mybatis庫檔案并設定環境變量:
<typeAliases>
<typeAlias type="com.example.mybatis.entity.User" value="u"></typeAlias>
<package name="com.example.mybatis.enity" />
</typeAliases>
4.environments
environments設定開發環境,可以配置多個環境,由單個environment配置環境,在environment中必須有transactionManager和dataSource标簽才算完整,environment的id為設定環境的唯一id标簽,由environments中的default設定使用哪一種環境,transactionManager中type有兩種:JDBC,代表使用jdbc的方式進行事物的送出和復原;MANAGED代表使用j2ee的方式進行送出和復原,dataSource為資料源,type為資料源類型:UNPOOLED|POOLED|JNDI,UNPOOLED
UNPOOLED:該資料源的實作隻是在每次請求時打開和關閉連接配接。雖然速度有點慢,但對于不需要立即可用連接配接性能的簡單應用程式來說,這是一個不錯的選擇。在這個性能區域中,不同的資料庫也有所不同,是以對于某些資料庫來說,池和這個配置可能不太重要。
POOLED: 資料源池JDBC連接配接對象的實作,以避免建立新連接配接執行個體所需的初始連接配接和身份驗證時間。這是并發web應用程式實作最快響應的流行方法。
JNDI:該資料源的實作是為了與容器(如EJB或應用程式伺服器)一起使用,這些容器可以集中配置資料源或外部,并在JNDI上下文中引用它。這個資料源配置隻需要兩個屬性:
5.databaseIdProvider
dataBaseIdProvider是為全局設定多個資料源,可以設定多個資料庫,如mysql,oracle,sql server等資料庫,type="DB_VENDOR"就是得到資料庫廠商表示來執行不同的sql。
<!-- 多資料庫支援 -->
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"></property>
<property name="Oracle" value="oracle"></property>
<property name="SQL Server" value="sql server"></property>
</databaseIdProvider>
使用方法在sql映射檔案mapper中設定,在查詢标簽中設是databaseId="oracle",設定資料庫執行的sql語句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.dao.UserMapper">
<select id="findUserById" parameterType="int"
resultType="com.example.mybatis.entity.User" databaseId="oracle">
select id, username, sex from
t_user where id = #{id}
</select>
<select id="findUserById" parameterType="int"
resultType="com.example.mybatis.entity.User" databaseId="mysql">
select id, username, sex from
t_user where id = #{id}
</select>
</mapper>
6.mappers
mappers為将sql映射注冊帶全局檔案當中
<!-- sql映射檔案注冊 -->
<mappers>
<mapper resource="com/example/mybatis/dao/UserMapper.xml"></mapper>
<mapper class="com.example.mybatis.dao.UserMapperAnnotaion"></mapper>
</mappers>
設定方式有三種:
resource :引入java包中的sql映射檔案mapper.xml;
class:直接引用接口,指向接口,在接口中使用注解的方式操作
public interface UserMapperAnnotaion {
@Select("select id, username, sex from t_user where id = #{id}")
public User findUserById();
}
url:映入網絡路徑和磁盤路徑下的的xml檔案;
部落客初學MyBatis,就什麼錯誤的地方還請指出,望諒解。