MyBatis配置

MyBatis配置项的顺序是不能颠倒的,如果颠倒了它们的顺序,那么在MyBatis启动阶段就会发生异常。

properties属性

properties属性可以给系统配置一些运行参数,可以放在XML文件或者properties文件中,而不是放在Java编码中,这样的好处在于方便参数修改,而不会引起代码的重新编译。

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 name="database.url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="database.username" value="root"/>
        <property name="database.password" value="root"/>
    </properties>
    <!-- 数据库环境 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <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>
</configuration>    

使用properties文件

创建一个jdbc.properties文件

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

在mybatis-config.xml中通过如下方式引入

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

也是按照${dabase.username}的方式引入properties文件的属性参数

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

在真实的生产环境中,数据库的用户密码都是保密的。一般需要运维人员把用户和密码经过加密成为密文后,配置到properties文件中。所以我们在创建SqlSessionFactory前,就需要把用户名和密码解密,然后再把解密后的字符串充值到properties属性中

String resource = "mybatis-config.xml";
InputStream inputStream;
InputStream in = Resources.getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(in);
String username = properties.getProperty("database.username");
String password = properties.getProperty("database.password");
// 解密用户和密码,并在属性中重置
properties.put("database.username", CodeUtils.decode(username));
properties.put("database.password", CodeUtils.decode(password));
inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, properties);

小结

这里介绍了MyBatis三种使用properties的方式。这三种方式是有优先级的,最优先的是使用程序传递的方式,其次是使用properties文件的方式,最后是使用property子元素的方式,MyBatis会根据优先级来覆盖原先配置的属性值。

Settings

settings是MyBatis中最复杂的配置,它能深刻影响MyBatis底层的运行,但是在大部分情况下使用默认值就好了。
这里就只列举出几个常用的配置项说明

配置项作用配置选项说明默认值
cacheEnable该配置影响所有映射器中配置缓存的全局开关true、falsetrue
useGeneratedKeys允许JDBC支持自动生成主键,需要驱动兼容。如果设置为true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可以正常工作(比如Derby)true、falsefalse
autoMappingBehavior指定MyBatis应如何自动映射列到字段或属性。NONE表示取消自动映射;PARTIAL表示只会自动映射,没有定义嵌套结果集和映射结果集;FULL会自动映射任意复杂的结果集NONE、PARTIAL、FULLPARTIAL
mapUnderscoreToCamelCase是否开启自动驼峰命名规则映射,即从数据库列名A_COLUMN到Java属性名aColumn的类似映射true、falsefalse

typeAliases别名

由于类的全限定名很长,需要大量使用的时候不方便。在MyBatis中允许定义一个简写来代表这个类,这就是别名,别名分为系统定义别名和自定义别名。
注意: MyBatis中别名不区分大小写

系统别名

我们之前在configuration中配置的一些属性,里面就使用到了别名 。
别名的注册一般是通过Configuration获取TypeAliasRegistry类对象,其中有一个getTypeAliasRegistry方法可以获得别名,如configuration.getTypeAliasRegisry()。 然后就可以通过registerAlias方法对别名注册了

// 事务方式别名
typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);

自定义别名

<typeAliases><!-- 别名 -->
    <typeAlias alias="role" type="com.whyalwaysmea.pojo.Role" />
</typeAliases>

这样就定义了一个别名。
如果有很多类需要定义别名,那么可以扫描包

<typeAliases><!-- 别名 -->
    <package name="com.whyalwaysmea.pojo"/>
</typeAliases>

这样MyBatis将扫描这个包里面的类,将其第一个字母变成小写作为其别名。
比如类com.whyalwaysmea.pojo.Role的别名是role,com.whyalwaysmea.pojo.User的别名是user。

使用这个的规则,有时候会出现重复,比如有com.whyalwaysmea.pojo2.User这个类,同时也设置了com.whyalwaysmea.pojo2的包扫描,那么就会出现异常。这个时候可以使用MyBatis提供的注解@Alias(“name”)进行区分

package com.whyalwaysmea.pojo2;
@Alias("user2")
public class User {}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值