1.核心配置文件内容举例
<configuration>
<properties resource="jdbc.properties"></properties>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
<typeAliases>
<!--以包为单位,设置改包下所有的类型都拥有默认的别名,即类名且不区分大小写-->
<package name="com.jianqun.pojo"/>
</typeAliases>
<environments default="mysql_test">
<environment id="mysql_test">
<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>
</environments>
<mappers>
<package name="com.jianqun.mapper"/>
</mappers>
</configuration>
2.核心配置文件中,各个标签的书写顺序:
properties
settings?,
typeAliases,
typeHandlers,
objectFactory,
objectWrapperFactory,
reflectorFactory,
plugins,
environments,
databaseIdProvider,
mappers
3.核心配置文件中各标签的含义:
3.1.标签configuration
:
- 1.
configuration
是根标签,表示配置信息
3.2.标签properties:
a.properties功能介绍:
- 1.引入properties文件,此时就可以
${属性名}
的方式访问属性值
b.实现properties文件的引入:
- 1.创建
jdbc.properties
数据库连接配置文件
- 2.引入配置文件:
<!--引入properties文件,此时就可以${属性名}的方式访问属性值--> <properties resource="jdbc.properties"></properties>
- 3.更改datasource
<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>
c.当properties中使用url的时候,下面方式最好不用:
- 1.这种方式可移植性太差了,最好不用
3.3.标签setting :
- 1.将表中字段的下划线自动转换为驼峰
<settings> <!--将表中字段的下划线自动转换为驼峰--> <setting name="mapUnderscoreToCamelCase" value="true"/> <!--开启延迟加载--> <setting name="lazyLoadingEnabled" value="true"/> </settings>
3.4.标签typeAliases:
- 1.typeAlias:设置某个具体的类型的别名
a.属性type:
- 1.需要设置别名的类型的全类名:
<typeAlias type="com.jianqun.mybatis.bean.User"></typeAlias>
b.属性alias:
- 1.设置此类型的别名,
若不设置此属性,该类型拥有默认的别名,即类名;且不区分大小写
; - 2.若设置此属性,此时该类型的别名只能使用alias所设置的值:
<typeAlias type="com.jianqun.mybatis.bean.User" alias="abc"></typeAlias>
- 3.以包为单位,设置该包下所有的类型都拥有默认的别名,即类名且不区分大小写:
<package name="com.jianqun.mybatis.bean"/>
3.5.标签environments:
- 1.environments表示多个环境,以“s”结尾表示复数,也就是说mybatis的环境可以配置多个数据源。
a.default属性:
- 1.表示默认使⽤的是哪个环境,
default后⾯填写的是environment的id
。 - 2.default的值只需要和environment的id值⼀致即可
2.5.标签environment:
- 1.具体的环境配置主要包括:
事务管理器的配置 + 数据源的配置
a.属性id
:
- 1.给当前环境⼀个唯⼀标识,该标识⽤在environments的default后⾯,⽤来指定默认环境的选择
- 2.单元测试:
3.6.标签transactionManager
:
a.作用:
- 1.
标签:transactionManager
:设置事务管理方式
b.属性1:type:
- 1.设置事务管理方式,指定事务管理器具体使用什么方式,可选值包括两个,
type="JDBC|MANAGED"
,大小写写无所谓,不区分大小写
- type=“JDBC”:设置当前环境的
事务管理都必须手动处理
。使用JDBC原生的事务管理机制,底层原理:事务开启conn.setAutoCommit(false); ...处理业务...事务提交conn.commit();
- type=“MANAGED”:设置
事务被管理
,交给其它容器来管理事务,例如spring中的AOP、WebLogic、JBOSS等。如果没有管理事务的容器,则没有事务。没有事务的含义:只要执行一条DML语句,则提交一次
- type=“JDBC”:设置当前环境的
- 2.底层原理:Mybatis的底层是有两个实现类,当是jdbc类型的时候,就会实例化JdbcTransaction对象 ,是MANAGED的时候,就会实例化managedTransaction对象
3.7.标签dataSource
- 1.
标签:dataSource:
设置数据源
,为程序提供Connection(连接)对象。 - 2.
数据源是一套规范
,JDK中有这套规范:java.sql.DataSource
; - 3.我们自己也可以基于这个规范编写数据源组件,只要
实现这套接口规范(java.sql.DataSource)
就可以了 - 4.常见的数据源组件【常见的数据库连接池】:druid、c3p0、 dbcp等
a.type属性:
- 1.dataSource的type属性可以来
设置数据源的类型,来指定具体使用的数据库连接池的策略
- 2.type属性可选值包括三个,
type="POOLED|UNPOOLED|JNDI"
- type=“POOLED”:`使用mybatis自己实现的数据库连接池
- type=“UNPOOLED”:不使用数据库连接池,即
每次使用连接都需要重新创建
- type=“JNDI”:集成第三方的数据库连接池
- 5.JNDI是一套规范,大部分的web容器都实现了这个规范,如Tomcat、webLogic、WebSphere,这些都实现了这个规范。
如果不是web或者maven的war⼯程,JNDI是不能使⽤的。
b.POOLED连接池和非连接池UNPOOLED测试:
- 1.创建会话:
- 2.当不使用连接池的时候:
- 3.当使用连接池的时候:
c.连接池的好处:
3.8.标签property:
-
0.具体的介绍可以参照官网
-
1.property可以是(UNPOOLED):
-
2.property可以是(type=“POOLED"时):
-
3.property可以是(type=“JNDI"时):
initial_context
这个属性⽤来在 InitialContext 中寻找上下⽂(即initialContext.lookup(initial_context))这是个可选属性,如果忽略,那么将会直接从InitialContext 中寻找 data_source 属性。data_source
这是引⽤数据源实例位置的上下⽂路径。提供了 initial_context 配置时会在其返回的上下⽂中进⾏查找,没有提供时则直接在 InitialContext 中查找。
3.9.标签mappers
- a.mappers是引入映射文件用的
- b.映射文件是和mapper接口是相互对应的,而一个mapper接口是和一张表对应的,一张表对应着一个实体类,也就是一个实体类对应一个mapper接口,而mapper接口又应着我们的映射文件,所以说:当表增多的时候,mapper接口就多,那么接口的映射文件也会增多;
- 为了解决这个问题,我们就是可以以包的形式来引入映射文件
- 注意:以包为单位,将包下所有的映射文件引入核心配置文件,此
方式必须保证mapper接口和mapper映射文件必须在相同的包下
<!--引入映射文件--> <mappers> <mapper resource="UserMapper.xml"/> <!-- 以包为单位,将包下所有的映射文件引入核心配置文件 注意:此方式必须保证mapper接口和mapper映射文件必须在相同的包下 --> <package name="com.jianqun.mybatis.mapper"/> </mappers>
4.核心配置文件中的mapper标签:
- 1.明确mapper标签的具体位置是在哪里:
- 2.mapper知识点:
- 3.代码测试:
5.MyBatis中的别名机制:
1.核心配置文件中未设置别名之前:
设置别名之后:
- 1.核心配置文件中设置别名:
alaias属性可以省略,省略后,别名默认是类名
- 2.设置成别名:
别名是不区分大小写的
- 3.
namespace这里不能写别名
:
3.更方便的写别名的方式: