配置解析
核心配置文件
mybatis-config.xml
配置文件中能配置的内容:配置顺序不对会报错
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
<!-- 注意元素节点的顺序!顺序不对会报错 -->
环境配置(environments)
- 配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,必须指定其中一个为默认运行环境(通过default指定)
- 子元素节点:environment
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<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>
-
transactionManager:事务管理器,mybatis中由两种事务管理器,JDBC和MANAGED。
- JDBC:直接使用了 JDBC 的提交和回滚设施,依赖从数据源获得的连接来管理事务作用域。
- MANAGED :由于一些老的技术,spring已经不用这个了。
使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
-
dataSource:数据源,有三种数据源类型
- UNPOOLED:不用连接池,每次请求都会打开和关闭数据库连接。
- POOLED:使用连接池
- JNDI:EJB用的,现在用的少
Mybatis的默认事务管理器就是JDBC,连接池:POOLED
属性(properties)
配置属性,可以通过加载外部文件配置,也可以mybatis配置文件中配置。
示例:创建外部配置文件(properties类型)
注意:配置时,属性值不需要加双引号,并且之前在配置文件中&的转义字符&
也可以直接写成&
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=123456
在配置mybatis配置文件中加载
<configuration>
<!--导入properties文件-->
<properties resource="db.properties"/>
<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="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
</configuration>
在mybatis配置文件中配置
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="1234"/>
</properties>
如果同时在外部文件和mybatis配置文件中都配置的话,以外部文件配置为主,外部配置文件优先级更高。
映射器(mappers)
定义映射SQL语句文件。
四种引入资源的方式:
- 相对于类路径的资源引用,引入mapper.xml文件(实现接口的文件),通过斜杠分隔
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
</mappers>
- 完全限定资源定位符(URL),不使用
<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
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--绑定接口-->
<mapper namespace="top.jarvaniv.dao.UserMapper">
</mapper>
namespace:命名空间
- 必须与某个接口名相同
- 接口中的方法名与映射文件中sql语句的id一一对应,且id值保证唯一
- 命名规则:包名+接口名
类型别名(typeAliases)
- 第一种方式
使用格式:
<typeAliases>
<typeAlias alias="别名" type="某个类的具体路径"/>
<!-- 例如: -->
<typeAlias alias="Blog" type="domain.blog.Blog"/>
</typeAliases>
之后,便可以在任何地方用Blog代替domain.blog.Blog,实现相同的效果。
-
第二种方式
指定包名,改包下面的所有需要的javaBean,都会有一个默认别名,默认别名的格式是:类名首字母小写。
<typeAliases> <package name="com.kuang.pojo"/> </typeAliases>
如果这个包下有一个javaBean,名字是UserList,那么她的别名就是userList。
-
注解的形式
可以直接给javaBean(实体类)添加注解,设置别名:
@Alias("user")
public class User {
...
}
注释形式不受第二种方式的限制,即使设置了包名,如果有注解,则注解的优先级高于第二种形式。
java类型内建的类型别名,不区分大小写。
八大基本类型:在开头+_
封装类:首字母小写
设置
完整的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>