MyBatis的配置

MyBatis配置XML的层次结构

<?xml version="1.0" encoding="UTF-8"?>
<Configuration><!--配置-->
    <properties/><!--属性-->
	<settings/><!--设置-->
	<typeAliases/><!--类型命名-->
	<typeHandlers/><!--类型处理器-->
	<objectFactory/><!--对象工厂-->
	<plugins/><!--插件-->
	<environments><!--配置环境-->
	    <environment><!--环境变量-->
		     <transactionManager/><!--事务管理器-->
			 <dataSource/><!--数据源-->
        </environment>
	</environments>
	<databaseIdProvider/><!--数据库厂商标识-->
	<mappers/><!--映射器-->
</Configuration>

properties元素

properties是一个配置属性的元素,让我们能在配置文件中的上下文使用它。
MyBatis提供3中配置方式

  • property子元素
  • properties配置文件
  • 程序参数传递

注:Mybatis支持的3种配置方式可能同时出现,并且属性还会重复配置。这3种方式是存在优先级的,MyBatis将按照下面的顺序来加载。
1.在properties元素体内指定的属性首先被读取
2.根据properties元素中的resource属性读取类路径下属性文件,或者根据url属性指定的路径读取属性文件,并覆盖已读取的同名属性。
3.读取作为方法参数传递的属性,并覆盖已读取的属性。

设置(settings)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
settings 的配置项很多,但是真正用到的不会太多,我们把常用的配置项研究清楚就可以了,比如关于缓存的 cacheEnabled,关于级联的 lazyLoadingEnabled 和 aggressiveLazy Loading,关于自动映射的 autoMappingBehavior 和 mapUnderscoreToCamelCase,关于执行器类型的 defaultExecutorType 等。

别名(typeAliases)

别名是一个指代的名称。因为我们遇到的类全限定名过长,所以我们希望用一个简短的名称去指代它,而这个名称可以在mybatis上下文中使用,别名在MyBatis里面分为系统定义别名和自定义别名两类。注意,在MyBatis中别名是不区分大小写的。

系统定义别名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果需要使用对应类型的数组型,要看其是否能支持数据,如果支持只需要使用别名加[]即可,比如 _int 数组的别名就是 _int[]。而类似 list 这样不支持数组的别名,则不能那么写。

自定义别名

<!--定义别名-->
<typeAliases>
    <typeAlias alias="role" type="com.learn.chapter.po.Role"/>
</typeAliases>

这样我们就可以在Mybatis的上下文中使用“role”来代替其类的全路径。

如果com.learn.chapter.po这个文件夹中包含许多许多类,我们不可能一一命名
mybatis支持我们通过自动扫描形式自定义别名

<!--定义别名-->
<typeAliases>
    <typeAlias alias="role" type="com.learn.chapter.po"/>
</typeAliases>

配置了包扫描路径,即使没有配置Alias,Mybatis会自动把类名的第一个字母变成小写作为该类的别名。

typeHandler 类型处理器

ObjectFactory 对象工厂

environments 配置环境

配置环境可以注册多个数据源(dataSource),每一个数据源分为两大部分:一个是数据源(dataSource)的配置,另一个是数据库事务(transactionManager)的配置。下面是一个连接池的数据源的配置

<environments default="development">
    <environment id="development">
	    <transactionManager type="JDBC">
		    <property name="autoCommit" value="false"/>
		</transactionManager>
		<dataSource type="POOLED">
		   <property name="driver" value="com.mysql.jdbc.Driver"/>
		   <property name="url" value="jdbc:mysql"//localhost:3306/oa"/>
		   <property name="username" value="root"/>
		   <property name="passeword" value="learn"/>
		</dataSource>
	</environment>
</environments>

分析一下上面的配置

  • environments中的属性default,标明在缺省情况下,我们将启用哪个数据源配置

  • environment元素是配置一个数据源的开始,属性id是设置这个数据源的标志,以便MyBatis上下文使用它。

  • transactionManager配置的是数据库事务,其中type属性有3中配置方式。
    (1) JDBC:采用JDBC方式管理事务,在独立编码中常用
    (2)MANAGED:采用容器方式管理事务,在JNDI数据源中常用。
    (3)自定义,由使用者自定义数据库事务管理办法,适用于特殊应用

  • property元素则是可以配置数据源的各类属性,我们这里配置了autoCommit=false 则是要求数据源不自动提交。

  • dataSource标签,是配置数据源的连接信息,type属性是提供我们对数据源连接方式的配置,同样MyBatis提供这么几种配置方式。

(1) UNPOOLED,非连接池数据库
(2)POOLED:连接池数据库
(3)JNDI,JNDI数据源
(4)自定义数据源。
其中,配置的property元素,就是定义数据库的各类参数。

数据库事务

数据库事务MyBatis是交由SqlSession去控制的,我们可以通过SqlSession提交(commit)或者回滚(rollback)。我们插入一个角色对象,如果成功就提交,否则就回滚
代码清单如下:

try{
	sqlSession=SqlSessionFactoryUtil.openSqlSession();
	RoleMapper roleMapper=sqlSession.getMapper(RoleMapper.class);
	int count=roleMapper.insertRole(role);
	sqlSession.commit();
	return count;
}catch(Exception ex){
	sqlSession.rollback();
}finally{
	sqlSession.close();
}

databaseIdProvider 数据库厂商标识

MyBatis可能会运行在不同厂商的数据库中,它为此提供了一个数据库标识,并提供自定义。它的作用在于指定SQL到对应的数据库厂商提供的数据库中运行。

使用默认系统规则

MyBatis提供系统默认的配置规则

<databaseIdProvider type="DB_VENDOR">
     <property name="SQL Server" value="sqlserver"/>
	 <property name="MySQL" value="mysql"/>
	 <property name="DB2" value="db2"/>
	 <property name="Oracle" value="oracle"/>
</databaseIdProvider>

type="DB_VENDOR"是启动MyBatis内部注册的策略器。

我们也可以指定SQL在哪个数据库厂商执行,我们把Mapper的XML配置修改一下,如下所示

<select parameterType="string" id="getRole" resultType="role" databaseId="mysql">
    select role_no as roleNo,role_name as roleName,note from t_role
	where role_no=#{roleNo,javaType=String,jdbcType=VARCHAR}
</select>

引入映射器的方法

1.用文件路径引入映射器

<mappers>
   <mapper resource="com/learn/chapter3/mapper/roleMapper.xml"/>
</mappers>

2.用包名引入映射器

<mappers>
   <package name="com.learn.chapter3.mapper"/>
</mappers>

3.用类注册引入映射器

<mappers>
   <mapper class="com.learn.chapter3.mapper.UserMapper"/>
   <mapper class="com.learn.chapter3.mapper.RoleMapper"/>
</mappers>

4.用userMapper.xml(外部文件形式)引入映射器

<mappers>
   <mapper url="file:///var/mappers/com/learn/chapter3/mapper/roleMapper.xml"/>
</mappers>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值