Mybatis系列(三)Mybatis-全局配置文件

Mybatis系列(三)Mybatis-全局配置文件


一、Mybatis配置

官方文档

配置文档顶层目录:
配置文档顶层目录

1.1、properties(属性)

作用:可以导入外部配置文件,resource表示导入类路径下的配置文件,url表示导入磁盘路径或者服务路径下的文件。可以在 properties 元素的子元素property中设置属性,但是相对来说优先级最低,连接数据库正确的username和password都是root,如下:

<properties resource="jdbc.properties">
        <property name="username" value="root"/>
        <property name="password" value="root123"/>
</properties>

优先级比直接在property中配置的属性高一级的是在外部配置文件中的配置,它会覆盖在property中配置的同名的属性,如下:

#username=root
#password=root
url=jdbc:mysql://localhost:3306/mybatis
driver=com.mysql.jdbc.Driver

优先级最高的是直接在构建SqlSessionFactory中指定的property属性,如下:

@Before
    public void SqlSessionFactory() throws Exception {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        Properties properties = new Properties();
        properties.setProperty("password" , "root");
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream , properties);
    }

因此如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:

  • 首先读取在 properties 元素体内指定的属性。
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
    因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。

1.2、settings(设置)

官方文档
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
settings设置
一个配置完整的 settings 元素的示例如下:

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
  1. 测试mapUnderscoreToCamelCase设置
    是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。
    数据库的字段login_account
    表结构
    javaBean:
	private Integer id;
    private String empName;
    private String email;
    private Integer gender;
    private String loginAccount;

mybatis的setting配置:

<settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

测试代码

@Test
    public void testMybatisSelect(){
        //获取与数据库的一次会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            EmployeeDao employeeDao = sqlSession.getMapper(EmployeeDao.class);
            Employee employee = employeeDao.getEmployeeByID(1);
            System.out.println("查询到的员工为:" + employee);
        }finally {
            sqlSession.close();
        }
    }

测试结果:

查询到的员工为:Employee{id=1, empName='wangwu', email='wangwu@163.com', gender=1, loginAccount='111111'}

1.3、typeAliases(类型别名)

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

<typeAliases>
  <typeAlias alias="Author" type="domain.blog.Author"/>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
  <typeAlias alias="Comment" type="domain.blog.Comment"/>
  <typeAlias alias="Post" type="domain.blog.Post"/>
  <typeAlias alias="Section" type="domain.blog.Section"/>
  <typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

当这样配置时,Blog 可以用在任何使用 domain.blog.Blog 的地方。
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:

<typeAliases>
  <package name="domain.blog"/>
</typeAliases>

每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。见下面的例子:

@Alias("author")
public class Author {
    ...
}

下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
默认别名

1.4、mappers(映射器)

要找到接口对应的sql语句,我们必须要告诉mybatis去哪个地方找这个xml,因此mybatis提供了三种方式,如下:

  1. 使用相对于类路径的资源引用
<mapper resource="mapper/EmployeeDao.xml"/>
  1. 使用完全限定资源定位符(URL)
//这种方式下xml文件与接口必须在同一个包并且需要同名
<mapper class="com.cetc.dao.EmployeeDao"/>
  1. 使用映射器接口实现类的完全限定类名
//磁盘路径或者网络路径
<mapper url="file:///D://EmployeeDao.xml"/>
  1. 将包内的映射器接口实现全部注册为映射器
    此种方式可以进行批量注册,但是首先得保证接口与xml得在同一个路径下并且需要同名,只是后缀不同,但是放在同一个路径下可能造成视觉混乱,因此我们可以在资源包config下创建与dao同名的包,然后将xml放到下面,这样项目在发布时会与接口放在同一个路径下。
<mappers>
   <package name="com.cetc.dao"/>
</mappers>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值