一、引用 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. rsync 服务器搭建遇到的问题

    问题一: @ERROR: chroot failed rsync error: error starting client-server protocol (code 5) at main.c(152 ...

  2. CDQ题目套路总结 [未完成]

    CDQ学习资料 day1cdq分治相关 CDQ的IOI论文 1.优化斜率dp 左边对右边影响维护一个凸包解决 需要知识:①凸包②斜率dp 题目:√ HDU3842 Machine Works   HY ...

  3. C# MD5,hmacSHA1

    一 MD5 推荐使用: md5 MD5 md5Hasher = MD5.Create(); byte[] data = md5Hasher.ComputeHash(Encoding.Default.G ...

  4. LOJ2721 [NOI2018] 屠龙勇士 【扩展中国剩余定理】

    好久没写了,写一篇凑个数. 题目分析: 这题不难想,讲一下中国剩余定理怎么扩展. 考虑$$\left\{\begin{matrix}x \equiv a\pmod{b}\\ x \equiv c\pm ...

  5. 洛谷P1123取数游戏题解

    题目 这是一道简单的搜索题,考查的还是比较基础的东西,其时搜索有时候并不难写,主要是要想到怎么搜.比如这个题,如果想二维四个方向搜则没有头绪,反之因为搜索是用递归实现的,所以我们可以使用递归的特性,把 ...

  6. IT人员必须掌握的10项软技能

    现代企业的IT部门员工在具备技术能力的同时,还需要掌握一些软技能.现在来看这些软技能其实并不是什么新鲜事物,只是IT人员所需的这些软技能的范围与数量正在不断增加着. IT人员需要具备哪些技术能力,要取 ...

  7. Diagnostic Trouble Code诊断故障码

    所有电子控制单元(ECU)都会根据整车厂规范要求对相关故障进行记录,并储存在NVM(也称作EEPROM)相当于平常电脑上硬盘里.除故障代码外,还会记录故障发生时相关整车情况(如供电电压,环境温度 ...

  8. A1125. Chain the Ropes

    Given some segments of rope, you are supposed to chain them into one rope. Each time you may only fo ...

  9. JDK和CGLIB动态代理区别

    背景:虽然自己了解这两种代理的区别,但是面试时候还是答的很模糊,需要好好总结. 前言JDK动态代理实现原理(jdk8):https://blog.csdn.net/yhl_jxy/article/de ...

  10. 终于解决了用JAVA写窗口程序在不同的windows界面下的显示保持一致。

    好像是两三年前的时候发现这个问题. 由于在windows经典界面与windows xp界面下,窗口的标题栏的高度是不一样的. 所以我们在用Java写GUI程序的时候,会遇到一个问题. 当我把一个JFr ...