mybatis-config.xml系统核心配置文件
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
datasource(数据源)
databaseIdProvider(数据库厂商表示)
mappers(映射器)
元素节点的顺序不对会报错,有的节点可以不写。
environments元素
配置Mybatis的多套运行环境,将SQL映射到多个不同的数据库上,必须制定其中一个为默认运行环境,通过default指定。
子元素节点environment
dataSource元素使用标准的JDBC数据源接口来配置JDBC连接对象的资源。
数据源是必须配置的
有三种内建的数据源类型
type="[UNPOOLED|POOLED|JNDI]"
unpooled:这个数据源的实现只是每次被请求时打开和关闭连接。
pooled:这种数据源的实现利用“池”的概念将JDBC连接对象组织起来,这是一种使得并发web应用快速响应请求的流行处理方式。
jndi:这个数据源的实现是为了能在如Spring或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。
数据源也有很多第三方的实现,比如c3p0,dbcp,druid等等...
子元素节点:transactionManager事务管理器
<!-- 语法 -->
<transactionManager type="[ JDBC | MANAGED ]"/>
子元素节点:dataSource数据源
mappers
映射器:定义映射SQL语句文件
引入资源方式
使用相对于类路径的资源引用
使用完全限定资源定位符
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
使用映射器接口实现类的完全限定类名,需要配置文件名称和接口名称一致,并且位于同一目录下
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
</mappers>
将包内的映射器接口实现全部注册为映射器,但是需要配置文件名称和接口名称一致,并且位于同一目录下。
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
Mapper文件
<?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">
<mapper namespace="com.qiao.mapper.UserMapper">
</mapper>
namespace:命名空间
namespace的命名必须跟某个接口同名
接口中的方法与映射文件中sql语句id应该一一对应
namespace和子元素的id联合保证唯一,区别不同的mapper
绑定DAO 接口
namespqce命名规则:包名+类名
Properties优化
数据库这些属性都是可外部配置且可动态替换的,既可以在典型的Java属性文件中配置,也可以通过properties元素的子元素来传递。
第一步:在资源目录下新建一个db.properties
第二步:将文件导入properties配置文件
typeAliases优化
类型别名是为java类型设置一个短的名字。它只和xml配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
这样配置时,User可以用在任何使用com.qiao.pojo.User的地方
也可以指定一个包名,Mybatis会在包名下面搜索需要的javaBean,
<typeAliases>
<package name="com.qiao.pojo"/>
</typeAliases>
每一个在包com.qiao.pojo中的javabean,在没有注解的情况下,会使用Bean的首字母小写的非限定类名来作为它的别名。若有注解,则别名为其注解值。
@Alias("user")
public class User {
...
}
设置
设置相关(settings)
懒加载
日志实现
缓存开启关闭
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior"value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods"value="equals,clone,hashCode,toString"/>
</settings>
类型处理器
无论是MyBatis在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成java类型。
对象工厂
MyBatis每次创建结果对象的新实例时,它都会使用一个对象工厂实例来完成。
默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过有参构造方法来实例化。












网友评论