MyBatis-Configuration


一、引用 properties 配置文件

db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://192.168.8.136:3306/mybatis
username=root
password=root

mybatis-config.xml

<!-- 外部 properties 配置文件  -->
<properties resource="db.properties"/>

<!--配置數據源-->
<environments default="development-mysql">
    <environment id="development-mysql">
        <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>

http://www.mybatis.org/mybatis-3/zh/configuration.html#properties

 

二、MyBatis 配置

mybatis-config.xml

<settings>
    <!-- 數據庫字段下划線轉 Bean 字段的駝峰命名 -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    <!-- 控制台打印SQL -->
    <setting name="logImpl" value="STDOUT_LOGGING" />
</settings>

更多配置:http://www.mybatis.org/mybatis-3/zh/configuration.html#settings

 

三、別名處理

<!-- typeAliases:別名處理器:可以為 JavaBean 類型起別名,別名不區分大小寫 -->
<typeAliases>
    <!-- typeAlias:為某個java類型起別名,type:指定要起別名的類型全類名;默認別名就是類名小寫,alias:指定新的別名 -->
    <!--<typeAlias type="com.bean.MyUser" alias="myUser"/>-->

    <!-- package:為某個包下的所有類批量起別名,name:指定包名,為當前包以及下面所有的后代包的每一個類都起一個默認別名(類名小寫) -->
    <package name="com.bean"/>

    <!-- 批量起別名的情況下,可以在 Bean 上使用 @Alias 注解為某個類指定新的別名 -->
</typeAliases>

設置別名后映 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">
<!-- namespace 對應接口文件的全路徑 -->
<mapper namespace="com.dao.MyUserMapper">
    <!-- id 與接口文件方法名對應,resultType 設置別名后返回類型可寫別名 -->
    <!--<select id="selectMyUser" resultType="com.bean.MyUser">-->
    <select id="selectMyUser" resultType="myUser">
      select * from myuser where id = #{id}
    </select>
</mapper>

MyBatis 為基本數據類型默認設置了別名:http://www.mybatis.org/mybatis-3/zh/configuration.html#typeAliases

 

四、多環境配置

<!-- environments:環境配置,default 指定使用某種環境
     environment:配置具體環境信息;有兩個標簽;id代表當前環境唯一標識
        transactionManager:事務管理器
            type:事務管理器的類型 JDBC(JdbcTransactionFactory) | MANAGED(ManagedTransactionFactory)
            自定義事務管理器:實現 TransactionFactory 接口,type 為全類名
        dataSource:數據源
            type:數據源類型 UNPOOLED(UnpooledDataSourceFactory) | POOLED(PooledDataSourceFactory) | JNDI(JndiDataSourceFactory)
            自定義數據源:實現 DataSourceFactory 接口,type 為全類名 -->
<environments default="development-dev">
    <environment id="development-dev">
        <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>

    <environment id="development-sit">
        <transactionManager type="MANAGED"/>
        <dataSource type="UNPOOLED">
            <property name="driver" value="${sit.driver}"/>
            <property name="url" value="${sit.url}"/>
            <property name="username" value="${sit.username}"/>
            <property name="password" value="${sit.password}"/>
        </dataSource>
    </environment>
</environments>

變量配置注冊類:org.apache.ibatis.session.Configuration

typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);

typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class);
typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class);
typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class);

typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class);
typeAliasRegistry.registerAlias("FIFO", FifoCache.class);
typeAliasRegistry.registerAlias("LRU", LruCache.class);
typeAliasRegistry.registerAlias("SOFT", SoftCache.class);
typeAliasRegistry.registerAlias("WEAK", WeakCache.class);

typeAliasRegistry.registerAlias("DB_VENDOR", VendorDatabaseIdProvider.class);

typeAliasRegistry.registerAlias("XML", XMLLanguageDriver.class);
typeAliasRegistry.registerAlias("RAW", RawLanguageDriver.class);

typeAliasRegistry.registerAlias("SLF4J", Slf4jImpl.class);
typeAliasRegistry.registerAlias("COMMONS_LOGGING", JakartaCommonsLoggingImpl.class);
typeAliasRegistry.registerAlias("LOG4J", Log4jImpl.class);
typeAliasRegistry.registerAlias("LOG4J2", Log4j2Impl.class);
typeAliasRegistry.registerAlias("JDK_LOGGING", Jdk14LoggingImpl.class);
typeAliasRegistry.registerAlias("STDOUT_LOGGING", StdOutImpl.class);
typeAliasRegistry.registerAlias("NO_LOGGING", NoLoggingImpl.class);

typeAliasRegistry.registerAlias("CGLIB", CglibProxyFactory.class);
typeAliasRegistry.registerAlias("JAVASSIST", JavassistProxyFactory.class);

languageRegistry.setDefaultDriverClass(XMLLanguageDriver.class);
languageRegistry.register(RawLanguageDriver.class);
View Code

http://www.mybatis.org/mybatis-3/zh/configuration.html#environments

 

五、多種數據庫配置

<!-- environments:環境配置,default 指定使用某種環境
     environment:配置具體環境信息;有兩個標簽;id代表當前環境唯一標識
        transactionManager:事務管理器
            type:事務管理器的類型 JDBC(JdbcTransactionFactory) | MANAGED(ManagedTransactionFactory)
            自定義事務管理器:實現 TransactionFactory 接口,type 為全類名
        dataSource:數據源
            type:數據源類型 UNPOOLED(UnpooledDataSourceFactory) | POOLED(PooledDataSourceFactory) | JNDI(JndiDataSourceFactory)
            自定義數據源:實現 DataSourceFactory 接口,type 為全類名 -->
<environments default="development-mysql">
    <environment id="development-mysql">
        <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>

    <environment id="development-oracle">
        <transactionManager type="MANAGED"/>
        <dataSource type="UNPOOLED">
            <property name="driver" value="${oracle.driver}"/>
            <property name="url" value="${oracle.url}"/>
            <property name="username" value="${oracle.username}"/>
            <property name="password" value="${oracle.password}"/>
        </dataSource>
    </environment>
</environments>

<!-- databaseIdProvider:支持多數據庫廠商
    type="DB_VENDOR":VendorDatabaseIdProvider 作用是得到數據庫廠商的標識(JDBC getDatabaseProductName()),mybatis 就能根據數據庫廠商標識來執行不同的 SQL -->
<databaseIdProvider type="DB_VENDOR">
    <!-- 為不同的數據庫廠商起別名 -->
    <property name="MySQL" value="mysql"/>
    <property name="Oracle" value="oracle"/>
    <property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>

修改 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">
<!-- namespace 對應接口文件的全路徑 -->
<mapper namespace="com.dao.MyUserMapper">
    <!--找不到對應數據庫 SQL 語句時會執行默認-->
    <select id="selectMyUser" resultType="myUser">
      select * from myuser where id = #{id}
    </select>
    <!-- databaseId 對應數據庫別名 -->
    <select id="selectMyUser" resultType="myUser" databaseId="mysql">
      select * from myuser where id = #{id}
    </select>
    <select id="selectMyUser" resultType="myUser" databaseId="oracle">
      select * from myuser where id = #{id}
    </select>
</mapper>

http://www.mybatis.org/mybatis-3/zh/configuration.html#databaseIdProvider

 

六、mapper.xml (SQL) 映射文件注冊

1.resource 方式

<mappers>
    <!-- 引用類路徑下的 SQL 映射文件 -->
    <mapper resource="com/dao/MyUserMapper.xml"/>
</mappers>

2.Url 方式

<mappers>
    <!-- 引用網路路徑或者磁盤路徑下的sql映射文件 -->
    <mapper url="file:///var/mappers/AuthorMapper.xml"/> 
</mappers>

3.Class 方式

<mappers>
    <!-- 引用 Class 接口注冊,沒有 SQL 映射文件,所有的 SQL 都是利用注解寫在接口上 -->
    <mapper class="com.dao.MyUserMapperAnnotation"/>
</mappers>

MyUserMapperAnnotation

import com.bean.MyUser;
import org.apache.ibatis.annotations.Select;

public interface MyUserMapperAnnotation {
    @Select("select * from myuser where id = #{id}")
    public MyUser selectMyUser(Integer id);
}

測試

import com.bean.MyUser;
import com.dao.MyUserMapperAnnotation;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class Main {
    public static void main(String[] args) {
        SqlSession session = null;
        try {
            String resource = "mybatis-config2.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            session = sqlSessionFactory.openSession();

            MyUserMapperAnnotation mapper = session.getMapper(MyUserMapperAnnotation.class);
            MyUser myUser = (MyUser) mapper.selectMyUser(1);
            System.out.println(myUser);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }
}

4.package name 方式,批量注冊

<mappers>
    <!-- 批量注冊,映射文件名必須和接口同名,且放在與接口同一層級目錄下 -->
    <package name="com.dao"/>
</mappers>

http://www.mybatis.org/mybatis-3/zh/configuration.html#mappers

 

附上全部配置

<?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 配置文件  -->
    <properties resource="db.properties"/>

    <!-- settings包含很多重要的設置項,setting:用來設置每一個設置項。name:設置項名,value:設置項取值 -->
    <settings>
        <!-- 數據庫字段下划線轉 Bean 字段的駝峰命名 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 控制台打印SQL -->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>

    <!-- typeAliases:別名處理器:可以為 JavaBean 類型起別名,別名不區分大小寫 -->
    <typeAliases>
        <!-- typeAlias:為某個java類型起別名,type:指定要起別名的類型全類名;默認別名就是類名小寫,alias:指定新的別名 -->
        <!--<typeAlias type="com.bean.MyUser" alias="myUser"/>-->

        <!-- package:為某個包下的所有類批量起別名,name:指定包名,為當前包以及下面所有的后代包的每一個類都起一個默認別名(類名小寫) -->
        <package name="com.bean"/>

        <!-- 批量起別名的情況下,可以在 Bean 上使用 @Alias 注解為某個類指定新的別名 -->
    </typeAliases>

    <!-- environments:環境配置,default 指定使用某種環境
         environment:配置具體環境信息;有兩個標簽;id代表當前環境唯一標識
            transactionManager:事務管理器
                type:事務管理器的類型 JDBC(JdbcTransactionFactory) | MANAGED(ManagedTransactionFactory)
                自定義事務管理器:實現 TransactionFactory 接口,type 為全類名
            dataSource:數據源
                type:數據源類型 UNPOOLED(UnpooledDataSourceFactory) | POOLED(PooledDataSourceFactory) | JNDI(JndiDataSourceFactory)
                自定義數據源:實現 DataSourceFactory 接口,type 為全類名 -->
    <environments default="development-mysql">
        <environment id="development-mysql">
            <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>

        <environment id="development-oracle">
            <transactionManager type="MANAGED"/>
            <dataSource type="UNPOOLED">
                <property name="driver" value="${oracle.driver}"/>
                <property name="url" value="${oracle.url}"/>
                <property name="username" value="${oracle.username}"/>
                <property name="password" value="${oracle.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- databaseIdProvider:支持多數據庫廠商
        type="DB_VENDOR":VendorDatabaseIdProvider 作用是得到數據庫廠商的標識(JDBC getDatabaseProductName()),mybatis 就能根據數據庫廠商標識來執行不同的 SQL -->
    <databaseIdProvider type="DB_VENDOR">
        <!-- 為不同的數據庫廠商起別名 -->
        <property name="MySQL" value="mysql"/>
        <property name="Oracle" value="oracle"/>
        <property name="SQL Server" value="sqlserver"/>
    </databaseIdProvider>

    <!-- mappers:將 SQL 映射文件注冊到全局配置中 -->
    <mappers>
        <!-- 引用類路徑下的 SQL 映射文件 -->
        <!--<mapper resource="com/dao/MyUserMapper.xml"/>-->
    
        <!-- 引用網路路徑或者磁盤路徑下的sql映射文件 -->
        <!--<mapper url="file:///var/mappers/AuthorMapper.xml"/>-->
    
        <!-- 引用 Class 接口注冊,沒有 SQL 映射文件,所有的 SQL 都是利用注解寫在接口上 -->
        <!--<mapper class="com.dao.MyUserMapperAnnotation"/>-->
    
        <!-- 批量注冊,映射文件名必須和接口同名,且放在與接口同一層級目錄下 -->
        <package name="com.dao"/>
    </mappers>
</configuration>
View Code

 

各種配置在 xml 文件中需符合要求,配置順序如下

properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers?

 


官方文檔

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM