1. 主配置文件
前面项目中使用的 mybatis.xml 就是主配置文件。
主配置文件特点:
- xml 文件,需要在头部使用约束文件
<?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>
-
主要包含内容:
- 定义别名
- 数据源
- mapper 文件
完整主配置文件示例:
<?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>
<!--settings:控制mybatis全局行为-->
<settings>
<!--设置mybatis输出日志,打印到控制台上-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<!--可以指定一个类型一个自定义别名
type:自定义类型的全限定名称
alias:别名(短小易记)
-->
<typeAlias type="com.kaho.domain.Student" alias="stu" />
<typeAlias type="com.kaho.vo.ViewStudent" alias="vstu" />
</typeAliases>
<environments default="mydev">
<environment id="mydev">
<!--
transactionManager:mybatis提交事务、回滚事务的方式
type:事务处理的类型
1)JDBC 表示mybatis底层是调用JDBC中的Connection对象的commit、rollback,默认情况下,MyBatis 将自动提交功能关闭了,改为了手动提交。即程序中需要显式的对事务进行提交或回滚。
2)MANAGED 把mybatis的事务处理委托给其他容器(一个服务器软件、一个框架(Spring))
-->
<transactionManager type="JDBC"/>
<!--
dataSource:表示数据源,java体系中,规定实现了javax.sql.DataSource接口的都是数据源
创建数据库Connection对象连接数据库的
type:表示数据源的类型
1)POOLED:使用连接池,mybatis会创建PooledDataSource类对象
2)UNPOOLED:不使用连接池,每次执行sql语句,先创建连接,执行sql,再关闭连接
mybatis会创建一个UnpooledDataSource类对象来管理Connection对象的使用
3)JNDI:java命名和目录服务(类似于Windows注册表),MyBatis 会从 JNDI 服务上查找 DataSource 实例,然后返回使用
-->
<dataSource type="POOLED">
<!-- driver,url,username,password是固定的,不能自定义 -->
<!-- 这里还未引入properties数据库属性配置文件进行修改 -->
<!-- 数据库的驱动类名 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- 连接数据库的url字符串 -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdb?useUnicode=true&characterEncoding=utf-8"/>
<!-- 访问数据库的用户名 -->
<property name="username" value="root"/>
<!-- 密码 -->
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- sql mapper(sql映射文件)的位置 -->
<mappers>
<mapper resource="com/kaho/dao/StudentDao.xml"/>
</mappers>
</configuration>
其他 mybatis-settings :
<!-- settings是 MyBatis 中全局的调整设置,它们会改变 MyBatis 的运行时行为,应谨慎设置 -->
<settings>
<!-- 该配置影响的所有映射器中配置的缓存的全局开关。默认值true -->
<setting name="cacheEnabled" value="true"/>
<!--延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。默认值false -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 是否允许单一语句返回多结果集(需要兼容驱动)。 默认值true -->
<setting name="multipleResultSetsEnabled" value="true"/>
<!-- 使用列标签代替列名。不同的驱动在这方面会有不同的表现, 具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。默认值true -->
<setting name="useColumnLabel" value="true"/>
<!-- 允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。 默认值false -->
<setting name="useGeneratedKeys" value="false"/>
<!-- 指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。 -->
<!-- 默认值PARTIAL -->
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<!-- 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。默认SIMPLE -->
<setting name="defaultExecutorType" value="SIMPLE"/>
<!-- 设置超时时间,它决定驱动等待数据库响应的秒数。 -->
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<!-- 允许在嵌套语句中使用分页(RowBounds)默认值False -->
<setting name="safeRowBoundsEnabled" value="false"/>
<!-- 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 默认false -->
<setting name="mapUnderscoreToCamelCase" value="false"/>
<!-- MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。
默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。
若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。 -->
<setting name="localCacheScope" value="SESSION"/>
<!-- 当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。 -->
<setting name="jdbcTypeForNull" value="OTHER"/>
<!-- 指定哪个对象的方法触发一次延迟加载。 -->
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
2. 使用数据库属性配置文件
数据库的属性配置文件: 把数据库连接信息放到一个单独的文件中。 和 mybatis 主配置文件分开。
目的是便于修改,保存,处理多个数据库的信息。
步骤:
1)在 classpath 路径下,创建 properties 文件
在 resources 目录中定义一个属性配置文件,文件名称为 xxxx.properties ,例如 jdbc.properties
在属性配置文件中, 定义数据,格式是 key=value
其中 key: 一般使用 " . " 做多级目录。 例如 jdbc.mysql.driver,jdbc.driver
jdbc.properties :
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatisdb?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
一定要注意,上面的 url 中原本为 & 的地方需要改回 & ,不然将会报错 ! ! !
2)使用 <property> 标签
在 mybatis 的主配置文件开始处,使用 <property> 指定文件的位置
<?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>
<!--必须写在<configuration>标签内部的第一行!!!-->
<properties resource="jdbc.properties" />
......
3)使用 key 指定值
在需要使用值的地方,使用 ${key} 语法引入值
<dataSource type="POOLED">
<!--使用 properties 文件: 语法 ${key}-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
注意:这个 jdbc.properties 文件需要一起随 mybatis.xml 文件打包到 target 的 classes 目录下,否则可能出现 “Could not find resource jdbc.properties” 的错误
3. typeAliases(类型别名)
Mybatis 支持默认别名,可以采用自定义别名方式来开发,主要使用在 <select resultType=“别名”>
mybatis.xml 主配置文件定义别名:
<typeAliases>
<!-- 方式一
定义单个类型的别名
type:类型的全限定名称
alias:自定义别名
-->
<typeAlias type="com.kaho.domain.Student" alias="stu"/>
<!-- 方式二
批量定义别名,扫描整个包下的类,别名为类名(首字母大写或小写都可以)
name:包名
-->
<package name="com.kaho.domain"/>
<package name="其他包"/>
</typeAliases>
mapper.xml :
<select id="selectStudents" resultType="stu">
select id,name,email,age from student
</select>
4. mappers(映射器)
1)<mapper resource="" />
使用相对于类路径的资源,从 classpath 路径查找文件;这种方式下,每个 Dao 接口对应着一条映射以及自己的mapper.xml 映射文件
<mappers>
<mapper resource="com/kaho/dao/StudentDao.xml"/>
<mapper resource="com/kaho/dao/OrderDao.xml"/>
<mapper resource="com/kaho/dao/TeacherDao.xml"/>
</mappers>
2)<package name="" />
指定包下的所有 Dao 接口
注意:此种方法要求 Dao 接口名称和 mapper 映射文件名称相同,区分大小写,且在同一个目录中。
<mappers>
<!--name: xml文件(mapper文件)所在的包名, 这个包中所有xml文件一次都能加载给mybatis-->
<package name="com.kaho.dao"/>
<package name="com.kaho.dao2"/>
<package name="com.kaho.dao3"/>
</mappers>