mybatis核心配置文件mybatis-config

本文详细介绍了mybatis的核心配置文件mybatis-config.xml,包括properties属性、settings设置、typeAliases别名处理、typeHandlers类型处理器、environment环境配置和mappers映射器等关键内容。配置文件中的标签顺序有特定要求,例如properties允许外部.properties文件动态替换属性值,settings涵盖多种行为设置,typeAliases简化类引用,typeHandlers负责类型转换,environment配置多环境支持,而mappers则用于注册Mapper映射文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为mybatis的第二章节讲解,本章节主要讲mybatis的配置文件,mybatis-config.xml。作为mybatis的核心配置文件,它影响mybatis行为甚深的设置(setting)和属性(properties),本章节主要包括:

1.properties属性

2.settings设置

3.typeAliases 别名处理

4.typeHandlers 类型处理器

5.environment 环境配置

6.mappers 映射器

7.其中plugins(插件机制)和databaseIdProvider(数据库厂商标识),不做讲解,感兴趣的同学可自行查找资料

在正式讲解之前,要事先说明,mybatis-config.xml文件中的标签是有顺序要求的

<configuration>
    <properties></properties>
    <settings></settings>
    <typeAliases></typeAliases>
    <typeHandlers></typeHandlers>
    <objectFactory></objectFactory>
    <plugins></plugins>
    <environments>
        <environment></environment>
        <transactionManager></transactionManager>
        <dataSource></dataSource>
    </environments>
    <databaseIdProvider></databaseIdProvider>
    <mappers></mappers>
</configuration>

1.Properties属性

mybatis-config.xml中一些属性的值,可由外部文件(.properties 结尾)进行动态的替换,属性的值在resources文件夹下db.properties文件中设置

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
mysql.username=root
mysql.password=1234
<!--引入外部的属性文件-->
<properties resource="db.properties"/>
<dataSource type="POOLED">
    <property name="driver" value="${mysql.driver}" />
    <!--使用mysql server 超过6版本的同学 加上 serverTimezone=UTC,否则会报告关于时区错误的问题-->
    <property name="url" value="${mysql.url}" />
    <property name="username" value="${mysql.username}" />
    <property name="password" value="${mysql.password}" />
</dataSource>

执行测试用例,可以正常返回结果

2.settings设置

涉及到的settings属性设置有很多,这里不一一进行测试演示,日后用到可慢慢体会

<settings>
    <!--1.开启缓存-->
    <setting name="cacheEnabled" value="true"/>
    <!--2.开启懒加载,也叫做延迟加载-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!--3.是否允许单一语句返回多结果集,需要驱动支持-->
    <setting name="multipleResultSetsEnabled" value="true"/>
    <!--4.使用列标签代替列名-->
    <setting name="useColumnLabel" value="true"/>
    <!--5.允许JDBC支持自动生成组件,需要驱动支持-->
    <setting name="useGeneratedKeys" value="false"/>
    <!--6.指定Mybatis应如何自动映射列到字段或属性,NONE表示取消自动映射,PARTIAL只会自动映射没有定义嵌套结果集的结果集,
        FULL会自动映射任务复杂的结果集(无论是否嵌套)-->
    <setting name="autoMappingBehavior" value="PARTIAL"/>
    <!--7.当自动映射目标的未知列(或未知属性时)NONE 什么也不做,WARNING 输出警告日志,FAILING 抛出SqlSessionException -->
    <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
    <!--8.配置默认的执行器,SIMPLE就是普通的执行器,REUSE执行器会重用预处理语句(prepared statements),BATCH 执行器将重用语句并执行批量更新-->
    <setting name="defaultExecutorType" value="SIMPLE"/>
    <!--9.设置超时时间,他决定驱动等待数据库相应的秒数-->
    <setting name="defaultStatementTimeout" value="25"/>
    <!--10.为驱动程序设置一个提示,以控制返回结果的获取大小,此参数值可以由查询设置覆盖-->
    <setting name="defaultFetchSize" value="100"/>
    <!--11.允许在嵌套语句中使用分页-->
    <setting name="safeRowBoundsEnabled" value="false"/>
    <!--12.是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名A_COLUMN到经典Java属性名aColumn的类似映射-->
    <setting name="mapUnderscoreToCamelCase" value="false"/>
    <!--13.MyBatis利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询,默认值为SESSION,
        这种情况下,会缓存一个会话中执行的所有查询,若设置值为STATEMENT,本地会话仅用在语句执行上,对相同SqlSession的不同调用将不会共享数据-->
    <setting name="localCacheScope" value="SESSION"/>
    <!--14.当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,某些驱动需要指定列的JDBC类型,
        多数情况直接用一般类型即可,比如NULL,VARCHAR,OTHER -->
    <setting name="jdbcTypeForNull" value="OTHER"/>
    <!--15.指定哪个对象的方法触发一次延迟加载-->
    <setting name="lazyLoadTriggerMethods"
             value="equals,clone,hashCode,toString"/>
</settings>

3.typeAliases 别名处理

类型别名是为JavaBean设置一个短的名字,可以方便我们引用某个类

<typeAliases>
    <!--单个别名处理-->
    <typeAlias type="com.together.www.bean.Employee" alias="emp"/>
    <!--批量处理,别名默认为类名首字母小写-->
    <package name="com.together.www.bean"/>
</typeAliases>

4.typeHandlers 类型处理器

无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型,Mybatis中提供了丰富的类型处理器:

类型处理器Java 类型JDBC 类型
BooleanTypeHandlerjava.lang.Boolean, boolean数据库兼容的 BOOLEAN
ByteTypeHandlerjava.lang.Byte, byte数据库兼容的 NUMERIC 或 BYTE
ShortTypeHandlerjava.lang.Short, short数据库兼容的 NUMERIC 或 SHORT INTEGER
IntegerTypeHandlerjava.lang.Integer, int数据库兼容的 NUMERIC 或 INTEGER
LongTypeHandlerjava.lang.Long, long数据库兼容的 NUMERIC 或 LONG INTEGER
FloatTypeHandlerjava.lang.Float, float数据库兼容的 NUMERIC 或 FLOAT
DoubleTypeHandlerjava.lang.Double, double数据库兼容的 NUMERIC 或 DOUBLE
BigDecimalTypeHandlerjava.math.BigDecimal数据库兼容的 NUMERIC 或 DECIMAL
等等…等等…等等…

但在3.4版本以后,类型处理器实现了自动注册,无需手动进行注册

5.environment环境配置

MyBatis可以配置多种环境,比如开发、测试和生产环境需要有不同的配置,每种环境使用一个environment标签进行配置并指定唯一标识符,可以通过environments标签中的default属性指定一个环境的标识符来快速的切换环境,environment指具体环境,id指定当前环境的唯一标识,我这指定看上去指定了mysql和oracle两个数据源,实际上都是指向mysql,因为我只安装了mysql

<environments default="oracle">
    <environment id="mysql">
        <transactionManager type="JDBC" />
        <dataSource type="POOLED">
            <property name="driver" value="${mysql.driver}" />
            <!--使用mysql server 超过6版本的同学 加上 serverTimezone=UTC,否则会报告关于时区错误的问题-->
            <property name="url" value="${mysql.url}" />
            <property name="username" value="${mysql.username}" />
            <property name="password" value="${mysql.password}" />
        </dataSource>
    </environment>

    <environment id="oracle">
        <transactionManager type="JDBC" />
        <dataSource type="POOLED">
            <property name="driver" value="${oracle.driver}" />
            <!--使用mysql server 超过6版本的同学 加上 serverTimezone=UTC,否则会报告关于时区错误的问题-->
            <property name="url" value="${oracle.url}" />
            <property name="username" value="${oracle.username}" />
            <property name="password" value="${oracle.password}" />
        </dataSource>
    </environment>
</environments>

6.mappers 映射器

用来在mybatis初始化的时候,告诉mybatis需要引入哪些Mapper映射文件, mapper逐个注册SQL映射文件

resource : 引入类路径下的文件

url : 引入网络路径或者是磁盘路径下的文件

class : 引入Mapper接口,有SQL映射文件 , 要求Mapper接口与 SQL映射文件同名同位置, 没有SQL映射文件 , 使用注解在接口的方法上写SQL语句.

我就是采用直接在接口方法上写sql语句,并没有写SQL映射文件。

<mappers>
    <mapper class="com.together.www.mapper.EmployeeMapper" />
    <mapper resource="EmployeeMapper.xml" />
    <!--使用批量注册,这种方式要求SQL映射文件名必须和接口名相同并且在同一目录下-->
	<package name="com.together.www.mapper"/>
</mappers>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值