目录
首先说明本文章学习笔记,可能不太专业大白话居多,请酌情观看
在这里附上mybatis中文文档
<?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="powernode">
<environment id="powernode">
<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="123456"/>
</dataSource>
</environment>
<environment id="mybatis">
<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="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="CarMapper.xml"/>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
一、configuration标签
<configuration></configuration> 根标签
根标签,表示配置信息
所有的配置属性都写在这个标签内部,并且在该标签内部属性有先后顺序之分必须按照该顺序执行
- configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
二、properties 标签
<properties></properties>属性标签
这些属性可以一些属性在外部定义,并且可以动态替换(按照我的理解来说就相当于在顶层定义了一个变量,在该文件内可以通过变量名(name)实现调用)
通过在<properties></properties>中嵌套<property></property>的方式在根标签中定义出来:
<properties>
<property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="123456"/>
</properties>
要使用定义的属性要用${}这个符号并在大括号里面添加name值
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
这个属性不仅可以在properties 元素的子元素中设置,也可以在java属性文件中配置这些属性
在这里我们创建一个文件jdbc.properties,并将数据书写好
不过这个尽然不需要导出,直接导入就可以使用,有点神奇
注意:这个文件不一定非得建在resources根路径下,可以建到其他包内,在使用中只需表明清楚即可
使用这个文件里的属性这个就得用到properties标签里面的resource属性了
在resource中写入它的地址即使用成功,
也可以使用url属性,在使用url时要在前面添加file:///再添加你的地址但是这个并不推荐,这样移植性不好,如果将代码从windos转到Linux等其他操作系统当中会报错
<properties resource="jdbc.properties"></properties>
<properties url="file:///E:/java/MyBaits/jdbc.properties"></properties>
三、settings标签
<settings> </settings>设置标签
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
该部分内容在官网中解释的很nice请移步官网查看
四、environments 标签
<environments></environments>环境配置标签
这个标签是用来配置sql数据库的,可以将 SQL 映射应用于多种数据库之中
在这个<environments></environments>标签中通过<environment></environment>标签配置数据库,一个数据库对应一个<environment></environment>标签对应一个SqlSessionFactory实例,而<environments></environments>标签只能有一个(这两个单词一个有s一个没注意观察)
使用方法如下:
<environments default="powernode">
<environment id="powernode">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="mybatis">
<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="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
注意一些关键点:
- 默认使用的环境 ID(比如:default="development")。
- 每个 environment 元素定义的环境 ID(比如:id="development")。
- 事务管理器的配置(比如:type="JDBC")。
- 数据源的配置(比如:type="POOLED")。
在这个标签中除了environment标签还有其他一些标签
transactionManager标签
<transactionManager />事务管理器标签
这个标签有两种type类型[JDBC|MANAGED]
JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。也就是说myBatis自己使用JDBC来管理事务
MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。简单来说就是myBatis将这些事务托管给JEE(javaEE)等容器来托管
当mybatis找不到容器的支持时:没有事务。也就是说只要执行一条DML语句,则提交一次
使用方式:
<transactionManager type="JDBC"/>
dataSource标签
<dataSource></dataSource>数据源标签也就是连接数据库的
使用这个标签需注意它的type值[UNPOOLED|POOLED|JNDI]
UNPOOLED:不使用连接池,对于一些可用性要求不高的简单应用程序来说,是一个很好的选择,它每一次访问数据库都得重新创建一个连接,不用了就直接销毁这个连接
POOLED:使用连接池,这个就与UNPOOLED截然相反,它会将一些连接放到一个池子当中,当每次访问数据库的时候,它就会从池当中拿出连接来进行访问,当使用完毕的时候就会又放回到池子当中JNDI:表示对接JNDI服务器中的连接池。这种方式给了我们可以使用第三方连接池的接口。如果想使用dbcp、c3p0、druid(德鲁伊)等,需要使用这种方式。
在使用<dataSource></dataSource>标签的时候会设置一些参数用来约束连接,设置参数我们会用到上面用到过的一个标签<property></property>标签,通过这个标签的name和value属性来设置参数如:
- driver – 这是 JDBC 驱动的 Java 类全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
- url – 这是数据库的 JDBC URL 地址。
- username – 登录数据库的用户名。
- password – 登录数据库的密码。
<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="root"/>
<property name="password" value="123456"/>
</dataSource>
上面这几个是UNPOOLED|POOLED共有的,而我们的POOLED由于引入了池的概念,所以也会有一些可以约束池的属性
- poolMaximumActiveConnections – 在任意时间可存在的活动(正在使用)连接数量,默认值:10(在池中最多能有几个连接对象)
- poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。(在池中能有几个闲着的连接,如果一旦超出这个值,那么就会销毁掉一个连接)
- poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)(如果你的请求多余池中连接就会等待,如果超过设置的这个时间就会回池,就是让他强行执行一遍)
- poolTimeToWait – 这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。(当请求获取不到闲的连接时,会每隔20秒打印一次日志,防止代码有误,导致在这里傻等)
这边只写了部分常用的配置,详情还得移步到官网查看
五、mappers标签
<mappers></mappers>映射器,通俗来说就时去找sql语句,来执行它
在使用这个标签时通常会搭配它的子标签<mapper />
而<mapper />标签有两个属性分别是resource和url
resource是相对与类路径,移植性比较好
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="CarMapper.xml"/>
<mapper resource="UserMapper.xml"/>
</mappers>
url是固定路径,移植性比较差例如:将windows代码移植到Linux等操作系统中则可能报错
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
<mapper url="file:///E:/java/MyBaits/UserMapper.xml"/>
</mappers>
注意:一个XxxxMapper.xml文件就会有一个<mapper />标签
再次说明,本文章为学习笔记,可能会有不准确的地方,欢迎指正