MyBatis全局配置文件参数
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
mybatis的全局配置文件SqlMapConfig.xml,配置内容如下(以下的标签属性要按照从上到下的顺序编写进全局配置文件):
- properties(属性)
- settings(全局配置参数)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境集合属性对象)
- environment(环境子属性对象)
- transactionManager(事务管理)
- dataSource(数据源)
- mappers(映射器)
下面介绍一些常用的属性
1、properties属性
说明:mybatis可以使用properties来引入外部properties配置文件的内容;
- resource:引入类路径下的资源
- url:引入网络路径或者磁盘路径下的资源
需求:将数据库连接参数配置在dbconfig.properties中,只需要在mybatis-config.xml中加dbconfig.properties的属性值,在mybatis-config.xml中就不需要对数据库参数进行硬编码。
将数据库参数配置在dbconfig.properties的原因:数据库参数同一管理,方便其他xml引用该dbconfig.properties,例如当系统庞大形成集群的时候,系统升级需要修改数据库连接信息,需要脚本来操作,只需要操作dbconfig.properties即可.
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
在mybatis-config.xml中加载配置文件并引用配置文件中参数
<!-- 加载属性文件 -->
<!-- 元素体,properties中还可以配置一些属性名和属性值
<property name="jdbc.driver" value=""/>-->
<properties resource="dbconfig.properties"></properties>
<!-- 和spring整合后将会移除environments的配置 -->
<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>
注意:Mybatis会按照下面的顺序来加载属性:
- properties元素体内的值首先会被读取
- 然后会读取properties 元素中resouce或url加载的属性,它会覆盖已加载的同名属性
- 最后读取parameterType(sql配置文件中的)传递的属性,它会覆盖已读取的同名属性。
2、settings属性
settings包含了很多重要的设置项
setting用来设置每一个设置项
- name:设置项
- value:设置项取值
mapUnderscoreToCamelCase:驼峰命名规则
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
3、tpyeAliases(别名)属性
如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,在全局配置文件中通过别名定义,方便开发。可以为我们的java类起别名 ,别名不区分大小写。
typeAlias:为某个java类型起别名
- type:指定要起别名的类型全类型名;默认别名就是类名小写;employee
- alias:指定新的别名;
package:为某个包下的所有类批量取别名
- name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写)
定义单个别名:
<typeAliases>
<typeAlias type="dao.Employee" alias="employee"/>
</typeAliases>
在sql映射文件中的使用:
<select id="getEmpById" resultType="employee">
select * from tbl_employee where id = #{id}
</select>
批量定义别名:
<typeAliases>
<package name="dao"/>
<!--批量起别名的情况下,使用@Alias注解为我们某个类型指定新的别名-->
</typeAliases>
mybatis默认支持的别名:
4、environments(环境们)属性
mybatis可以配置多种环境,default指定使用某种环境。可以达到快速切换环境。
environment(一个环境): 配置一个具体的环境信息;必须要有下面的两个标签;id代表当前的唯一标识。
transactionManager:事务管理器;
- type:事务管理器的类JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransacationFactory)
自定义事务管理器:实现TransactionFactory接口.type指定为全类名。
dataSource:数据源;
- type:数据源的类型;UNPOOLED(不使用连接池的方式)|POOLED(使用连接池技术)|JNDI(使用JNDI技术)
- 自定义数据源:像我们之前要根据c3p0的数据源的方法,需要我们实现DataSourceFactory接口,type是全类名。
<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>
5、databaseIdProvider属性:
支持多数据库厂商的 type="DB_VENDOR"就是得到数据库厂商的标识(驱动getDatabaseProductName()),mybatis就能根据数据库厂商标识来执行不同的sql;MySQL,Oracle,SQL Server
<databaseIdProvider type="DB_VENDOR">
<!--为不同的数据库厂商起别名-->
<property name="MYSQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
6、mappers(映射配置)
将sql映射注册映射到全局配置中
mapper: 注册一个sql映射
注册配置文件
- resource:引用类路径下的sql映射文件
- url:引用网络路径下或者磁盘路径下的sql映射文件
注册接口
class: 引用(注册)接口,
- 有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;
- 没有sql映射文件,所有的sql都是利用注解写在接口上.
推荐:比较重要的,复杂的Dao接口我们来写sql映射文件。
不重要的,简单的Dao接口为了开发快速可以使用注解。
<mappers>
<!--注册加载单个sql映射文件-->
<mapper resource="EmployeeMapper.xml"/>
<mapper class="dao.EmployeeMapperAnnotation"/>
<!--批量注册:-->
<package name="dao"/>
</mappers>
使用class加载接口:
<mappers>
<!--注册带sql语句的函数的接口-->
<mapper class="dao.EmployeeMapperAnnotation"/>
</mappers>
带sql语句的接口:
public interface EmployeeMapperAnnotation {
@Select("select * from tbl_employee where id = #{id}")
public Employee getEmpById(Integer id);
@Insert("insert into tbl_employee(last_name,gender,email) value(#lastName},#{gender},#{email})")
public void addEmp(Employee employee);
}