MyBatis 学习(二)

一、XML 配置文件

1、XML 映射配置文件的结构

configuration 配置

  properties 属性

  settings 设置

  typeAliases 类型别名

  typeHandlers 类型处理器

  objectFactory 对象工厂

  plugins 插件

  environments 环境

    environment 环境变量

      transactionManager 事务管理器

      dataSource 数据源

  databaseIdProvider 数据库厂商标识

  mappers 映射器

2、properties 属性

  属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。

<!--properties属性-->
    <properties resource="config.properties">
        <property name="username" value="root"/>
        <property name="password" value="admin"/>
    </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>

3、settings 设置

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

一个配置完整的 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"/>

4、typeAliases 类型别名

  类型别名就是给 java 类型取一个短的别名,只与 xml 配置有关,意义是减少类完全限定名的冗余。也就是说可以用一个短的别名来代替一个长的类完全限定名,为了方便。

<!--配置别名-->
<typeAliases>
    <typeAlias alias="Product" type="com.mybatis.pojo.Product"/>
</typeAliases>

  当这样配置时,Product可以用在任何使用com.mybatis.pojo.Product的地方。例如在mapper文件中:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 
 6 <mapper namespace="com.mybatis.mapper.ProductMapper">
 7     <insert id="addProduct" parameterType="Product">
 8       INSERT INTO product (name, price) VALUES (#{name}, #{price})
 9     </insert>
10 </mapper>

  本来 parameterType 后面应该写 com.mybatis.pojo.Product 类完全限定名的,现在可以用 Product 别名代替。

  也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean。

<!--配置别名-->
<typeAliases>
    <package name="com.mybatis.pojo"/>
</typeAliases>

  现在写mapper文件时也可以直接用 Product来代替 com.mybatis.pojo.Product,因为 Mybatis 会自动搜索 com.mybatis.pojo 下的 Product 类

  一些常见的 Java 类型内建的相应的类型别名。它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。

5、typeHandlers 类型处理器

 

6、对象工厂(objectFactory)

  MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现。

 

7、插件(plugins)

 

8、配置环境(environments)

  MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库, 想使用相同的 SQL 映射。许多类似的用例。

不过要记住:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。

所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:

 

    <!--配置别名-->
    <typeAliases>
        <package name="com.mybatis.pojo"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <!--事务管理:JDBC的事务管理机制-->
            <transactionManager type="JDBC"/>
            <!--配置连接池:数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="admin"/>
            </dataSource>
        </environment>
    </environments>

 

9、databaseIdProvider

 

10、映射器(mappers)

  需要告诉 MyBatis 到哪里去找到SQL映射语句。可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。

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

 

posted @ 2023-05-17 22:04  ZT1994  阅读(21)  评论(0编辑  收藏  举报