4、MyBatis之常见的全局配置
Properties标签
第一种:全局配置文件内部配置数据源信息
(1)在全局配置文件中编写数据源信息
<properties>
<!--name指定数据源名称,value指定其值-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="12345"/>
</properties>
(2)获取数据源信息
<environments>
中的<property>
标签通过${name}获取数据源信息值,如下:
<environments default="mysql">
<!--id设定编号-->
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<!--MyBatis默认有三种数据源
UNPOOLED 当需要数据库链接时创建,使用结束后销毁。
POOLED 连接池,有容器的概念,当数据库连接使用完之后会被回收,以队列的形式排在队尾并赋予新的编号
提高了获取连接的效率
JDNI 服务器提供的数据源,结构为Map
-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
第二种:外部配置数据源信息
(1)编写数据源信息
文件名:jdbcConfig.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
jdbc.username=root
jdbc.password=12345
(2)引入外部配置文件
全局配置文件需要引入该文件,在全局配置文件中进行如下配置:
<!--resource:外部文件的全路径 + 文件名-->
<properties resource="cofig/jdbcConfig.properties"/>
结构如下:
(3)获取配置源信息
<environments>
中的<property>
标签通过${name}获取数据源信息值,如下:
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<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>
Setting标签
配置如下:
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
typeAliases标签
第一种:用typeAlias标签配置
<typeAliases>
<!--type:POJO类的全限定类名(全路径 + 文件名)
alias:别名-->
<typeAlias type="com.example.mybatis.pojo.User" alias="user"/>
<typeAlias type="com.example.mybatis.pojo.Account" alias="account"/>
</typeAliases>
第二种:用package标签配置
<typeAliases>
<!--name:存放POJO类的全路径 + 包名-->
<package name="com.emample.mybatiscrud.pojo"/>
</typeAliases>
没有配置typeAliases
前,resultType
的值必须为POJO类的全限定类名
如下:
<select id="findAll" resultType="com.emample.mybatiscrud.pojo.User">
SELECT * FROM user
</select>
配置之后resultType可以直接写别名,如下:
<select id="findAll" resultType="user">
SELECT * FROM user
</select>
起别名的好处是:提高了代码的可读性
environments 标签
用于配置连接数据库的环境,基本配置如下
<environments default="mysql">
<!--id设定编号-->
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<!--MyBatis默认有三种数据源
UNPOOLED 当需要数据库链接时创建,使用结束后销毁。
POOLED 连接池,有容器的概念,当数据库连接使用完之后会被回收,以队列的形式排在队尾并赋予新的编号
提高了获取连接的效率
JDNI 服务器提供的数据源,结构为Map
-->
<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>
databaseIdProvider标签
该标签用于支持数据库的移植性
有两组数据库的数据源信息
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
jdbc.username=root
jdbc.password=12345
orcl.driver=oracle.jdbc.OracleDriver
orcl.url = jdbc:oracle:thin:@localhost:1521:mybatis
orcl.username=scott
orcl.password=12345
除此之外,还需要添加两种类型的数据库驱动,全局配置文件配置两种数据库的环境,这里省略
在全局配置文件中配置databaseIdProvider,如下
<!--databaseProvider:支持多数据库厂商的;
type="DB——VENDOR",VendorDatabaseIdProvider
作用就是得到数据库厂商的表示(驱动getDatabaseProductName())-->
<databaseIdProvider type="DB_VENDOR">
<!--为不同的数据库厂商起别名-->
<property name="MySqL" value="mysql"/>
<property name="Oracle" value="oracle"/>
</databaseIdProvider>
一个抽象方法
UserDao
/**
* 查询所有用户,同时获取用户下所有账户的信息
*/
List<User> findAll();
多个同名配置
某些情况下,mysql和oracle执行的语句结构不一样所以需要出现同名方法的多个配置
通过databaseId来指定在什么数据库环境下用哪个配置
<select id="findAll" resultType="user" databaseId="oracle">
select * FROM user
</select>
<select id="findAll" resultType="user" databaseId="mysql">
select * FROM user
</select>
Mappers 标签
用于映射注册
第一种:适用于“接口 + 映射文件”的开发方式
<mappers>
<!--resource指定映射文件的全路径+映射文件名-->
<mapper resource="com/example/mybatiscrud/dao/UserDao.xml"/>
</mappers>
第二种:适用于“接口式”的开发方式
<mappers>
<!--resource指定映射文件的全路径+映射文件名-->
<mapper resource="com/example/mybatiscrud/dao/UserDao.xml"/>
<mapper resource="com/example/mybatiscrud/dao/RoleDao.xml"/>
<!--class指定接口文件的全路径 + 接口文件名-->
<mapper class="com.emample.mybatiscrud.dao.UserDao"/>
</mappers>
第三种:package配置方式
<mappers>
<!--resource指定映射文件的全路径+映射文件名-->
<mapper resource="com/example/mybatiscrud/dao/UserDao.xml"/>
<mapper resource="com/example/mybatiscrud/dao/RoleDao.xml"/>
<!--name为存放接口文件的全路径 + 包名-->
<package name="com.emample.mybatiscrud.dao"/>
</mappers>
前面两种配置方式都需要,没创建一个新的Mapper就需要注册一次
而是用package则不用