Mybatis基础学习之MyBatis配置文件和properties元素

MyBatis基础学习

MyBatis配置文件

MyBatis的配置文件并不复杂,它所有的元素如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--配置-->
    <properties></properties><!--属性-->
    <settings></settings><!--设置-->
    <typeAliases></typeAliases><!--类型命名-->
    <typeHandlers></typeHandlers><!--类型处理器-->
    <objectFactory type=""></objectFactory><!--对象工厂-->
    <plugins></plugins><!--插件-->
    <environments default=""><!--配置环境-->
        <environment id=""><!--环境变量-->
            <transactionManager type=""></transactionManager><!--事务管理器-->
            <dataSource type=""></dataSource><!--数据源-->
        </environment>
    </environments>
    <databaseIdProvider type=""></databaseIdProvider><!--数据库厂商标识-->
    <mappers></mappers><!--映射器-->
</configuration>

值的注意的是,MyBatis配置项的顺序不能够颠倒。如果颠倒顺序,会在mybatis启动阶段就发生异常,导致程序无法运行。

properties属性

properties属性可以给系统配置一些运行参数,可以放在XML文件或者properties文件当中,而不是java编码中,这样的好处在于方便参数修改,而不会引起代码的重新编译。一般而言,mybatis提供了3种方法让我们使用properties,它们是:

  • propertiy子元素
  • property文件
  • 程序代码传递
    下面展开讨论。

propertiy子元素

以上面的xml代码为基础,使用property子元素将数据库连接的相关配置进行改写。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<properties>
		<property name="database.driver" value="com.mysql.jdbc.Driver"></property>
		<property name="database.url" value="jdbc:mysql://localhost:3306/my_db003"></property>
		<property name="database.username" value="root"></property>
		<property name="database.password" value="1234"></property>
	</properties>
	<!-- 配置数据库连接环境:driver、url、username、password -->
	<environments default="mysql">
		<!-- 开始配置mysql -->
		<environment id="mysql">
			<!--配置事务  -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 配置数据源 -->
			<dataSource type="POOLED">
				<property name="driver" value="${database.driver}"/>
				<property name="url" value="${database.url}"/>
				<property name="username" value="${database.username}"/>
				<property name="password" value="${database.password}"/>
			</dataSource>
		</environment>
	</environments>

	<!-- 关联局部配置文件 -->
	<mappers>
		<mapper resource="cn/java/mapper/UserMapper.xml"/>
	</mappers>
</configuration>

这里使用了元素下的子元素定义,用字符串database.username定义数据库用户名,然后就可以在数据库定义中引入这个已经定义好的属性参数,如${database.username},这样定义一次就可以到处引用了。但是如果属性参数有成百上千个,这样的方法明显不是一个很好的选择,这时就可以使用properties文件了。

使用properties文件

使用properties文件是比较普遍的方法,一个方面这个文件十分简单,其逻辑就是键值对应,我们可以配置多个键值放置在一个properties文件当中,也可以把多个键值放到多个properties文件当中,这些都是允许的,它方便日后维护和修改。

我们按照第二个代码,创建一个jdbc.properties文件放到classpath的路径下

database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/my_db003
database.username=root
database.password=1234

在mybatis中通过的属性resource来引用properties文件。

<properties resource="jdbc.properties"></properties>

也按${database.usename}的方法来引入properties文件的属性参数到mybatis的配置文件当中。

使用程序传递方法传递参数

在真实的生产环境中,数据库的用户密码是对开发人员和其他人员保密的。运维人员为了保密,一般都需要把用户和密码经过加密成为密文后,配置到properties文件当中。对于开发人员及其他人员而言,就不知道其真实的用户名和密码了,数据库也不可能使用已经加密的字符串去连接,而需要解密。
现在假设系统已经为提供了这样一个CodeUtils.decode(str)进行解密,那么我们在创建SqlSessionFactory前,就需要把用户名和密码解密,然后把解密后的字符串重置到properties属性当中,如代码:

    String resource="mybatis.xml";
        InputStream inputStream;
        InputStream in=Resources.getResourceAsStream("jdbc.properties");
        Properties props=new Properties();
        props.load(in);
        String username=props.getProperty("database.username");
        String password=props.getProperty("database.password");
        //解密用户和密码,并在属性中重置
        props.put("database.username",CodeUtils.decode(username));
        props.put("database.password",CodeUtils.decode(password));
        inputStream=Resources.getResourceAsStream(resource);
        //使用程序传递的方式覆盖原来的properties属性参数
        SqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream,props);

propertise优先级

  1. 程序传递方法
  2. 使用properties文件
  3. propertiy子元素
    建议使用properties文件的方式,如果需要加密的场景,则可以考虑程序传递方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值