Mybatis—配置解析、别名优化、映射器解析

2021-06-21 17:44:33 浏览数 (1)

  • 属性优化
  • 别名优化
  • 映射器说明

1.核心配置文件说明(mybatis-config.xml)

先看一下我的核心配置文件的总体大概:

代码语言:javascript复制
<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/xiong/dao/UserMapper.xml"/>
    </mappers>
</configuration>

configuration(配置):

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

1.1 环境变量(environments)

Mybatis可以适用于多种环境配置,其中选择default就行。

  1. transactionManager(事务管理器)-- JDBC / MANAGED (我们一般选择JDBC)
  2. dataSource(数据源)-- UNPOOLED / POOLED / JNDI (在这里我们也选择POOLED) 需要注意的地方: 1.也许Mybatis可以配置很多的环境,但是每个SqlSessionFactory 只会选择一个环境去执行 2.学会使用对个环境…在下面添加就行 3.Mybatis 默认的事务管理器就是 JDBC , 连接池 : POOLED
代码语言:javascript复制
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${pwd}"/>
            </dataSource>
        </environment>
    </environments>

1.2 属性(properties)

通过设置db.properties去引用该配置文件吗,可通过 properties 元素的子元素来传递。 之前的配置:

代码语言:javascript复制
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>

如何编写一个db.properties呢? 通过 properties 元素的子元素来传递(db.properties)

代码语言:javascript复制
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
user = root
password = 123456

注意:千万不要忘记在配置文件中引入properties。 以下是更改后的配置文件

代码语言:javascript复制
    <properties resource="db.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

关于这个优先级的问题:(如果属性在配置文件中也进行了配置,不止在db.properties中进行配置)

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

2.别名

2.1 类型别名(typeAliases)

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

代码语言:javascript复制
<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,比如:

代码语言:javascript复制
<typeAliases>
  <package name="domain.blog"/>
</typeAliases>

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

代码语言:javascript复制
@Alias("author")
public class Author {
    ...
}

2.2 设置(settings)

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 具体配置参数查看 Mybatis 中文官方文档:https://mybatis.org/mybatis-3/zh/configuration.html#settings 以下展示部分参数(不需要全部记住,用的时候查就行)

3.映射器设置

3.1 Mappers映射

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 方法一(推荐使用)-- 使用相对于类路径的资源引用

代码语言:javascript复制
<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

方法二(不推荐) – 使用完全限定资源定位符(URL)

代码语言:javascript复制
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

方法三 – 使用映射器接口实现类的完全限定类名

代码语言:javascript复制
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

注意:

  • 接口和他的 Mapper 配置文件必须同名
  • 接口和他的 Mapper 配置文件必须在同一个包下

方法四 – 将包内的映射器接口实现全部注册为映射器

代码语言:javascript复制
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

0 人点赞