码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis学习(三、配置解析)

时间:2021-03-02 12:38:22      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:请求   实现   unp   tis   driver   common   std   eid   处理   

三、配置解析

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

1.环境配置(environments)

  1. MyBatis 可以配置成适应多种环境

  2. 每个数据库对应一个 SqlSessionFactory 实例

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

    • JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。

    • MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。例如:

      <transactionManager type="MANAGED">
        <property name="closeConnection" value="false"/>
      </transactionManager>
      

      如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

  4. 数据源(dataSource)

    dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

  • 许多 MyBatis 的应用程序会按示例中的例子来配置数据源。虽然这是可选的,但为了使用延迟加载,数据源是必须配置的。

    有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”)(具体见mybatis官方文档)

mybatis默认的事务管理器是JDBC,默认的数据源是POOLED

2.属性(properties)

我们可以通过properties属性来实现引用配置文件。

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

编写一个属性配置文件 db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&userUnicode=true&characterEncoding=UTF-8
username=root
password=mysqladmin

注意:在mybatis-config.xml配置文件中的标签顺序是固定的!

mybatis-config.xml 引入了外部配置文件,在数据源中直接进行引用

<configuration>
    <!--引入外部配置文件-->
    <properties resource="db.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="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--每一个Mapper.xml都需要在mybatis核心配置文件中注册-->
    <mappers>
        <mapper resource="com/lzt/dao/UserMapper.xml"/>
    </mappers>

</configuration>
  • 可以直接引入外部文件

  • 在其中增加一些属性配置

    <properties resource="db.properties">
        <property name="password" value="mysqladmin"/>
    </properties>
    
  • 如果两个文件有同一字段,优先使用外部配置文件的

4.类型别名(typeAliases)

  • 类型别名是为 Java 类型设置一个短的名字。

  • 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。

1.例如:

<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 的地方。

<!--可以给实体类起别名-->
<typeAliases>
    <typeAlias type="com.lzt.pojo.User" alias="User"/>
</typeAliases>
<!--select查询语句-->
<select id="getUserList" resultType="User"><!--原来是com.lzt.pojo.User-->
    select * from mybatis.user
</select>

2. 也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:

<typeAliases>
  <package name="com.lzt.pojo"/>
</typeAliases>
<!--select查询语句-->
<select id="getUserList" resultType="user"><!--原来是com.lzt.pojo.User-->
    select * from mybatis.user
</select>

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

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

总结:如果实体类比较少使用第一种方式;如果实体类十分多,建议使用第二种方式!

5.设置

具体看文档

设置名 描述 有效值 默认值
cacheEnabled 全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存。 true | false true
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 true | false false
mapUnderscoreToCamelCase 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 true | false False
logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 未设置

6.其他配置

  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)[可以在maven仓库中寻找]
    • MyBatis Generator Core
    • MyBatis-plus
    • 通用mapper

7.映射器(mappers)

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。 但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。

MapperRegistry

  • 方式一:通过配置文件路径进行绑定(常用)
<!-- 使用相对于类路径的资源引用 -->
<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>
  • 方式三:使用class文件进行绑定
    • 注意点:
      1. 接口和他的Mapper配置文件必须同名
      2. 接口和配置文件必须在同一个包下
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
  • 方式四:使用扫描包进行注册绑定
    • 注意点:
      1. 接口和他的Mapper配置文件必须同名
      2. 接口和配置文件必须在同一个包下
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

这些配置会告诉了 MyBatis 去哪里找映射文件,剩下的细节就应该是每个 SQL 映射文件了,也就是接下来我们要讨论的。

8.生命周期和作用域

不同作用域和生命周期类是至关重要的,因为错误的使用会导致非常严重的并发问题

技术图片

SqlSessionFactoryBuilder:

  • 这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。
  • 作用域:最佳作用域是方法作用域(也就是局部方法变量)

SqlSessionFactory:

  • 说白了就可以想象为:数据库连接池。
  • SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。
  • 作用域:最佳作用域是应用作用域
  • 最简单的就是使用单例模式或者静态单例模式。

SqlSession:

  • 连接到连接池的一个请求
  • SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
  • 用完之后要立即关闭,否则资源被占用

mybatis学习(三、配置解析)

标签:请求   实现   unp   tis   driver   common   std   eid   处理   

原文地址:https://www.cnblogs.com/LiuOneZero/p/14467163.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!