一、引用 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);
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>
各種配置在 xml 文件中需符合要求,配置順序如下
properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers?
官方文檔