MyBatis全局配置文件

135 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情


1 引入dtd文件

需要引入http://mybatis.org/dtd/mybatis-3-config.dtdxml中才能正常出现各种属性的提示。

2 Configuration中的各个属性

2.1 properties

作用: 用来引入外部配置文件。

代码:

<!--引入类路径下的资源-->
<properties resource=""/>
<!--引入网络路径或者磁盘路径下的资源-->
<properties url=""/>

示例: 在全局配置中从外部配置文件获取JDBC的配置信息。

在外部定义一个jdbc.properties文件:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=41822319

在全局配置文件的<configuration>标签最上边添加<properties>标签,

注意一定要写在最上边,不然后边使用的时候会获取不到。

<!--使用properties来引入外部配置文件的内容-->
<properties resource="jdbc.properties"></properties>

通过${属性名}的形式来获取外部配置文件里的值:

<environments default="mysql">
        <environment id="mysql">
            <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>

2.2 settings

作用: 包含很多重要的设置项。

代码:

<!--name为设置项,value为设置项的值-->
<settings>
     <setting name="" value=""/>
</settings>

在全局配置文件的<configuration>标签中添加<settings>标签。

mapUnderscoreToCamelCase设为true之后,只要数据库字段名和Java类中的字段名字母一致,就可以忽略大小写和下划线。

 <settings>
        <!--是否自动开启驼峰命名规则-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--开启log-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

2.3 typeAliases

作用: 别名处理器:可以为我们的java类型起别名。

方式1: 为某个java类型起别名(只能一个一个起别名)

  • type:指定要起别名的类型全类名;默认别名就是类名小写;employee
  • alias:指定新的别名
<typeAliases>
  <typeAlias type="site.exciter.mybatis.model.Employee"/>
</typeAliases>
<typeAliases>
   <typeAlias type="site.exciter.mybatis.model.Employee" alias="emp"/>
</typeAliases>

方式2:批量起别名(可以给某个包下所有类批量起别名,别名都为类名;但是有可能多个包下有相同的类名,就会导致别名重复)

<typeAliases>
  <package name="site.exciter.mybatis.model"/>
</typeAliases>

方式3: 直接在类中使用@Alias注解

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

使用: 可以在mapper文件中直接使用别名

 <select id="getElementById" resultType="emp">
        select id, last_name, gender, email
        from table_employee
        where id = #{id}
</select>

2.4 typeHandlers

类型处理,用于Java类型和数据库类型映射。

2.5 objectFactory

2.6 plugins

插件。

2.7 environments

作用: 用于配置不同的开发环境。

代码:

 <environments default="dev_mysql">
        <environment id="dev_mysql">
            <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="test_mysql">
            <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>

default用于选择环境,environments下可以配置多个environment,每个environment需指定一个id,id代表当前环境的唯一标识,然后在default中通过id指定当前的环境。

environment下必须有两个标签:

  • transactionManager 事务管理器

type 事务管理器的类型:JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)

自定义事务管理器:实现TransactionFactory接口,ype指定为全类名。

  • dataSource 数据源

type 数据源类型:UNPOOLED(UnpooledDataSourceFactory)

|POOLED(PooledDataSourceFactory)

|JNDI(JndiDataSourceFactory)

自定义数据源:实现DataSourceFactory接口,type是全类名。

2.8 databaseIdProvider

作用: 用与支持多数据库厂商。

代码:

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

type="DB_VENDOR":VendorDatabaseIdProvider

作用就是得到数据库厂商的标识(驱动getDatabaseProductName()),mybatis就能根据数据库厂商标识来执行不同的sql;

MySQL,Oracle,SQL Server等。

如果当前没指定环境,则会使用第一个;如果指定是mysql,则使用第三个;如果指定是oracle环境,则使用第三个去查询。

<select id="getElementById" resultType="emp">
        select id, last_name, gender, email
        from table_employee
        where id = #{id}
</select>
<select id="getElementById" resultType="emp" databaseId="mysql">
        select id, last_name, gender, email
        from table_employee
        where id = #{id}
</select>
<select id="getElementById" resultType="emp" databaseId="oracle">
        select id, last_name, gender, email
        from table_employee
        where id = #{id}
</select>

2.9 mappers

作用: 将sql映射注册到全局配置中。

代码:

 <mappers>
        <!--映射文件路径-->
        <mapper resource="mapper/employee-mapper.xml"/>
        <mapper url=""/>
        <mapper class=""/>
        
        <package name=""/>
</mappers>
  • resource:引用类路径下的sql映射文件。
  • url:引用网路路径或者磁盘路径下的sql映射文件。
  • class:引用(注册)接口。

1、有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;

2、没有sql映射文件,所有的sql都是利用注解写在接口上;

推荐:比较重要的,复杂的Dao接口我们来写sql映射文件;不重要,简单的Dao接口为了开发快速可以使用注解。

package:批量注册。

关注木水小站 (zhangmushui.cn)和微信公众号【木水Code】,及时获取更多最新技术干货。