概述
了解Config配置文件
1. properties标签
自定义properties文件,将关于数据库的配置放入该文件中。
数据源引入该文件properties文件中所定义的配置
properties:属性有俩,一个是resource:用于执行本项目中的配置文件,
也可以是url:一般引入本地资源文件或网络资源文件
<configuration>
<!--引入外部的properties文件中的值-->
<properties resource="jdbc.properties"></properties>
</configuration>
其中的属性就可以在整个配置文件中使用,使用可替换的属性来实现动态配置。比如:
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${pwd}"/>
</dataSource>
注意:
如果在这些地方,属性多于一个的话,MyBatis 按照如下的顺序加载它们:
- 在 properties 元素体内指定的属性首先被读取
- 从类路径下资源或 properties 元素的 url 属性中加载的属性第二被读取,它会 覆盖已经存在的完全一样的属性
- 作为方法参数传递的属性最后被读取, 它也会覆盖任意已经存在的完全一样的属性,这些属性可能是从 properties 元素体内和资源/url 属性中加载的。
因此, 最高优先级的属性是那些作为方法参数的, 然后是资源/url 属性, 最后是 properties 元素中指定的属性
2.settings标签 常用的改变的,其余的默认配置
这些是极其重要的调整, 它们会修改 MyBatis 在运行时的行为方式
- cacheEnabled 这个配置使全局的映射器启用或禁用 缓存。
有效值及默认值— true | false false - lazyLoadingEnabled 全局启用或禁用延迟加载。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。
有效值及默认值— true | false false - aggressiveLazyLoading 当启用时, 有延迟加载属性的对象在被调用时将会完全加载任意属性。否则, 每种属性将会按需要加载
有效值及默认值— true | false true - useGeneratedKeys 允许 JDBC 支持生成的键。 需要适合的驱动。如果设置为 true 则这个设置强制生成的键被使用, 尽管一些驱动拒绝兼容但仍然有效(比如 Derby),获取主键自增的值。在insert中使用的时候。
有效值及默认值— true | false false
<!--
useGeneratedKeys=”true“ :使用自增主键策略
keyProperty=“typeId”:将生成的主键绑定到对象的哪个属性中,此时便可以通过对象的typeId属性获取自增主键的值
-->
<insert id="saveGetKey" parameterType="com.liujiawei.bean.GoodsType" useGeneratedKeys="true" keyProperty="typeId">
insert into goods_type values(null, #{typeName}, #{typeDesc})
</insert>
- mapUnderscoreToCamelCase 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。
有效值及默认值— true | false false
<!-- 开启驼峰命名法-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
- useColumnLabel 使用列标签代替列名。 不同的驱动在这 方便表现不同。参考驱动文档或充分测 试两种方法来决定所使用的驱动。
有效值及默认值— true | false true
3.typeAliases标签
类型别名是为 Java 类型命名一个短的名字。 它只和 XML 配置有关, 只用来减少类完全 限定名的多余部分
(别名不区分大小写)
<typeAliases>
<typeAlias type="com.liujiawei.bean.GoodsType" alias="goodsType"></typeAlias>
</typeAliases>
除此以为还可以批量起别名(别名为默认值),使用package标签,为该包下的所有的类起别名。Name属性指定包名。为当前包以及后代包都起一个默认别名,就是类型小写。
<typeAliases>
<package name="com.liujiawei.bean"/>
</typeAliases>
如果此时不想使用默认别名或者类名重复,可以在该类中使用注解@Alias(“goodsType”)的方式起别名
注意:mybatis有已经起好的别名。自己起的别名不能与人家起好的别名重复。推荐使用完全限定名
如:List、Map的别名默认为list、map
4.typeHandlers标签
类型处理器
注意:从 3.4.5 开始,MyBatis 默认支持 JSR-310(日期和时间 API 。
java类型与数据库类型进行适配,mybaits3.4后的版本已经自己注册成功了。之前的版本需要自己通过该标签配置
5.objectFactory标签
MyBatis 每次创建结果对象新的实例时, 它使用一个 ObjectFactory 实例来完成。 如果参 数映射存在,默认的 ObjectFactory 不比使用默认构造方法或带参数的构造方法实例化目标 类做的工作多。如果你想重写默认的 ObjectFactory,你可以创建你自己的
ObjectFactory 接口很简单。它包含两个创建用的方法,一个是处理默认构造方法的,另外一个是处理带参数构造方法的。最终,setProperties 方法可以被用来配置 ObjectFactory。 在 初 始化 你 的 ObjectFactory 实例 后 , objectFactory 元素 体 中定 义的 属 性会 被传 递 给 setProperties 方法。
6.plugins标签
自定义插件,已经定义好的有以下四个
Executor:执行器,增删改查
ParameterHandler:参数处理器,sql预编译需要设置参数
ResultSetHandler:结果集处理器,将查出的数据封装到对象
StatementHandler:sql语句处理器
这些类中方法的细节可以通过查看每个方法的签名来发现,或者直接查看 MyBatis 发行包中的源代码。
7.environments标签
可以配置多个环境,有子标签environment,具体配置一个环境。通过environments中的default:属性指向默认配置的某个环境。
environment标签,有一个id属性,代表当前环境的唯一标识(可以自己取值)
必须再包含俩个子标签—
transactionManager(配置事物管理器)
dataSource(数据源)标签。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${pwd}"/>
</dataSource>
</environment>
</environments>
一个很重要的问题要记得:你可以配置多种环境,但你只能为每个 SqlSessionFactory 实例选择一个。
如果你想连接两个数据库,你需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,你就需要三个实例,以此类推
注意一些关键点
默认使用的环境 ID(比如:default=“development”)。
每个 environment 元素定义的环境 ID(比如:id=“development”)。
事务管理器的配置(比如:type=“JDBC”)。
数据源的配置(比如:type=“POOLED”)。
默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。
事务管理器transactionManager
在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
- JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
- MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为
<transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager>
这两种事务管理器类型都不需要设置任何属性。它们其实是类型别名,换句话说,你可以用 TransactionFactory 接口实现类的全限定名或类型别名代替它们。
public interface TransactionFactory {
default void setProperties(Properties props) { // 从 3.5.2 开始,该方法为默认方法
// 空实现
}
Transaction newTransaction(Connection conn);
Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit);
}
在事务管理器实例化后,所有在 XML 中配置的属性将会被传递给 setProperties() 方法。你的实现还需要创建一个 Transaction 接口的实现类
public interface Transaction {
Connection getConnection() throws SQLException;
void commit() throws SQLException;
void rollback() throws SQLException;
void close() throws SQLException;
Integer getTimeout() throws SQLException;
}
使用这两个接口,你可以完全自定义 MyBatis 对事务的处理。
dataSource(数据源)标签
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):
- UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接
- POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。
- JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI上下文的数据源引用。
8.mappers标签
既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。
mybatis找到映射的方法
- 将包内的映射器接口实现全部注册为映射器
<mappers>
<package name="com.liujiawei.dao"/>
</mappers>
- 使用相对于类路径的资源引用
<mappers>
<mapper resource="com/liujiawei/dao/GoodsTypeDao.xml"></mapper>
</mappers>
- 使用映射器接口实现类的完全限定类名
<mappers>
<mapper class="com.liujiawei.dao.GoodsTypeDao"></mapper>
</mappers>
这些配置会告诉 MyBatis 去哪里找映射文件,剩下的细节就应该是每个 SQL 映射文件了
最后
以上就是强健耳机为你收集整理的MyBatis配置文件详解的全部内容,希望文章能够帮你解决MyBatis配置文件详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复