(二)Mybatis的入门教程——全局配置文件中各标签作用

在全局配置文件的文档声明处,引入了一个XML的dtd约束文件,就是用来规定XML中标签语法规则的。


标签含义及作用

(1)properties标签的作用:mybatis可以使用这个标签来引入外部properties配置文件的内容

就是在数据源的一些属性配置,写在外部的配置文件(properties配置文件)中保存。

 

resource属性是为了引入类路径下的资源;

url属性是为了引入网络路径或者磁盘路径下的资源。

举例:

在properties配置文件中编写好数据源信息,然后在全局配置文件中引入properties配置文件就可以了。

在全局配置文件中,property标签中的value值不再写死了,而是使用${ }符号来取出外部配置文件中的值。

但是一般在mybatis和spring整合的时候,数据源的属性配置都是交给spring去做了,所以这个properties标签就不太使用了。

(2)settings标签包含了很多重要的设置项,其中setting用来设置每一个设置项,name是指设置项的名字,value是设置项取值

举例:

在上一篇文中介绍过,javabean的字段要和数据库中的字段一样,随后又对sql映射文件中,lastName这一字段进行了别名的处理,才得以查询成功。若不进行该处理,我们可以在settings里面进行配置,mapUnderscoreToCamelCase,即是否开启自动驼峰命名规则映射(即从经典数据库列名 A_COLUMN 到经典java属性名 aColumn 的类似映射),将其有效值设置为true。也可以解决该问题。

在当sql映射文件是使用如下sql语句时:

<select id="selectEmp" resultType="com.beans.Employee">
    SELECT * FROM tbl_employee WHERE  id = #{id};
</select>

在全局配置文件中添加settings配置:

然后测试效果:lastName的值会被封装上。

(3)typeAliases标签,别名处理器标签。别名不区分大小写

它的作用是把java类型,起一个简短一点的别名,这样的话,在XML文件中引用全类名的地方就可以写成别名了,不用写全类名,减少了一些工作量。

typeAlias标签则是为某一个java类起别名;

type属性则是指定要起别名的类型全类名,而默认别名就是类名小写;

alias属性指定新的别名。

在全局配置文件中这样设置:

    <typeAliases>
        <typeAliase type="com.bean.Employee" ></typeAliase>
    </typeAliases>

那么,在sql映射文件中的resultType也做相应修改:默认别名就是类名小写

<select id="selectEmp" resultType="employee">
    SELECT * FROM tbl_employee WHERE  id = #{id};
</select>

如果加上alias属性来指定新的别名,则全局配置文件修改为:

    <typeAliases>
        <typeAliase type="com.bean.Employee" alias="emp"></typeAliase>
    </typeAliases>

则sql映射文件中的resultType修改为:

<select id="selectEmp" resultType="emp">
    SELECT * FROM tbl_employee WHERE  id = #{id};
</select>

如果有多个bean,需要批量起别名,则需要用到package标签,name属性是指定包名为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写))。当然这个package标签,仍然在typeAliases标签内的。

在批量起别名的情况下,如果发生别名冲突,mybatis在运行的时候会报错,那么可以进入到javabean中相应类中,使用一个注解@Alias(" "),为该类指定一个新的别名。

那么,在sql映射文件中resulttype则也相应变成emp.

当然一般还是建议在写sql映射文件中resulttype的值写全类名比较好,条理清晰又直观。

(4)typeHandlers标签,译作类型处理器,作用是架起java类型和数据库类型一一映射的桥梁。

就好比说,把java对象保存到数据库中, string类型变量保存到数据库兼容的VARCHAR类型匹配。

(5)plugins标签,插件标签,是mybatis一个非常强大的功能。在了解了mybatis运行原理和机制以后,才能学的懂插件的整个流程。

简单介绍一下:

mybatis可以允许我们拦截到一些sql语句执行的一些核心步骤。这个拦截就是利用插件机制进行拦截的,而插件就是拦以下这四大对象的这些方法,在这些方法执行前后进行拦截。而这个拦截,其实也就是一个动态代理。

Executor,执行器,增删改等等方法。

可以利用插件机制在mybatis这个Executor对象,执行真正增删改之前,改变mybatis的一些默认行为,达到自定义的效果

ParameterHandler,参数处理器,sql语句预编译设置参数之类的功能。

ResultSetHandler,结果集处理器,就是把查出的数据拿到结果集中,并封装成javabean对象。

StatementHandler,sql语句处理器,包括预编译、设置参数等等。

(6)environments标签,mybatis可以配置多种环境,default指定使用某种环境,可以达到快速切换环境

environment标签:配置一个具体的环境信息,且必须有以下两个标签。id代表当前环境的唯一标识。就好比说,开发和测试是两个环境,通过environment配置的两个环境,在测试人员拿到项目的时候可以将environments标签中default属性的切换成开发环境的id。

transactionManager标签:事务管理器,type属性配置事务管理器的类型(两种类型:JDBC(JdbcTransactionFactory类的别名)和MANAGED(ManagedTransactionFactory类的别名))。也可以自定义事务管理器:实现TransactionFactory接口,type指定为全类名。但事务管理都交给Spring来做了,这边了解一下就可以了。

dataSource标签:数据源,type属性配置数据源的类型(三种类型:UNPOOLED(不使用连接池,每一次实现增删改查,都会和数据库建立一次新的连接)和POOLED(使用连接池技术)和JNDI,这三个类型,依旧是使用了别名)也可以自定义数据源:实现DataSourceFactory接口,type是全类名。但数据源配置也交给Spring来做了,这边了解一下就可以了。

(7)databaseIdProvider标签:相当于mybatis在移植性方面的支持的考虑。这个标签支持多数据库厂商。

mybatis可以根据不同的数据库厂商执行不同的sql语句,只需要告诉mybatis所写的sql语句是哪个数据库厂商下的,那么mybatis就可以动态的根据数据库厂商的标识来发送不同的sql语句。而这个功能的支持,就需要在全局配置文件中添加databaseIdProvider标签。

type="DB_VENDOR":VendorDatabaseIdProvider。作用是得到数据库厂商的标识(驱动自带,getDatabaseProductName()),mybatis就能根据数据库厂商标识来执行不同的sql。

一些数据库的标识:MySQL,Oracle,SQL Server等等。不过也可以为不同的数据库厂商起别名。

然后在sql映射文件中配置databaseId的属性值:

(8)mappers标签:将sql映射注册到全局配置中

mapper标签:注册一个sql映射。resource属性:引用类路径下的sql映射文件。url属性:引用网络路径下或者磁盘路径下的sql映射文件。class属性:引用(注册)接口。一种情况:有sql映射文件,映射文件名必需和接口名称相同,并且放在与接口同一目录下面;另一种情况:没有sql映射文件,所有的sql都是利用注解写在接口上的。最终推荐:一些比较重要的或者复杂的Dao接口来接sql映射文件,一些不重要的或者简单的Dao接口为了开发快速可以使用注解。

介绍一下第二种情况:

然后在全局配置文件中添加:

<mapper class="com.dao.EmployeeMapperAnnotatiton"/>

测试类中编写:

以上都是一个一个注册的,下面就介绍一下批量注册,依然使用package标签。其实跟之前介绍起别名的批量处理方法差不多。

(9)objectFactory标签,对象工厂,mybatis查出数据要封装对象的时候,就利用对象工厂创建对象实例。

其他标签没列举到的,就大致了解一下就行了。以上比较重要的标签就是(2)settings标签、(3)typeAliases标签、(7)databaseIdProvider标签、(8)mappers标签。

这些标签在编写的时候是有顺序的,不可以随意的编写:按照下图中的顺序来。如:properties标签在settings标签前面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值