mybatis学习笔记之核心配置文件详解

文章目录

  • 核心配置文件内容
  • 多环境
  • 事务管理器
  • 对数据源的剖析
    • JNDI
    • POOLED和UNPOOLED的区别
    • 配置具体的数据库连接池参数
  • properties
    • properties和mapper标签的url属性

核心配置文件内容


DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd"><--- 这是个dtd文件是个约束,约束根标签里能写什么,子标签有哪些,孙子标签里又能有哪些,标签里面又能有哪些属性,属性里面又能有那些值--->
        
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/demo"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            dataSource>
        environment>
    environments>
    <mappers>
        <mapper resource="CarMapper.xml"/>
    mappers>
configuration>

多环境

表示的是里面能配置多个环境
表示其中的一个环境

而如上的核心配置文件中的那个唯一环境表示的是连接的数据库是demo,可以后面再配置一个文件去连接另一个数据库。(一个环境对应一个数据库,而一个数据库对应一个SqlSessionFactory对象,即一个环境对应一个SqlSessionFactory对象)

而后面的default表示默认使用的环境


默认环境又是啥?

就是当你使用mybatis创建SqlSessionFactry对象的时候,没有指定的环境的话,默认使用哪个环境
创建SqlSessionFactory有两种方式,一种是直接用创建好的SqlSessionBuilder对象,sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));创建

还有一种build方法就是在上述build方法后面参数加一个指定的environment属性值,这样就是可以指定用的environment而不是用default里面的默认环境

事务管理器

看完了坏境的“外围”配置,接下来就是环境里面的“东西”了


transactionManager标签

  1. 作用:配置事务管理器。指定mybatis具体使用什么方式去管理事务。
  2. type属性有两个值:
  • 第一个:JDBC:主要使用原生的JDBC代码来管理事务。
conn.setAutoCommit(false)
....
conn.commite();
  • 第二个:MANAGED:mybatis不再负责事务的管理,将事务管理交给其他的JEE(JavaEE)容器来管理。例如spring
  1. 大小写无所谓,不区分大小写,但是不能写其他值,只能是二选一。(jdbc和managed)
  2. 在mybatis中提供了一个事务管理器接口:Transaction
    该接口下有两个实现类:jdbcTransaction和ManagedTransaction
    如果type=“JDBC”,那么底层会实例化JdbcTransaction对象。
    如果type=“MANAGED”,那么底层会实例化ManagedTransaction

对数据源的剖析

dataSource配置

  1. dataSource被称为数据源。
  2. dataSource作用是什么?为程序提供Connection对象(但凡是给程序提供Connection对象的,都叫做数据源。)
  3. 数据源实际上是一套规范,JDK中有这套规范:javax.sql.DataSource(这个数据源的规范,这套接口实际上是JDK规定的)
  4. 我们自己也可以编写数据源,只要实现javax.sql.DataSource接口就行了。实现接口当中所有的方法,这样就有了自己的数据源

比如你可以写一个自己的数据库连接池(数据库连接池是提供连接对象的,所有数据库连接池就是一个数据源)

  1. 常见的数据源组件有哪些呢?(常见的数据库连接池有哪些呢)
  • 阿里巴巴的德鲁伊连接池:druid、c3p0、dbcp
  1. type属性用来指定数据源的类型,就是指定具体使用什么方式来获取Connection对象,type属性有三个值:必须是三选一(UNPOOLED|POOLED|JNDI)
  • UNPOOLED:不适用数据库连接池技术。每一次请求过来之后,都是创建新的Connection对象。
  • POOLED:使用mybatis自己实现的数据库连接池
  • JNDI:集成其他第三方的数据库连接池。

JNDI

JNDI是一套规范,谁实现了这套规范呢?大部分的web容器(Tomcat、Jetty、WebLogic、WebSphere)都实现了JNDI规范

JNDI是java命名目录接口(Tomcat实现了这个规范)

这个数据源实现是为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个NDI上下文的数据源引用。并且这种数据源配置只需要两个属性。

POOLED和UNPOOLED的区别

连接池优点:

  1. 每一次获取连接都从池中拿,效率高
  2. 因为每一次只能从池中拿,所以连接对象的创建数量是可控的。

配置具体的数据库连接池参数

正常使用连接池的话,池中有很多参数是需要设置的,可以让连接池发挥的更好,事半功倍的效果。
具体连接池当中的参数如何配置呢?需要反复的更具当前业务情况进行测试


poolMaximumActiveConnections:连接池当中最多的正在使用的连接对象的数量上限,最多有多少个连接可以活动,默认值10


poolTimeToWait:每隔多少时间打印日志,并且尝试获取连接对象,后面value值设置时间(单位毫秒)


poolMaximumCheckoutTime:强行让某个连接空闲,超时时间设置。后面value值设置时间(单位毫秒)


poolMaximumIdleConnections:设置最多的空闲数量

properties

是一个可以在根标签中可以加入的子标签

在properties中可以配置很多属性
把一些必须的属性值放在里面设置,后面调用它的属性名就行,方便后续的更改
也可以把必须的属性值单独拉到根路径下去配置,再利用这个标签将值都get到

properties和mapper标签的url属性

和之前学的差不多,就是要多加一个file:///

你可能感兴趣的:(javaweb,mybatis,学习,笔记)