一、引用 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?

官方文档

MyBatis-Configuration的更多相关文章

  1. mybatis:"configuration" must match "(properties?,settings?,typeAliase.....

    在运行mybatis配置文件的时候,出现错误: mybatis:"configuration" must match "(properties?,settings?,ty ...

  2. springboot项目war包部署及出现的问题Failed to bind properties under 'mybatis.configuration.mapped-statements[0].

    1.修改pom文件 修改打包方式 为war: 添加tomcat使用范围,provided的意思即在发布的时候有外部提供,内置的tomcat就不会打包进去 <groupId>com.scho ...

  3. mybatis plugins实现项目【全局】读写分离

    在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...

  4. mybatis笔记3 一些原理的理解

    1,mybatis流程跟踪,原理理解 基本思路: 从SqlSessionFactory的初始化出发,观察资源的准备和环境的准备,以及实现持久层的一些过程: 进入SqlSessionFactoryBea ...

  5. 重构Mybatis与Spring集成的SqlSessionFactoryBean(2)

    三.代码重构 1.先使用Eclipse把buildSqlSessionFactory()方法中众多的if换成小函数 protected SqlSessionFactory buildSqlSessio ...

  6. 重构Mybatis与Spring集成的SqlSessionFactoryBean(1)

    一般来说,修改框架的源代码是极其有风险的,除非万不得已,否则不要去修改.但是今天却小心翼翼的重构了Mybatis官方提供的与Spring集成的SqlSessionFactoryBean类,一来是抱着试 ...

  7. MyBatis(3.2.3) - Configuring MyBatis using XML, Environment

    The key component of MyBatis is SqlSessionFactory from which we get SqlSession and execute the mappe ...

  8. MyBatis Tutorial – CRUD Operations and Mapping Relationships – Part 1---- reference

    http://www.javacodegeeks.com/2012/11/mybatis-tutorial-crud-operations-and-mapping-relationships-part ...

  9. MyBatis与Spring设置callSettersOnNulls

    项目中集成Mybatis与Spring,使用的是Mybatis3.2.7,以及Spring4.0.5,mybatis-spring-1.2.2;由于项目组成员想要偷懒,将数据从DB中查询出来时须要将字 ...

  10. 这丫头也的还真清楚,但是跑不通呢,换3.0.3的mybatis也不行

    http://java.dzone.com/articles/ibatis-mybatis-handling-joins http://mybatis.github.io/spring/mappers ...

随机推荐

  1. JDK 与TOMCAT的安装详解

    转自:http://www.jb51.net/article/51909.htm Tomcat7.0.22在Windows下详细配置过程 一.JDK1.7安装 1.下载jdk,下载地址:http:// ...

  2. Codeforces Round #542 Div. 1

    A:显然对于起点相同的糖果,应该按终点距离从大到小运.排个序对每个起点取max即可.读题花了一年还wa一发,自闭了. #include<iostream> #include<cstd ...

  3. 洛谷P1048采药题解

    题目 这是一个裸的01背包,因为题目中没说可以采好多次,不多说上代码, #include<iostream> using namespace std; int main() { int n ...

  4. Django+Xadmin打造在线教育系统(八)

    首页和全局404,500配置 轮播图 公开课 授课机构 新建view ## 首页view class IndexView(View): def get(self,request): # 取出轮播图 a ...

  5. Apache 安装及常用参数设置

    禁用 selinux setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/confi ...

  6. 【BZOJ2125】最短路(仙人掌,圆方树)

    [BZOJ2125]最短路(仙人掌,圆方树) 题面 BZOJ 求仙人掌上两点间的最短路 题解 终于要构建圆方树啦 首先构建出圆方树,因为是仙人掌,和一般图可以稍微的不一样 直接\(tarjan\)缩点 ...

  7. hexo报错集锦

    1.报错信息如下 FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubles ...

  8. LOJ#6285. 数列分块入门 9

    有点难..... 要求区间众数,所以我可以先把区间分块,然后我预处理出从第 i 块到第 j 块的众数,用dp[i][j]记录下来. 因为需要知道众数的num值, 所以我可以用一个vector来保存每个 ...

  9. [NOI2015]寿司晚宴(状压dp)

    为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴.小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3,⋯,n-1,其中第种 ...

  10. Pro Git

    1.安装 Linux: $ yum install git $ apt-get install git windows: 打开 http://git-scm.com/download/win,下载会自 ...