MyBatis 配置文件
主配置文件
mybatis配置文件两大类:1.主配置文件 2.mapper文件
之前项目中使用的 mybatis.xml 是主配置文件。
主配置文件:提供mybatis全局设置,包含日志、数据源、mapper文件位置等。
mapper文件:写sql语句,一张表一个mapper文件。
<?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>
<!--设置日志-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--声明别名-->
<typeAliases>
<!--
第一种语法格式:
type:java类型的全限定名称(自定义类型)
alias:自定义别名
优点:别名可以自定义
缺点:每个类型必须单独定义
-->
<typeAlias type="com.lln.vo.Student" alias="stu"/>
<!--
第二种语法格式:
name:包名,mybatis会把这个包中所有的类名作为别名(不用区分大小写)
-->
<package name="com.lln.vo"/>
</typeAliases>
<!--配置 mybatis 环境-->
<environments default="mysql">
<!--id:数据源的名称-->
<environment id="mysql">
<!--配置事务类型:使用 JDBC 事务(使用 Connection 的提交和回滚)-->
<transactionManager type="JDBC"/>
<!--数据源 dataSource:创建数据库 Connection 对象
type: POOLED 使用数据库的连接池-->
<dataSource type="POOLED">
<!--连接数据库的四个要素-->
<!--driver:驱动的内容-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/lln/dao/StudentDao.xml"/>
</mappers>
</configuration>
头部使用约束文件
<?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>
</configuration>
settings部分
settings是mybatis的全局设置,影响整个mybatis运行。这个设置一般使用默认值就可以了。
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
typeAliases声明别名
<!--声明别名-->
<typeAliases>
<!--
第一种语法格式:
type:java类型的全限定名称(自定义类型)
alias:自定义别名
优点:别名可以自定义
缺点:每个类型必须单独定义
-->
<typeAlias type="com.lln.vo.Student" alias="stu"/>
<!--
第二种语法格式:
name:包名,mybatis会把这个包中所有的类名作为别名(不用区分大小写)
-->
<package name="com.lln.vo"/>
</typeAliases>
配置环境
environments: 环境标签,里面可以配置多个environment
default:属性,表示mybatis默认连接的数据库环境
environment: 表示一个数据库的连接信息。
属性id:自定义的环境标识,唯一值。
transactionManager: 事务管理器
属性 type:表示事务管理器的类型。
type 属性值:
(1)JDBC:使用Connection对象,由mybatis自己完成事务的处理。
(2)MANAGED:管理,表示把事务的处理交给容器实现。
dataSource: 数据源,创建的Connection对象,连接数据库。
属性:type 数据源类型
type属性值:
(1)POOLED,mybatis会在内存中创建PooledDataSource类,管理多个Connection连接对象使用的连接池。
(2)UNPOOLED,不适用连接池,mybatis创建一个UnPooledDataSource类,每次执行sql语句先创建Connection对象,再执行sql语句,最后关闭Connection。
(3)JNDI,java的命名和目录服务。使用 JNDI 实现的数据源。
<!--配置 mybatis 环境-->
<environments default="mysql">
<!--id:数据源的名称-->
<environment id="mysql">
<!--配置事务类型:使用 JDBC 事务(使用 Connection 的提交和回滚)-->
<transactionManager type="JDBC"/>
<!--数据源 dataSource:创建数据库 Connection 对象
type: POOLED 使用数据库的连接池-->
<dataSource type="POOLED">
<!--连接数据库的四个要素-->
<!--driver:驱动的内容-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
dataSource 配置
在 MyBatis.xml 主配置文件,配置 dataSource:
MyBatis 在初始化时,根据的 type 属性来创建相应类型的数据源 DataSource,
即:
type=”POOLED”:MyBatis 会创建 PooledDataSource 实例
type=”UNPOOLED” : MyBatis 会创建 UnpooledDataSource 实例
type=”JNDI”:MyBatis 会从 JNDI 服务上查找 DataSource 实例,然后返回使用
数据库属性配置文件
为了方便对数据库连接的管理,DB 连接四要素数据一般都是存放在一个专门的属性文件中的。MyBatis 主配置文件需要从这个属性文件中读取这些数据。
在 resources 目录创建 jdbc.properties 文件,文件名称自定义。
修改主配置文件,文件开始位置加入:
使用key值:
事务
(1) 默认需要手动提交事务
Mybatis 框架是对 JDBC 的封装,所以 Mybatis 框架的事务控制方式,本身也是用 JDBC 的 Connection 对象的 commit(), rollback() .
Connection 对象的 setAutoCommit()方法来设置事务提交方式的。自动提交和手工提交
<transactionManager type="JDBC"/>
该标签用于指定 MyBatis 所使用的事务管理器。MyBatis 支持两种事务管理器类型:JDBC 与 MANAGED。
JDBC:使用 JDBC 的事务管理机制。即,通过 Connection 的 commit()方法提交,通过 rollback()方法回滚。但默认情况下,MyBatis 将自动提交功能关闭了,改为了手动提交。
MANAGED:由容器来管理事务的整个生命周期(如 Spring 容器)。
(2) 自动提交事务
设置自动提交的方式,factory 的 openSession() 分为有参数和无参数的。
//创建方法,获取SqlSession对象
public static SqlSession getSqlSession(){
SqlSession session = null;
if(factory != null){
session = factory.openSession();
}
return session;
}
有参数为 true,使用自动提交,可以修改 MyBatisUtil 的 getSqlSession()方法。
session = factory.openSession(true);
再执行 insert 操作,无需执行 session.commit(),事务是自动提交的
mapper文件
第一种方式:
使用mapper指定其他mapper文件的位置,相对于类路径的资源,从 classpath 路径查找文件。
优点:文件清晰,加载的文件是明确的,文件的位置比较灵活。
缺点:文件多的时候代码量比较大,管理难度大。
<mappers>
<mapper resource="com/lln/dao/StudentDao.xml"/>
</mappers>
第二种方式:
指定包下的所有 Dao 接口。
name:包名,mapper文件所在的包名。
特点:把这个包中的所有mapper文件一次性全部加载。
<package name="com.xxxx.dao"/>
使用要求:此种方法要求 Dao 接口名称和 mapper 映射文件名称相同,且在同一个目录中。