MyBatis的核心配置文件标签详解

在MyBatis框架的核心配置文件中,<configuration>元素是配置文件的根元素,其他元素都要在<configuration>元素内配置。 具体元素层次结构如下图所示:
在这里插入图片描述
properties元素
<properties>是一个配置属性的元素,该元素通常用来将内部的配置外在化,即通过外部的配置来动态的替换内部定义的属性。例如,数据库的连接等属性,就可以通过典型的Java属性文件中的配置来替换,具体方式如下: 创建一个文件db.properties 把在配置jdbc的地方进行抽离。

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

配置properties元素:<properties resource="db.properties" />
使用:完成上述配置后, dataSource 中连接数据库的 个属性( driver url username password)值将会由 db.properties文件中对应的值来动态替换 这样就为配置提供了诸多灵活的选择
在这里插入图片描述
settings元素
<settings>元素主要用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等。 不对setting进行配置也是可以运行MyBatis的。具体配置参数如下表所示:

参数说明有效值默认值
cacheEnabled该配置影响所有映射器中配置的缓存全局开关true、falsefalse
lazyLoadingEnabled延迟加载的全局开关。开启时,所有关联对象都会延迟加载。特定关联关系中可以通过设置fetchType属性来覆盖该项的开关状态true/falsefalse
aggressiveLazyLoading关联对象属性的延迟加载开关。当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性都会按需加载true/falsetrue
multipleResultSetsEnable是否允许单一语句返回多结果集(需要兼容驱动)true/falsetrue
useColumnLabel使用列标签代替列名。不同的驱动在这方面有不同的表现。具体可参考驱动文档或通过测试两种模式来观察所true/falsetrue
useGeneratedKeys用驱动的行为允许JDBC支持自动生成主键,需要驱动兼容。如果设置为true,则这个设置强制使用自动生成主键,尽管一些驱动不兼容但仍可正常工作true/falsefalse
autoMappingBehavior指定MyBatis应如何自动映射列到字段或属性NONE表示取消自动映射: PARTIAL只会自动映射没有定义嵌套结果集映射的结果集; FULL会自动映射任意复杂结果集(无论是否嵌套)NONE、PARTIAL、FULLPARTIAL
defaultExecutorType配置默认的执行器。SIMPLE就是普通的执行器: REUSE执行器会重用预处理语句( prepared statements) ;BATCH执行器将重用语句并执行批量更新SIMPLE、REUSE、BATCHSIMPLE
defaultStatementTimeout设置超时时间,它决定驱动等待数据库响应的秒数。没有设置的时候,它取的就是驱动默认的时间任何正整数没有设置
mapUnderscoreToCamelCase是否开启自动驼峰命名规则( camel case)映射true、falsefalse
jdbcTypeForNull当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,比如NULL、VARCHAR或OTHERVARCHAR、NULL、OTHEROTHER

示例代码如下所示:使用name获取属性,使用value获取值。

   <settings>
         <setting name="cacheEnabled" value="true" />
         <setting name="lazyLoadingEnabled" value="true" />
         <setting name="multipleResultSetsEnabled" value="true" />
         <setting name="useColumnLabel" value="true" />
         <setting name="useGeneratedKeys" value="false" />
         <setting name="autoMappingBehavior" value="PARTIAL" />
     </settings>

typeAliases元素
<typeAliases>元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。别名的设置与XML配置相关,其使用的意义在于减少全限定类名的冗余。
如下代码所示:对一个java类设置别名为user。
其中, <typeAliases>元素的子元素<typeAlias>中的 type属性用于指定需要被定义别名的类的全限定名 alias属性的属性值user就是自定义的别名,它可以代替com.lzq.po.User 使用在MyBatis文件的任何位置,如果省略alias属性, MyBatis会默认将类名首字母小写后的名称作为别名

  <typeAliases>
             <typeAlias alias="user" type="com.lzq.po.User"/>
     </typeAliases>

当POJO类过多时,还可以通过自动扫描包的形式自定义别名,如下代码所示:
其中,<typeAliases>元素的子元素<package>中的name属性用于指定要被定义别名的包, MyBatis 会将所有com.lzq.po包中的 POJO类以首字母小写的非限定类名来作为它的别名,比如com.lzq.po.User的别名为user或者com.lzq. po.Custom类的别名为customer

<typeAliases>
	<package name="com.lzq.po"/>
</typeAliases>

typeHandler元素
typeHandler的作用就是将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型),或者从数据库取出结果时将jdbcType转换为javaType。
<typeHandler>元素可以在配置文件中注册自定义的类型处理器,它的使用方式有两种。

  • 注册一个类的类型处理器
    子元素<typeHandler>的handler 属性用于指定在程序中自定义的类型处理器类
<typeHandlers> 
	<typeHandler handler="com.itheima.type.CustomtypeHandler" />
</typeHandlers>
  • 注册一个包中所有的类型处理器
    子元素<package>的name属性用于指定类型处理器所在的包名,使用此种方式后,系统会在启动时自动地扫描com.lzq.type包下所有的文件,并把它们为类型处理器
<typeHandlers> 
	<package name="com.lzq.type" />
</typeHandlers>

objectFactory元素
MyBatis框架每次创建结果对象的新实例时,都会使用一个对象工厂( ObjectFactory )的实例来完成。MyBatis中默认的ObjectFactory的作用就是实例化目标类,它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。
MyBatis中默认的ObjectFactory的作用是实例化目标类,它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。通常使用默认的ObjectFactory即可。
MyBatis中的objectFactory是由org.apache.ibatis.eflection.factory.DefaultObjectFactory来提供服务的。大部分场景下都不用配置和修改,但如果想覆盖ObjectFactory的默认行为,则可以通过自定义ObjectFactory来实现,具体方式如下:
首先自定义一个对象工厂,实现objectFactory接口,或者继承DefaultobjectFactory这一个类,在这个类当中已经实现了接口,故直接继承这个类即可:如下代码所示:

    public class MyObjectFactory extends DefaultObjectFactory {
            private static final long serialVersionUID = -4114845625429965832L;
            public <T> T create(Class<T> type) {
				return super.create(type);
            }
            public <T> T create(Class<T> type, List<Class<?>> constructorArgTypes, 
                List<Object> constructorArgs) {
				return super.create(type, constructorArgTypes, constructorArgs);
            }
            public void setProperties(Properties properties) {
				super.setProperties(properties);
            }
            public <T> boolean isCollection(Class<T> type) {
				return Collection.class.isAssignableFrom(type);
            }
    }

随后在配置文件中使用元素配置自定义的ObjectFactory

<objectFactory type="com.itheima.factory.MyObjectFactory">
     <property name="name" value="MyObjectFactory"/>
</objectFactory>

plugins元素
MyBatis允许在已映射语句执行过程中的某一点进行拦截调用,这种拦截调用是通过插件来实现的。元素的作用就是配置用户所开发的插件。如果用户想要进行插件开发,必须要先了解其内部运行原理,因为在试图修改或重写已有方法的行为时,很可能会破坏MyBatis原有的核心模块。

environments元素
<environments>元素用于对环境进行配置。MyBatis的环境配置实际上就是数据源的配置,我们可以通过<environments>元素配置多种数据源,即配置多种数据库。
在配置该元素时,及对数据库进行配置:如上文配置properties元素给出的图:
事务管理器的配置
在MyBatis中,可以配置两种类型的事务管理器,分别是JDBC和MANAGED。关于这两个事务管理器的描述如下:

  • JDBC:此配置直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务的作用域。
  • MANAGED:此配置从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。默认情况下,它会关闭连接,但一些容器并不希望这样,为此可以将closeConnection属性设置为false来阻止它默认的关闭行为。

其中,需要注意的是:如果项目中使用的是Spring+ MyBatis,则没有必要在MyBatis中配置事务管理器,因为实际开发中,会使用Spring自带的管理器来实现事务管理。

数据源的配置
对于数据源的配置, MyBatis 框架提供了UNPOOLED、POOLED、JNDI三种数据源类型,

  • UNPOOLED 配置此数据源类型后,在每次被请求时会打开和关闭连接。它对没有性能要求的简单应用程序是一个很好的选择。在使用时,需要配置5种属性。如下表所示:
属性说明
drivereJDBC驱动的Java类的完全限定名(并不是JDBC驱动中可能包含的数据源类)。
url数据库的URL地址。
username登录数据库的用户名。.
password登录数据库的密码
defaultTransactionIsolationLevel默认的连接事务隔离级别。
  • POOLED 此数据源利用“池”的概念将JDBC连接对象组织起来,避免了在创建新的连接实例时所需要初始化和认证的时间。这种方式使得并发Web应用可以快速地响应请求,是当前流行的处理方式,除了上述UNPOOLED 的五种配置,还有以下属性可进行配置:
属性说明
poolMaximumActiveConnections在任意时间可以存在的活动 (也就是正在使用)连接数量,默认值: 10
poolMaximumldleConnections任意时间可能存在的空闲连接数
poolMaximumCheckoutTime在被强制返回之前,池中连接被检出(checkedout)时间,默认值:20000毫秒,即20秒
poolTimeToWait如果获取连接花费的时间较长,它会给连接池打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直处于无提示的失败),默认值: 20000毫秒,即20秒
poolPingQuery发送到数据库的侦测查询,用于检验连接是否处在正常工作秩序中。默认是“NO PINGQUERY SET",这会导致多数数据库驱动失败时带有一定的错误消息
poolPingEnabled是否启用侦测查询。若开启,必须使用一个可执行的SQL语句设置poolPingQuery属性(最好是一个非常快的SQL),默认值: false
poolPingConnectionsNotUsedFor配置poolPingQuery的使用频度。可以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测,默认值: 0(表示所有连接每一时刻都被侦测,只有poolPingEnabled的属性值为true时适用)
  • JNDI 可以在EJB或应用服务器等容器中使用。容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。在使用时,需要配置2个属性。如下表所示:
属性说明
initial_ context此属性主要用于在InitialContext中寻找上下文(即initialContext.lookup(inital context)) 。该属性为可选属性,在忽略时,data_ source 属性会直接从InitialContext中寻找,此属性表示引用数据源实例位置的上下文的路径。如果提供了initial context 配置,那么程序会
data_ source在其返回的上下文中进行查找;如果没有提供,则直接在InitialContext中查找

mappers元素
<mappers>元素用于指定MyBatis映射文件的位置,一般可以使用以下4种方法引入映射器文件,具体如下。

  1. 使用类路径引用
<mappers>
    <mapper resource="com/itheima/mapper/UserMapper.xml"/>
</mappers>
  1. 使用本地文件路径引入
<mappers>
    <mapper url="file:///D:/com/lzq/mapper/UserMapper.xml"/>
</mappers>
  1. 使用接口类引入
<mappers>
    <mapper class="com.lzq.mapper.UserMapper"/>
</mappers>
  1. 使用包名引入
<mappers>
   <package name="com.lzq.mapper"/>
</mappers>
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Mybatis是一种Java持久化框架,它可以将Java对象映射到数据库中的表中。Mybatis配置文件主要包括两个部分:mybatis-config.xml和mapper.xml。其中mapper.xml是Mybatis核心配置文件,它定义了SQL语句、映射关系、参数映射等信息,下面详细介绍mapper.xml文件的各个部分。 1、mapper.xml的命名空间 每个mapper.xml文件都应该设置一个命名空间,命名空间用来定义映射的SQL语句和参数映射。命名空间的格式为:mapper namespace="com.xxx.mapper.XxxMapper",其中com.xxx.mapper是mapper接口所在的包名,XxxMapper是mapper接口的类名。 2、映射SQL语句 在mapper.xml中,可以定义各种SQL语句,例如查询、插入、更新和删除等。SQL语句的格式为<select|insert|update|delete>,其中<select>表示查询语句,<insert>表示插入语句,<update>表示更新语句,<delete>表示删除语句。具体的SQL语句可以根据需要自行定义,例如: <select id="selectUserById" parameterType="int" resultType="com.xxx.model.User"> select * from user where id=#{id} </select> 在上面的例子中,id表示SQL语句的唯一标识符,parameterType表示传入参数的类型,resultType表示返回结果的类型。 3、参数映射 在mapper.xml中,可以定义参数映射,将Java对象映射到SQL语句中的参数,例如: <select id="selectUserByName" parameterType="java.lang.String" resultType="com.xxx.model.User"> select * from user where name=#{name} </select> 在上面的例子中,parameterType表示传入参数的类型,#{name}表示将Java对象中的name属性映射到SQL语句中的参数。 4、结果集映射 在mapper.xml中,可以定义结果集映射,将SQL语句返回的结果封装成Java对象,例如: <select id="selectAllUser" resultType="com.xxx.model.User"> select * from user </select> 在上面的例子中,resultType表示返回结果的类型,Mybatis会将SQL语句返回的结果封装成com.xxx.model.User对象。 5、动态SQL语句 在mapper.xml中,可以使用动态SQL语句来构建复杂的SQL语句。动态SQL语句可以根据不同的条件来生成不同的SQL语句,例如: <select id="selectUser" parameterType="com.xxx.model.User" resultType="com.xxx.model.User"> select * from user where 1=1 <if test="id != null"> and id=#{id} </if> <if test="name != null and name != ''"> and name=#{name} </if> </select> 在上面的例子中,<if>标签用来判断条件,根据条件生成不同的SQL语句。 6、其它元素 在mapper.xml中,还可以使用其它元素来完成更多的功能,例如: (1)<resultMap>元素:定义结果集映射关系; (2)<include>元素:引入其它的SQL语句; (3)<where>、<set>等元素:用于构建复杂的SQL语句; (4)<foreach>元素:用于遍历集合或数组等。 总之,mapper.xml文件是Mybatis框架中非常重要的配置文件,它定义了SQL语句、映射关系、参数映射等信息,是Mybatis实现持久化操作的核心

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Modify_QmQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值