核心配置文件详解
核心配置文件的顺序:
(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".
1.properties
属性
引入properties
文件,此时就可以使用${属性名}
的方式访问属性值
<!--引入jdbc.properties文件,用于动态加载数据源配置-->
<properties resource="jdbc.properties"></properties>
properties
文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
2.类型别名typeAliases
**引出类型别名的作用:**由于在resultType
或resultMap
中每次都需要写很长的全类名
,所以引出类型别名
减少全类的书写
没有引入类型别名typeAliases
<select id="getUserById" resultType="com.haikang.dao.User">
select * from t_user where id = 1;
</select>
类型别名可以为java
类型设置一个缩写名字。它仅用于xml
配置,意在于降低冗余的全限定类名书写。
typeAilases
有两个子标签:typeAlias
package
在typeAlias
类型中,有两个属性,一个是type
需要设置别名的javabean
类,ailas
设置别名,如果设置了别名在使用时,只能使用该别名【并且是不区别大小写】,如果不设置别名,别名就是该类的类名,并且不区别大小写
在引入命名空间后:
<!--
typeAlias:设置某个类型的别名的
属性:
type: 设置需要设置别名的类型
alias: 设置某个类型的别名,若不设置该属性,
那么该类型拥有默认的别名,即类名并且不区分大小写
package: 设置以包为单位,将包下所有类型设置默认的类型别名,
即不区别大小写,在开发中大多数使用这种情况
-->
<typeAliases>
<!--type是必须书写的,而alias是可以不写的,可以不写别名就是该类的类名 ,在开发很少使用这种方式-->
<!-- <typeAlias type="com.haikang.dao.User" alias="user"></typeAlias>-->
<!--表示将该包下所有类都起了类型别名,别名就是默认的,该类的类名,在开发中推荐使用的-->
<package name="com.haikang.dao"/>
</typeAliases>
引入命名空间的书写Mapper.xml
:
<!--查询所有用户信息 List<User> selectAllUser()-->
<select id="selectAllUser" resultType="user">
select * from t_user;
</select>
注意是在开发中大多数使用的是以包
的形式
3.mappers
映射器
mappers
标签就是告诉mybatis
去哪里找映射文件,有四种情况:
mapper resource
[以xml方式]mapper url
[就是以文件方式引入]mapper class
[类方式]package name
[方式以包形式引入]
mappers
配置就是告诉mybatis
去哪里找映射文件
注意是:如果是以包的形式引入要两个一致,1.映射文件
所在包名必须与mapper
接口所在包完全一致,2.并且mapper
接口名与映射文件
的xml
文件名一致
由于映射.xml
文件要放在resources
下,由于在resources
不能直接用new package
的方式创建包,只能用Directory
的方式创建,所以要创建包的形式需要以/
的形式创建包
以包为单位引入映射文件两个要求:
mapper
接口所在的包要和映射文件所在的包一致【就是下图中的包名必须一致】mapper
接口要和映射文件的名字一致【就是UserMapper
接口名必须与UserMapper.xml
映射文件名一致】
<mappers>
<!-- <mapper resource="mappers/UserMapper.xml"/>-->
<!--
以包为单位引入映射文件
要求:
1、mapper接口所在的包要和映射文件所在的包一致
2、mapper接口要和映射文件的名字一致
-->
<!--以包的形式引入-->
<package name="com.haikang.mapper"/>
</mappers>
推荐使用以package
的形式
案例:
<?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>
<!--
MyBatis核心配置文件中,标签的顺序:
properties?,settings?,typeAliases?,typeHandlers?,
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,databaseIdProvider?,mappers?
-->
<!--引入properties文件-->
<properties resource="jdbc.properties" />
<!--设置类型别名-->
<typeAliases>
<!--
typeAlias:设置某个类型的别名
属性:
type:设置需要设置别名的类型
alias:设置某个类型的别名,若不设置该属性,那么该类型拥有默认的别名,
即类名且不区分大小写
-->
<!--<typeAlias type="com.haikang.mybatis.pojo.User"></typeAlias>-->
<!--以包为单位,将包下所有的类型设置默认的类型别名,即类名且不区分大小写-->
<package name="com.haikang.mybatis.pojo"/>
</typeAliases>
<!--
environments:配置多个连接数据库的环境
属性:
default:设置默认使用的环境的id
-->
<environments default="development">
<!--
environment:配置某个具体的环境
属性:
id:表示连接数据库的环境的唯一标识,不能重复
-->
<environment id="development">
<!--
transactionManager:设置事务管理方式
属性:
type="JDBC|MANAGED"
JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动处理
MANAGED:被管理,例如Spring
-->
<transactionManager type="JDBC"/>
<!--
dataSource:配置数据源
属性:
type:设置数据源的类型
type="POOLED|UNPOOLED|JNDI"
POOLED:表示使用数据库连接池缓存数据库连接
UNPOOLED:表示不使用数据库连接池
JNDI:表示使用上下文中的数据源
-->
<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="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<!--<mapper resource="mappers/UserMapper.xml"/>-->
<!--
以包为单位引入映射文件
要求:
1、mapper接口所在的包要和映射文件所在的包一致
2、mapper接口要和映射文件的名字一致
-->
<package name="com.haikang.mybatis.mapper"/>
</mappers>
</configuration>
源码区
SqlSessionFactory
源码
public interface SqlSessionFactory {
// 使用没有参数方式获取一个 SqlSession对象,要手动提交事务
SqlSession openSession();
// 传入true方式,自动提交事务
SqlSession openSession(boolean var1);
SqlSession openSession(Connection var1);
SqlSession openSession(TransactionIsolationLevel var1);
SqlSession openSession(ExecutorType var1);
SqlSession openSession(ExecutorType var1, boolean var2);
SqlSession openSession(ExecutorType var1, TransactionIsolationLevel var2);
SqlSession openSession(ExecutorType var1, Connection var2);
Configuration getConfiguration();
}
SqlSession
源码
public interface SqlSession extends Closeable {
<T> T selectOne(String var1);
<T> T selectOne(String var1, Object var2);
<E> List<E> selectList(String var1);
<E> List<E> selectList(String var1, Object var2);
<E> List<E> selectList(String var1, Object var2, RowBounds var3);
<K, V> Map<K, V> selectMap(String var1, String var2);
<K, V> Map<K, V> selectMap(String var1, Object var2, String var3);
<K, V> Map<K, V> selectMap(String var1, Object var2, String var3, RowBounds var4);
<T> Cursor<T> selectCursor(String var1);
<T> Cursor<T> selectCursor(String var1, Object var2);
<T> Cursor<T> selectCursor(String var1, Object var2, RowBounds var3);
void select(String var1, Object var2, ResultHandler var3);
void select(String var1, ResultHandler var2);
void select(String var1, Object var2, RowBounds var3, ResultHandler var4);
int insert(String var1);
int insert(String var1, Object var2);
int update(String var1);
int update(String var1, Object var2);
int delete(String var1);
int delete(String var1, Object var2);
void commit();//提交事务
void commit(boolean var1);
void rollback();
void rollback(boolean var1);
List<BatchResult> flushStatements();
void close();
void clearCache();
Configuration getConfiguration();
<T> T getMapper(Class<T> var1);
Connection getConnection();
}