1、引入dtd约束

  1. window -> preference -> XML -> XML Catalog
  2. 点击add,在key栏填入:http://mybatis.org/dtd/mybatis-3-config.dtd,将key type选为URI
  3. 在Location栏选择mybatis-3-config.dtd文件
  4. 点击ok,完成

2、properties标签引入外部配置文件

mybatis可以使用properties来引入外部properties配置文件的内容;

  • resource:引入类路径下的资源。
  • url:引入网络路径或磁盘路径下的资源

<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>

3、settings标签设置运行时行为

settings包含很多重要的设置项

  • setting: 用来设置每一个设置项
    • name: 设置项名
    • value: 设置项取值
<settings>
	<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

4、为java类型起别名

注意:别名不区分大小写

4.1 typeAliases标签

typeAliases:别名处理器,可以为Java类型起别名

  • typeAlias:为某个java类型起别名
    • type: 指定要起别名的类型全类名;
    • alias: 指定新的别名。若不设置该值,则默认别名就是类名小写
<typeAliases>
	<typeAlias type="mybatis.bean.Employee" alias="emp"/>
</typeAliases>

4.2 package标签 批量起别名

package:为某个包下的所有类批量起别名
* name:指定包名。(为当前包以及所有的子包的每一个类都起一个默认别名(类名小写))

<typeAliases>
	<!-- <typeAlias type="mybatis.bean.Employee" alias="emp"/> -->
	<package name="mybatis.bean"/>
</typeAliases>

4.3 @Alias注解(批量起别名的情况下)

在批量起别名的情况下,可以使用@Alias注解为某个类型指定新的别名。

@Alias("emp")
public class Employee {
    ...
}

4.4 MyBatis的默认别名

Alias Mapped Type
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

5、 运行环境

  • : 环境们,mybatis可以配置多种环境,default属性指定使用某种环境,以此快速切换环境。

    • : 配置一个具体的环境信息,id属性代表当前环境的唯一标识。必须包含两个标签。

      • : 事务管理器;

        • type属性:事务管理器的类型。 JDBC(JdbcTransactionFactory) | MANAGED(ManagedTransactionFactory)
          • 自定义事务管理器:实现TransactionFactory接口,type指定为全类名
      • :数据源。

        • type属性:数据源类型;UNPOOLED(UnpooledDataSourceFactory) | POOLED(PooledDataSourceFactory) | JNDI(JndiDataSourceFactory)
          • 自定义数据源:实现DataSourceFactory接口,type是全类名
<environments default="development">
		<environment id="test">
			<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>
		
		<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>

6、databaseIdProvider 多数据库支持

  • : 支持多数据库厂商;
    • type="DB_VENDOR": VendorDatabaseProvider;作用就是得到数据库厂商的标识(驱动getDatabaseProductName()),mabatis就能根据数据库厂商标识来执行不同的sql。

全局配置文件(mybatis-config.xml):

<databaseIdProvider type="DB_VENDOR">
	<!-- 为不同的数据库厂商起别名 -->
	<property name="MySQL" value="mysql" />
	<property name="Oracle" value="oracle" />
	<property name="SQL Server" value="sqlserver" />
</databaseIdProvider>

sql映射文件中可以使用databaseId属性指定数据库厂商的别名

<!-- 带数据库标识的和所有不带数据库标识的都会被加载 ,之后会根据具体的环境执行更精确的sql-->
<select id="getEmpById" resultType="mybatis.bean.Employee" >
	select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="mybatis.bean.Employee" databaseId="mysql">
	select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="mybatis.bean.Employee" databaseId="oracle">
	select EMPLOYEE_ID id, LAST_NAME lastName, EMAIL email
	from employees where EMPLOYEE_ID = #{id}
</select>

7、 注册sql映射

  • : 将sql映射到全局配置中
    • : 注册一个sql映射
      注册配置文件
      • resource属性: 引用类路径下的sql映射文件
      • url属性: 引用网络路径或磁盘路径下的sql映射文件
        注册接口
      • class属性: 引用(注册)接口
        1. 有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;
        2. 没有sql映射文件,所有sql都是利用注解写在接口上
          推荐
          • 比较重要的,复杂的Dao接口写sql映射文件;
          • 不重要的,简单的Dao接口为了开发快速可以使用注解;
<!-- 将sql映射文件注册到全局配置文件中 -->
<mappers>
	<mapper resource="mybatis/mapper/EmployeeMapper.xml" />
	<!-- <mapper class="mybatis.dao.EmployeeMapper"/> -->
	<mapper class="mybatis.dao.EmployeeMapperAnnotation"/>
</mappers>

注解方式:

public interface EmployeeMapperAnnotation {

	@Select("select * from tbl_employee where id=#{id}")
	public Employee getEmpById(Integer id);
}
  • : 批量注册。 映射文件名必须和接口同名,并且放在与接口同一目录下
<!-- 将sql映射文件注册到全局配置文件中 -->
	<mappers>
		<!-- <mapper resource="mybatis/mapper/EmployeeMapper.xml" /> -->
		<!-- <mapper class="mybatis.dao.EmployeeMapper"/> -->
		<!-- <mapper class="mybatis.dao.EmployeeMapperAnnotation"/> -->
		
		<!-- 批量注册 -->
		<package name="mybatis.dao"/>
	</mappers>