04MyBatis核心配置文件
mybatis-config.xml
<?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="">
<environment id="A">
<transactionManager type="JDBC"/>
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="B">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="CarMapper.xml"/>
<mapper resource="CarMapper2.xml"/>
</mappers>
</configuration>
● configuration:根标签,表示配置信息。
● environments:环境(多个),以“s”结尾表示复数,也就是说mybatis的环境可以配置多个数据源。
○ default属性:表示默认使用的是哪个环境,default后面填写的是environment的id。default的值只需要和environment的id值一致即可。
● environment:具体的环境配置(主要包括:事务管理器的配置 + 数据源的配置)
○ id:给当前环境一个唯一标识,该标识用在environments的default后面,用来指定默认环境的选择。
● transactionManager:配置事务管理器
○ type属性:指定事务管理器具体使用什么方式,可选值包括两个
■ JDBC:使用JDBC原生的事务管理机制。底层原理:事务开启conn.setAutoCommit(false); …处理业务…事务提交conn.commit();
■ MANAGED:交给其它容器来管理事务,比如WebLogic、JBOSS等。如果没有管理事务的容器,则没有事务。没有事务的含义:只要执行一条DML语句,则提交一次。
● dataSource:指定数据源,为程序提供数据连接对象
○ type属性:用来指定具体使用的数据库连接池的策略,可选值包括三个
■ UNPOOLED:每一次请求过来,都新建一个Connnection对象。采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。
● property可以是:
○ driver 这是 JDBC 驱动的 Java 类全限定名。
○ url 这是数据库的 JDBC URL 地址。
○ username 登录数据库的用户名。
○ password 登录数据库的密码。
○ defaultTransactionIsolationLevel 默认的连接事务隔离级别。
○ defaultNetworkTimeout 等待数据库操作完成的默认网络超时时间(单位:毫秒)
■ POOLED:使用MyBatis自己实现的连接池,采用传统的javax.sql.DataSource规范中的连接池。
● property除了UNPOOLED的全部属性外,还可以是(除了包含UNPOOLED中之外):
○ poolMaximumActiveConnections 在任意时间可存在的活动(正在使用)连接数量,默认值:10
○ poolMaximumIdleConnections 任意时间可能存在的空闲连接数。
○ 其它…
■ JNDI:采用第三方实现的数据库连接池,来获取DataSource对象。JNDI实际是一套规范,大部分Web容器都实现了JNDI规范,如Tomcat。不同的服务器所能拿到DataSource是不一样。仅用于Web/Maven的war工程。
● property可以是(最多只包含以下两个属性):
○ initial_context 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))这是个可选属性,如果忽略,那么将会直接从 InitialContext 中寻找 data_source 属性。
○ data_source 这是引用数据源实例位置的上下文路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。
● mappers:在mappers标签中可以配置多个sql映射文件的路径。
● mapper:配置某个sql映射文件的路径
○ resource属性:使用相对于类路径的资源引用方式
○ url属性:使用完全限定资源定位符(URL)方式
1.dataSource
数据源=数据库连接池
dataSource指定数据源(就是指定使用哪个数据库连接池),为程序提供数据连接对象Connection,事实上,凡是为程序提供Connection对象的,都叫做数据源。
数据源其实是一套规范,由javax.sql.Datasource接口定义。
可以编写自己的数据源组件,只要实现了这个接口就行
也有常见的封装好的数据源(数据库连接池):Druid
2.type=“JNDI”解释
JNDI实际是一套规范,Tomcat实现了这个规范。将Druid数据库连接池配置到Tomcat上,将数据库连接池的上下文写到property的两个属性上,使得Tomcat服务器可以对外提供一个连接池的名字。
3.POOLED
POOLED即采用数据库连接池,优点是:
-
提前创建好一定的连接对象sqlSession, 每次需要就拿,用完就还,避免了创建和销毁的开销
-
因为每次只是拿,创建是提前进行的,因此连接对象sqlSession的数量是可控的,不至于拖垮内存。
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<!--最大连接数-->
<property name="poolMaximumActiveConnections" value="3"/>
<!--这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。-->
<property name="poolTimeToWait" value="20000"/>
<!--强行回归池的时间-->
<property name="poolMaximumCheckoutTime" value="20000"/>
<!--最多空闲数量-->
<property name="poolMaximumIdleConnections" value="1"/>
</dataSource>
poolMaximumActiveConnections:最大的活动的连接数量。默认值10
poolMaximumIdleConnections:最大的空闲连接数量。默认值5
poolMaximumCheckoutTime:强行回归池的时间。默认值20秒。
poolTimeToWait:当无法获取到空闲连接时,每隔20秒打印一次日志,避免因代码配置有误,导致傻等。(时长是可以配置的)
当然,还有其他属性。对于连接池来说,以上几个属性比较重要。
最大的活动的连接数量就是连接池连接数量的上限。默认值10,如果有10个请求正在使用这10个连接,第11个请求只能等待空闲连接。
最大的空闲连接数量。默认值5,如何已经有了5个空闲连接,当第6个连接要空闲下来的时候,连接池会选择关闭该连接对象。来减少数据库的开销。
需要根据系统的并发情况,来合理调整连接池最大连接数以及最多空闲数量。充分发挥数据库连接池的性能。【可以根据实际情况进行测试,然后调整一个合理的数量。】
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!