Mybatis入门学习五: Mybatis-config.xml配置解析

21 篇文章 0 订阅
7 篇文章 0 订阅

Mybatis-config.xml配置解析

官网对应文档地址

声明:https://mybatis.org/mybatis-3/zh/configuration.html。详尽的配置解析,可以参考官方文档。本文只是列举常用的配置,并且加以解释说明。。

关于Mybaits核心配置文件需要掌握的大致如下,可以自行参考官方文档以及https://blog.csdn.net/weixin_41549354/article/details/107739736搭建一个Mybatis02-son自己配置一下,剩下的内容也可以阅读官方文档自行了解。

在这里插入图片描述

属性(properties)

即我们可以将一些值进行外部声明,然后通过类似 ${名称} 的形式引用,常用的配置有environments中的url,数据卡驱动,连接池,用户名,密码等的配置。类似用法为。

先在资源文件夹resources下新建一个db.properties文件,将这些值声明在里面

Driver=com.mysql.jdbc.Driver
URL=jdbc\:mysql\://localhost\:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
userName=root
pwd=123456
  <properties resource="db.properties"></properties>

  <!-- environments中可以配置多套environment,default指定默认的一套 -->
  <environments default="development">
    <environment id="development">
      <!-- 默认为jdbc的事务管理 -->
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="${URL}"/>
        <property name="username" value="#{userName}"/>
        <property name="password" value="${pwd}"/>
      </dataSource>
    </environment>
  </environments>

声明之后,通过properties标签进行引用,注意xml中标签的顺序,放错位置编译器会提示

The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".

当然,properties文件,本来就是进行属性外部声明的一个文件,这个文件的用途不仅仅是用于properties标签的引用,还可以在java代码中通过类似方式进行引用。

环境配置(environments)

在environments中可以有一个default属性,可以指定我们所使用的默认的环境。在实际开发中,我们可能需要连接很多数据库进行,在environments中可以配置多个environment标签,指定多套数据库,**不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。**每个数据库对应一个 SqlSessionFactory 实例

<!-- environments中可以配置多套environment,default指定默认的一套,切换到第二套环境 -->
  <environments default="development01">
    <environment id="development">
      <!-- 默认为jdbc的事务管理 -->
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="${URL}"/>
        <property name="username" value="#{userName}"/>
        <property name="password" value="${pwd}"/>
      </dataSource>
    </environment>
    
        <environment id="development01">
      <!-- 默认为jdbc的事务管理 -->
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="${URL}"/>
        <property name="username" value="#{userName}"/>
        <property name="password" value="${pwd}"/>
      </dataSource>
    </environment>
  </environments>
environment中的常用属性

transactionManager:在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"),默认为JDBC

  • JDBC –我们一般使用JDBC, JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
  • MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。当然可以通过配置,不让它关闭,一般这个用的很少
  • 如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

数据源dataSoucrce:大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]")。数据源即连接数据库的模式,常见数据源有dbcp ,c3p0,druid。UNPOOLED:这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形,但实际应用比较少。POOLED: 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。里面的具体配置可以参考官方文档阅读,这些配置说白了,也就是配置数据库的连接信息,比如url,驱动,用户名,密码等等。Mybatis中默认数据源是POOLED

类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。

我们在mapper.xml中则可以省略他的全限定类名,使用别名,当然在任何用到了com.pojo.User的地方用user替换

<!-- resultType="user" 这个user即为在配置文件中声明的别名 -->
<select id="FindUserListByName" resultType="user" parameterType="String">
  		<!-- 一般模糊查询的通配符可以用concat函数进行拼接 -->
  		select * from mybatis.user where name like concat('%',#{String},'%')
  	
  	</select>

他有三种方式(配置在Mybatis-config.xml中):

第一种:每个类独自声明,适用于实体类比较少的时候,优点是可以随便命名

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

第二种,包扫描,MyBatis 会在包名下面搜索需要的 Java Bean,

  <typeAliases>
  	<package name="com.pojo"/>
  </typeAliases>

第三种,在JavaBean上用注解@Alias(“别名”),这个配置是三个配置中优先级最大的,实用了注解,配置文件中配置不起作用。

@Alias("User")
public class User {
	...
}
设置(settings)

Mybatis中settings有一大堆乱七八糟的,具体的可以参考官方文档中,设置可以改变Mybatis运行时候的行为,总结常用的有:

设置名描述有效值默认值
cacheEnabled全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。true | falsetrue
lazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。true | falsefalse
useGeneratedKeys允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。true | falseFalse
mapUnderscoreToCamelCase是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。即数据库命名规则是下划线,而java规范是驼峰命名法,比如:stu_name自动映射为java中stuNametrue | falseFalse
logImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找。SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING未设置
映射器(mappers)

即将我们写了sql的mapper文件在Mybatis-config.xml中声明为映射器。在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。

第一种配置方法:

<!-- 使用相对于类路径的资源引用   推荐-->
<mappers>
  <!-- 注意路径资源是 / 分割,而全限定名是  .   --> 
  	<mapper resource="com/dao/mapper/UserMapper.xml"/>
</mappers>
<!-- 使用完全限定资源定位符(URL,不建议,没什么用 -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 注意!!!接口和它的mapper配置文件必须要同一个包下,切必须同名 -->
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>
<!-- 注意!!!接口和它的mapper配置文件必须要同一个包下,切必须同名 -->
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值