全局配置文件的约束文件:mybatis-3-config.dtd
sql映射文件的约束文件:mybatis-3-mapper.dtd
这两个约束文件存在于mybatis-3.4.1.jar的org.apache.ibatis.builder.xml路径下
1.如何在Eclipse中引入约束文件:
(1)将需要引入的dtd文件从mybatis-3.4.1.jar文件中解压出来
(2)window—preferences—XML—XML catalog—Add:
Location:从File System中找到解压出来的dtd文件,打开
Key type:URI
Key:dtd文件的URL地址(全局配置文件的dtd的URL是http://mybatis.org/dtd/mybatis-3-config.dtd,sql映射文件的URL是http://mybatis.org/dtd/mybatis-3-mapper.dtd)
2.为何要引入dtd文件:编写xml时 Alt+/ 快捷键需要在引入dtd后才会有提示信息
mybatis可以使用propertis来引入外部properties配置文件的内容
两个属性:
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
<configuration>
<properties resource="dbconfig.properties">properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<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>
environment>
environments>
configuration>
dbconfig.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
基本结构:
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
settings>
settings标签:包含了很多设置项
setting标签:用来设置每一个设置项
name:设置项名
value:设置项取值
可以通过setting标签设置的项可以参考官方文档。
别名处理器,可以为Java类型起别名(别名不区分大小写)
type:指定要起别名的类型全类名;默认别名是类名小写
alias:指定新的别名
<typeAliases>
<typeAlias type="com.mybatis.bean.Employee" alias="Emp"/> -->
typeAliases>
name:指定包名(为当前包以及所有的下属包中的每一个类都起一个默认别名(类名小写))
批量起别名的情况下,可以使用注解 @Alias 为某个类型指定新的别名(写在Java类的定义前面)
<typeAliases>
<package name="com.mybatis.bean"/>
typeAliases>
如果在同一包内的不同子包中存在相同类名的类,则应该通过注解形式指定该类的别名
//使用注解来指定别名
@Alias("emp")
public class Employee {
//类中的成员
}
起别名的作用在于,以后在所有的xml文件中都可以通过该别名去指定这个类,而不再需要使用全类名
用于指定类型处理器,类型处理器用于 JavaType 和 JdbcType 之间的转换
<typeHandlers>
<typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
typeHandlers>
插件,拦截四大对象(Executor、ParameterHandler、ResultSetHandler、StatementHandler)的方法
environments标签用于配置多种环境,通过default指定使用某种环境,可以通过修改default的值来快速切换环境
environment:配置一个具体的环境信息,id代表当前环境的唯一标识
内部必须有transactionManager、dataSource标签
transactionManager:事务管理器
type:事务管理器的类型, type="[JDBC|MANAGED]
JDBC(JdbcTransactionFactory)代表使用jdbc的方式进行提交、回滚等
MANAGED(ManagedTransactionFactory)代表使用JEE服务器容器方式进行事务的控制
自定义事务管理器:实现TransactionFactory接口,type指定为该实现类的全类名
dataSource:数据源
type:数据源类型, type="[UNPOOLED|POOLED|JNDI]
UNPOOLED(UnpooledDataSourceFactory.class):不使用数据库连接池
POOLED(PooledDataSourceFactory.class):使用数据库连接池
JNDI(JndiDataSourceFactory.class):使用JNDI技术
自定义数据源:实现DataSourceFactory接口,type指定为该实现类的全类名
<configuration>
<environments default="mysql">
<environment id="oracle">
<transactionManager type="JDBC">transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
dataSource>
environment>
<environment id="mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
dataSource>
environment>
environments>
configuration>
用于支持多数据库厂商,根据不同的数据库厂商执行不同的语句
type=“DB_VENDOR” VendorDatabaseIdProvider
作用:得到数据库厂商的标识(驱动getDatabaseProductName()),mybatis可以根据数据库厂商标识来执行不同的sql
全局配置文件中:
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
databaseIdProvider>
sql映射文件中:
<mapper namespace="com.mybatis.dao.EmployeeMapper">
<select id="getEmpById" resultType="com.mybatis.bean.Employee" databaseId="mysql">
select id,last_name,email,gender from tbl_employee where id = #{id}
select>
<select id="getEmpById" resultType="com.mybatis.bean.Employee" databaseId="oracle">
select * from employees where id = #{id}
select>
mapper>
将sql映射注册到全局配置中
mapper:注册一个sql映射
resource:引用(注册)类路径下的sql映射文件
url:注册网络路径或磁盘路径下的sql映射文件
class:注册接口
1.有sql映射文件,且映射文件名与接口同名,并且与接口文件放在同一目录下
2.没有sql映射文件,所有的sql都是利用注解写在接口上
推荐:比较重要的DAO接口用sql映射文件,不重要的为了快速开发可以用注解形式
package:批量注册
name:指定包名
注意:有sql映射文件的,sql映射文件与接口同名,且与接口文件放在同一目录下
(可以在config文件夹下创建一个与DAO包名相同的文件夹,将sql配置文件放在该文件夹下)
使用注解形式的接口不需要有sql映射文件
<mappers>
<mapper class="com.mybatis.dao.EmployeeMapper"/> -->
mappers>
此时EmployeeMapper.java文件与EmployeeMapper.xml文件要放在同一目录下,且同名
EmployeeMapperAnnotation.java文件:
//EmployeeMapper的注解版本,不再需要对应的sql映射文件
package com.mybatis.dao;
import org.apache.ibatis.annotations.Select;
import com.mybatis.bean.Employee;
public interface EmployeeMapperAnnotation {
//将原本应该写在sql映射文件中的sql语句通过注解的方式直接写在接口内
@Select("select * from tbl_employee where id = #{id}")
public Employee getEmpById(Integer id);
}
此时对应的全局配置文件中的mapper:
<mappers>
<mapper class="com.mybatis.dao.EmployeeMapperAnnotation"/> -->
mappers>
不需要有EmployeeMapperAnnotation.xml文件的存在
<mappers>
<package name="com.mybatis.dao"/>
mappers>