1、属性(properties)
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。例如:
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>
使用时:使用${key}来获取value。
同时我们也可以在外部配置文件,比如我们想要配置数据库的相关信息,可以在外部编写一个jdbc.properties文件
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.name=ckytest
jdbc.pwd=123456
在配置文件中这样编写
resource 就是默认从类路径下找,而ersource目录就是类路径。[推荐]
<?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>
<properties resource="jdbc.properties"></properties>
<!--一个数据库对应一个一个环境,一个数据库对应一个sqlSessionFactory对象-->
<!-- 即一个环境 对应一个sqlSessionFactory对象-->
<!-- 默认 使用的是defalut的数据库-->
<environments default="mybatisDB">
<environment id="mybatisDB">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.name}"/>
<property name="password" value="${jdbc.pwd}"/>
</dataSource>
</environment>
当然也可以使用绝对路径。[不推荐]
<properties url="file:///D:/jdbc.properties"></properties>
2、environments
2.1 environment
<?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>
<!--一个数据库对应一个一个环境,一个数据库对应一个sqlSessionFactory对象-->
<!-- 即一个环境 对应一个sqlSessionFactory对象-->
<!-- 默认 使用的是defalut的数据库-->
<environments default="testDB">
<environment id="testDB">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="ckytest"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<environment id="mybatisDB">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="ckytest"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--sql映射文件创建好之后,需要将该文件路径配置到这里-->
<mapper resource="CarMapping.xml"/>
<mapper resource="Car1Mapping.xml"/>
</mappers>
</configuration>
public void test6() throws Exception{
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 使用配置中默认的数据库
SqlSessionFactory build = sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"));
// 也可以指定数据库 即指定我们配置中 环境的id即可
// SqlSessionFactory mytatisDB = sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"), "mytatisDB");
SqlSession sqlSession = build.openSession();
sqlSession.commit();
sqlSession.close();}
2.2、Transaction
<transactionManager type="MANAGED"/>
或者
<transactionManager type="JDBC"/>
transactionManager 有两个值,一个是JDBC
,一个是MANAGED
,不区分大小写.
如果是JDBC,则由mybatis管理事务,底层仍然是jdbc原生代码。
○ 开启事务:conn.setAutoCommit(false);
○ 处理业务…
○ 提交事务:conn.commit();
如果是MANAGED,则mybatis不参与事务管理,把事务管理交给其他JEE容器。交给容器去管理事务,但目前使用的是本地程序,没有容器的支持,当mybatis找不到容器的支持时:没有事务。也就是说只要执行一条DML语句,则提交一次。
JDBC,会创建该对象
managed,会创建该对象
2.3、datasource
1、数据源,也就是提供conntion对象的。(凡是给程序提供connecttion对象的,都可称为数据源)
2、数据源实际上是一套规范,JDK中有这套规范:
javax.sql.DataSource(这个数据源的规范,这套接口实际上是JDK规定的。)
3、我们自己也可以编写数据源组件,只要实现javax.sql.Datasource接口就行了。实现接口当中所有的方法。这样就有了自己的数据源比如你可以写一个属于自己的数据库连接池(数据库连接池是提供连接对象的,所以数据库连接池就是一个数据源)。
4.常见的数据源组件有哪些呢【常见的数据库连接池有哪些呢】?
阿里巴巴的德鲁伊连接池:druid 、c3р0、dbcp
5.type属性用来指定数据源的类型,就是指定具体使用什么方式来获取Connection对象:type属性有三个值:必须是三选一
type=“[UNPOOLEDIPOOLEDIJNDI]”
UNPOOLED
:不使用数据库连接池技术。每一次请求过来之后,都是创建新的Connection对象。
POOLED
:使用mybatis自己实现的数据库连接池。
JNDI
:集成其它第三方的数据库连接池。
JNPI是一套规范。谁实现了这套规范呢?大部分的web容器都实现了INDI规范:
例如:Tomcat、Jetty、WebLogic、WebSphere,这些服务器(容器)都实现了JNDI规范。JNDI是:java命名目录接口。Tomcat服务器实现了这个规范。
配置不同,则下边的属性也不同,具体可以参考[手册](https://mybatis.net.cn/configuration.html#environments)
连接池的优点:1每次链接都从池中拿,效率高2.每次只能从池中拿,连接对象的创建数量是可控的
POOLED的其他属性:
poolMaximumActiveConnections
:即我们的连接池中最多会有几个活跃连接数量,超过该连接数量之后,之后的连接就要等待之前的连接释放。
poolMaximumIdleConnections
:最多允许的空闲连接数。如果任意时间空闲连接大于该值,为了保证资源,就会真正关闭这些连接。
poolMaximumCheckoutTime
:参数定义了连接被检出后的最大使用时间(以毫秒为单位)。如果一个连接被检出后的使用时间超过了这个值,连接池可能会认为该连接存在问题(例如被长时间占用),并将其关闭以释放资源。
poolTimeToWait
: 这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。