主配置文件
项目中使用的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>
<properties resource="jdbc.properties"/>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!-- <typeAliases>-->
<!-- <typeAlias type="com.maj.domain.Account" alias="acc" />-->
<!-- <package name="com.maj.domain"/>-->
<!-- </typeAliases>-->
<environments default="mydev">
<environment id="mydev">
<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>
</environments>
<mappers>
<mapper resource="com/maj/dao/AccountDao.xml"/>
</mappers>
</configuration>
dataSource标签
Mybatis 中访问数据库,可以连接池技术,但它采用的是自己的连接池技术。
在 Mybatis 的 mybatis.xml配置文件中,通过<dataSource type=” POOLED” >来实现 Mybatis 中连接池的配置。
dataSource类型
<dataSource type=” POOLED” >
type的取值:
- UNPOOLED:不使用连接池的数据源
- POOLED:使用连接池的数据源
- JNDI:使用JNDI的数据源
UNPOOLED、POOLED数据源都实现了javax.sql.DataSource接口,而JNDI不一样
dataSource的配置
<environments default="mydev">
<environment id="mydev">
<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>
</environments>
事务
默认手动提交事务
Mybatis框架是对JDBC的封装,所以Mybatis框架的事务控制方式,本身也是用JDBC的Connection对象的commit(), rollback().
Connection对象的setAutoCommit()方法来设置事务提交方式的。
<transactionManager type="JDBC"/>
该标签用于指定MyBatis所使用的事务管理器。
MyBatis支持两种事务管理器类型:JDBC与MANAGED。
- JDBC:使用JDBC的事务管理机制。即,通过Connection的commit()方法提交,通过rollback()方法回滚。但默认情况下,MyBatis将自动提交功能关闭了,改为了手动提交。即程序中需要显式的对事务进行提交或回滚。从日志的输出信息中可以看到。
- MANAGED:由容器来管理事务的整个生命周期(如 Spring 容器)。
自动提交事务
设置自动提交的方式, factory 的 openSession() 分为有参数和无参数的
sqlsession openSession( );
sqlsession openSession( boolean autoCommit) ;
有参数为 true,使用自动提交,可以修改 MyBatisUtil 的 getSqlSession()方法。
session = factory.openSession(true);
再执行 insert 操作,无需执行 session.commit(),事务是自动提交的
使用数据库属性配置文件
- 在resources目录创建jdbc.properties文件,文件名称自定义。
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test1
jdbc.username=root
jdbc.password=maj6226543
- 在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>
<properties resource="jdbc.properties"/> <!--必须放在最开始的位置-->
- 使用propertis文件中的内容
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/> <!--使用${key}取值-->
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
别名
Mybatis 支持默认别名,我们也可以采用自定义别名方式来开发,主要使用在<select resultType="别名">
mybatis-config.xml 主配置文件定义别名 :
<!-- mybatis-config.xml 主配置文件 -->
<typeAliases>
<!--
<typeAlias type="..." alias="...">
1. 定义单个类型的别名,需要一个一个的起别名
2. type:类型的全限定名称
3. alias:自定义别名
-->
<typeAlias type="com.maj.domain.Account" alias="acc" />
。。。
<!--
<package name="..."/>
1. 批量定义别名:扫描整个包下的类,别名为类名(不区分大小写)
2. name:包的全限定名称
-->
<package name="com.maj.domain"/>
。。。
</typeAliases>
mappers(映射器)
-
<mapper resource=" " />
使用相对于类路径的资源,从 classpath 路径查找文件
例如:
<mapper resource="com/bjpowernode/dao/StudentDao.xml" />
-
<package name=""/>
指定包下的所有 Dao 接口
例如:
<package name="com.bjpowernode.dao"/>
注意:此种方法要求 Dao 接口名称和 mapper 映射文件名称相同,且在同一个目录中