MyBatis配置之properties属性详解

之前写了一篇《如何搭建MyBatis开发环境》,通过一个简单的实例讲解了关于搭建MyBatis的开发环境,这篇将详细讲解MyBatis的配置。

MyBatis配置文件的层次结构

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

这是全部MyBatis的配置元素,看起来简单,但是层次顺序一定不能够颠倒。有些配置元素可以被省略不写,但是不影响层次顺序,后续的元素依次补上即可。

properties元素

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

MyBatis提供3种配置文件方式。

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

property子元素

配置方法

<properties>
  <property name="driver" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  <property name="username" value="root"/>
  <property name="password" value="123456"/>
</properties>

这样我们就可以在上下文使用已经配置好的属性值了。我们配置数据库时就可以按照如下代码进行配置。

<dataSource type="POOLED">
  <property name="driver" value="${driver}"/>
  <property name="url" value="${url}"/>
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
</dataSource>

其中${name}中的name值一定要与properties中的property子元素name属性的值相同。

properties配置文件

在实际项目中,更多的时候,是使用properties配置文件来配置属性值,这样可以方便开发者在多个配置文件中重复使用它们,也方便日后维护和随时修改。

<properties resource="jdbc.properties"/>

这样就引入了一个名为jdbc的properties文件。jdbc.properties代码如下

#数据库配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=123456

注意:在jdbc.properties不能出现空格

程序参数传递

在实际工作中,数据库用户和密码是不允许以明文的形式存储在配置文件中的,而加密过后的数据库信息无法通过加密的字符串去连接数据库。这时就可以通过编码的形式去满足此场景。

假设在jdbc.properties文件中的username和password两个属性使用了加密的字符串,这个时候需要在生成SqlSessionFactory之前将它转化为明文,而系统已经提供了解密的方法decode(str)。

InputStream cfgStream = null;
Reader cfgReader = null;
InputStream proStream = null;
Reaader proReader = null;
Properties properties = null;
try {
  // 读入配置文件流
  cfgStream = Resource.getResourceAsStream("mybatis-config.xml");
  cfgReader = new InputStreamReader(cfgStream);
  // 读入属性文件
  proStream = Resource.getResourceAsStream("jdbc.properties");
  proReader = new InputStreamReader(proStream);
  properties = new Properties();
  properties.load(proReader);
  // 解密为明文
  properties.setProperty("username",decode(properties.getProperty("username")));
  properties.setProperty("password",decode(properties.getProperty("password")));
} catch(IOException ex) {
 Logger.getLogger(SqlSessionFactoryUtil.class.getName()).log(Level.SEVERE,null,ex)
}

synchronized(CLASS_LOCK) {
  if(sqlSessionFactory == null) {
    // 使用属性来创建SqlSessionFactory
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(cfgReader,properties);
  }
}

使用总结

以上三种配置方式在MyBatis配置中可以同时出现,并且属性也会重复配置。所以三种方式是存在优先级的。

通过方法参数传递的属性具有最高优先级,resource/url属性中指定的配置文件次之,最低优先级的是properties属性中指定的属性。

在实际操作中,需要注意以下三点:

1、不要使用混合的方式,这样会使得管理混乱。

2、首选的方式是使用properties文件。

3、如果需要对其进行加密或其他加工以满足需求,不妨按示例的方法处理。这样做的好处是使得配置都来自于同一个配置文件,就不容易产生没有必要的歧义,也为日后统一管理提供了方便。

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/mybatis-properties-cfg.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
上一篇 2022年4月6日
下一篇 2022年4月20日

相关推荐

  • 前端遍历树形数据,返回满足条件的树形数据

    在一次做手机端小程序项目中,有一个机构表单项,需要在页面展示是树形层级结构,但是后端开发人员返回的数据却是一维数组,而且还要在前端做过滤筛选功能。但是在使用的手机端组件库中,却没有…

    2022年11月8日
    563
  • Webpack入门,自定义loader

    有时开发者会遇到现有loader无法很好满足需求的情况,这时就需要对其进行修改,或者编写新的loader。 下面以一个简单的示例,讲解以下如何实现一个loader。 需求 实现一个…

    2022年11月23日
    888
  • Java自学之数组

    在Java中数组是一组相关变量的集合,属于引用数据类型。 定义 数组引用传递分析 数组属于引用数据类型,在数组使用时需要通过关键字new开辟堆内存空间,一块堆内存空间也可以同时被多…

    2020年11月26日
    1.4K
  • spring boot练习篇之用户登录系统【接入数据库】

    抛弃JSP,只做纯粹的前后端分离项目。 写在前面 学习基础知识是枯燥无味的,之所以会这样,多数是因为心不静,对于如何运用它,感到茫然。所以建议大家在学习Java基础知识的时候,一定…

    2021年5月28日
    1.4K
  • Webpack入门,模块打包之加载其他类型的模块

    在实际开发中,开发者可能遇到其他类型的模块,比如AMD、UMD模块,虽然这些模块在目前的使用场景已经不多,但是遇到这些模块时仍然需要知道如何处理。 加载非模块化的文件 非模块化文件…

    2022年11月14日
    752
  • Webpack入门,样式预处理

    样式预处理指的是开发者在开发过程中经常会使用一些样式预编译语言,如SCSS、Less等,在项目打包过程中再将这些预编译语言转换成CSS。借助这些语言强大和便捷的特性,可以降低项目的…

    2022年11月25日
    840
  • 初识Spring Boot

    什么是Spring Boot Spring Boot是由Pivotal Software公司于2013年研发的全新Java开发框架。其设计目的是用来简化新Spring应用的初始搭建…

    2024年6月16日
    626
  • js数组去重(区分object、“NaN”、NaN)

    数组去重在前端面试中比较常见,今天来复习复习。 对这样一个数组进行去重,我尝试了几种方法,大多数不能对对象去重,或者不能区分true和”true”、NaN和…

    2021年2月23日
    1.4K
  • Java自学之继承

    在面向对象的设计过程中,类是基本的逻辑单位。但是对于这些基本的逻辑单位需要考虑到重用的设计问题,所以在面向对象的设计里提供有继承,并利用这一特点实现类的可重用性定义。 类继承定义 …

    2020年12月3日
    1.5K
  • Spring Tools学习之JAVA开发环境搭建【windows 10】

    一直以来都想学习JAVA,但是苦于找不到门路,网上学习资料要不看不懂,要不需要金钱。 终于,迫于生活与年龄的压力,下定决心,学习JAVA。 写下此文档,记录一下自己学习JAVA之路…

    2018年12月6日
    3.1K