对照参考:
https://www.bilibili.com/video/av69742084?p=6
mybatis-config.xml核心配置文件
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
环境配置(environments)
可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
事务管理器(transactionManager)
JDBC –
直接使用JDBC的提交和回滚事务,依赖从数据源获得连接来管理事务作用域。
MANAGED –
它从不提交或回滚一个连接,让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。
<transactionManager type="JDBC"/>
[如果使用Spring + MyBatis,则没必要配置事务管理器,Spring 模块会使用自带的管理器覆盖前面的配置。]
数据源(dataSource)
连接数据库(c3p0、druid、jdbcTemplate)
<dataSource type="POOLED">
三种内建的数据源类型:
UNPOOLED | POOLED | JNDI
UNPOOLED:没有连接池,即用即连,性能没有要求
POOLED: 连接池,用完回收
JNDI:正常连接
综上可知mybatis默认事务管理JDBC,数据源是POOLED
属性(properties)
通过properties来读取配置文件,实现动态配置
切换2为一个动态配置:
<environment id="development2">
<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>
在当前包下创建对应的properties文件
src\main\resources\jdbc.properties
---------------------------------------------------
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&useSSL=true&serverTimezone=GMT&useUnicode=true
username = root
password = 123456
回到mybatis-config.xml配置properties映射配置
<properties resource="jdbc.properties"/>
或者直接在properties 元素的子元素中设置。例如:
在同时配置了外部文件和子元素标签的情况下:
mybatis优先使用外部文件获取配置信息
<properties resource="org/mybatis/example/jdbc.properties">
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
注意标签dtd约束,properties必须为最开始的标签
类型别名(typeAliases)
为 Java 类型设置缩写名字。 它仅用于 XML 配置,降低冗余的全限定类名书写。
<typeAliases>
<typeAlias alias="Author" type="domain.blog.Author"/>
<!--这样配置Blog可以用在任何使用domain.blog.Blog的地方-->
<typeAlias alias="Blog" type="domain.blog.Blog"/>
<typeAlias alias="Comment" type="domain.blog.Comment"/>
<typeAlias alias="Post" type="domain.blog.Post"/>
<typeAlias alias="Section" type="domain.blog.Section"/>
<typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>
第一种别名方式(一个别名一个类):
<typeAliases>
<typeAlias alias="User" type="pojo.User"/>
</typeAliases>
第二种(绑定包路径,实体类的首字母自动小写):
指定一个包名,
MyBatis 会在包名下面搜索需要的 Java Bean,比如:
[若是要扫描多个包下的类,那就多定义几个packag的属性即可]
------------------------------------------------------
<typeAliases>
<package name="domain.blog"/>
</typeAliases>
------------------------------------------------------
每一个在包 domain.blog 中的 Java Bean,
在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。
比如 domain.blog.Author 的别名为 author;
若有注解,则别名为其注解值。见下面的例子:
------------------------------------------------------
@Alias("author")
public class Author {
...
}
实体类的数量多,则使用第二种绑定包名方式
第一种可以自定义类的别名,第二种则需要注解实现别名
常见的Java 类型内建的类型别名。它们都是不区分大小写的,
注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
基本类型映射:
----------------------------------
别名 映射的类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
----------------------------------
包装类型及其他引用类型:
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator
设置(settings)
MyBatis的调整设置,改变 MyBatis 的运行时行为
设置名 描述 有效值 默认值
cacheEnabled 开启缓存 true | false true
lazyLoadingEnabled 懒加载 true | false false
useGeneratedKeys 自动生成主键 true | false False
mapUnderscoreToCamelCase 驼峰命名映射 true | false False
logImpl 指定日志 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 未设置
样例:
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
</settings>
映射器(mappers)
告诉 MyBatis 到哪里去找映射mapper.xml文件。
<mappers>
<!-- 使用相对于类路径的资源引用 -->
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<!-- 使用完全限定资源定位符(URL) -->
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mapper class="org.mybatis.builder.AuthorMapper"/>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<package name="org.mybatis.builder"/>
</mappers>
要注意的是选择[class]和[package]属性绑定映射的前提条件是:
1、Dao接口和mapper配置必须同名
2、Dao接口和mapper配置必须在同一目录
推荐resource配置mapper