mybatis config

Posted 陈修行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis config相关的知识,希望对你有一定的参考价值。

mybatis 配置相关

1、结构目录以及mybatis-config.xml的标签属性

  • configuration(配置)
    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境配置)
      • environment(环境变量)
        • transactionManager(事务管理器)
        • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器)

数据来源于mybatis官方文档 https://mybatis.org/mybatis-3/zh/configuration.html

img

2、属性(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>
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username=root
password=root

只需要在在mybatis-config.xml中添加properties标签即可

<properties resource="database.properties"/>

由于DTD约束了XML的文档结构,所以标签应该放在首位

同时也可以在properties标签的子元素中设置

<properties resource="org/mybatis/example/config.properties">
  <property name="username" value="dev_user"/>
  <property name="password" value="F2Fa3!33TYyg"/>
</properties>

二者并存时以外部引用为准,本文不在做过多赘述

3、environments(环境配置)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中,不过尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

<environments default="development">
    
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${rul}"/>
                <property name="username" value="${password}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
        
        <environment id="test">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
            
        </environment>
    </environments>

environments的default属性指定了默认的配镜环境。同时也可以在创建SqlSessionFactory时指定使用哪一套

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);

如果不声明,则使用的为默认default的环境配置

事务管理器(transactionManager)

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

  • JDBC:配置直接使用了 JDBC 的提交和回滚设施

  • MANAGED:这个配置几乎没做什么,而是让容器来管理事务的整个生命周期

且在以后的Spring+mybatis中Spring模块会使用自带的管理器来覆盖前面的配置。所以二者了解即可

数据源(dataSource)

有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]")

  • UNPOOLED 无池
  • POOLED 有池
  • JNDI EJB服务器使用,了解即可

3、映射器(mappers)

mapper映射器的作用是告诉MyBatis到哪里去找到这些语句

有四种方法:

  • 使用相对于类路径的资源引用
<mappers>
        <mapper resource="dao/UserMapper.xml"/>
</mappers>
  • 使用完全限定资源定位符(URL) 不推荐使用!
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
  • 使用映射器接口实现类的完全限定类名
<mappers>
    <mapper class="dao.UserMapper"/>
</mappers>
  • 将包内的映射器接口实现全部注册为映射器
<mappers>
  <package name="dao"/>
</mappers>

如果使用package或者class两种,需要接口与对应的xml文件同名同包。否则mybatis找不到对应关系

4、类型别名(typeAliases)

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

  • 自定义 typeAlias
<typeAliases>
        <typeAlias type="entity.User" alias="user"/>
</typeAliases>

这样在所有xml中如果有要使用全限定名(entity.User)的地方都可以替换为别名(user)

  • 包扫描 package
<typeAliases>
        <package name="entity"/>
</typeAliases>

使用package时,mybatis会扫描声明的包下所有类,并设置类的首字母小写为默认别名

如果想要更改默认的别名,需要在实体类加注解

@Alias("u")
public class User {
    private int id;
    private String name;
    private String pwd;
}

这样就可以覆盖调默认被设置为user的别名为u

好了,现在我们再也不用写很长的实体类全限定名了,可以用已经配置好的alias代替,这在实体类很多的项目中时十分有用的

mybatis也为我们提供了许多默认的别名

总的来说:

  • 基本数据类型别名为前面加下划线"_" 例如: int         _int

  • 基本类型包装类为原数据类型首字母小写 例如: Double       double

  • 其他JDK自带的工具类等同为首字母小写 例如:Map       map

5、设置Setting

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

  • cacheEnabled 是否开启缓存,以后会提到。
  • lazyLoadingEnabled 是否开启懒加载
  • logImpl 日志的具体实现
  • mapUnderscoreToCamelCase 是否开启驼峰命名自动映射,即从经典数据库列名 user_name 映射到经典 Java 属性名 userName。
    其余暂时不作为了解的内容

6、其他配置

类型处理器(typeHandlers)

类型处理器是用来平衡java中和mysql中数据类型不统一的问题的,暂不作为重点了解即可。

objectFactory(对象工厂)和plugins(插件)

暂时不需要作为了解的内容,本文略

7、总结

mybatis-config.xml文件作为mybatis的核心配置,要掌握的大概就这么多,其余一些缓存、日志相关会在以后的进度中相继添加。目前要掌握的不是特别多。实践最重要!

以上是关于mybatis config的主要内容,如果未能解决你的问题,请参考以下文章

[linux][c/c++]代码片段02

编写javaweb用到的基本依赖,mybatis-config.xml代码,SqlSessionFactoryUtils.java

mybatis学习(39):动态sql片段

springBoot+Mybatis模板代码

Mybaties的代码生成器

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper