写在前边: 今天给大家讲解Mybatis中的全局配置文件的相关用法及配置!
公众号:小白编码
目录
Mybatis全局配置文件
配置文件配置项顺序:
properties→settings→typeAliases→typeHandlers→objectFactory→objectWrapperFactory→reflectorFactory→plugins→environments→databaseIdProvider→mappers。
properties标签
<properties></properties>
标签:
在配置文件内配置数据库环境,可以通过外部的properties配置文件引入信息。
标签属性:
resource:引入类路径下的资源:如果在某包下:cn/codewhite/xxxxx
url:引入网络路径或者磁盘路径下的资源
<!--properties标签-->
<properties resource="jdbconfig.properties"></properties>
<!--配置环境-->
<environments default="dev_mysql">
<!--配置mysql的环境,可以配置多个数据库-->
<environment id="dev_mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置连接数据库的4个基本信息-->
<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>
properties:
jdbc.username=root
jdbc.password=123
jdbc.url=jdbc:mysql://localhost:3306/eesy_mybatis
jdbc.driver=com.mysql.jdbc.Driver
settings标签
<settings></settings>
标签:
settings包含很多重要的设置项
setting:用来设置每一个设置项
name:设置项名
value:设置项取值
驼峰命名开启
驼峰命名对应开启:mapUnderscoreToCamelCase
在我的数据库表中姓名命名为:last_name,而在JavaBean中:lastName
在不使用别名的情况下,没有开启驼峰命名它就无法封装信息:
如何开启:全局配置文件中加入settings
配置:mapUnderscoreToCamelCase
为true
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
typeAliases别名处理器
typeAliases:别名处理器:可以为我们的java类型起别名,别名不区分大小写
全局配置文件:
1、typeAlias:为某个java类型起别名
type:指定要起别名的类型全类名;默认别名就是类名小写;employee
alias:指定新的别名
2、package:为某个包下的所有类批量起别名
name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写))
3、批量起别名的情况下,使用@Alias注解为某个类型指定新的别名
<typeAliases>
<!--type给指定的类起别名,如果没有写alias指定,
那么默认别名为该类名的全小写employee
alias:指定新的别名
-->
<!--<typeAlias type="cn.codewhite.pojo.Employee" alias="emp"></typeAlias>-->
<!-- package:为某个包下的所有类批量起别名
name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写),)
-->
<package name="cn.codewhite.pojo"/>
</typeAliases>
批量起别名,使用@Alias注解为某个类型指定新的别名
@Alias("emp)
public class Employee implements Serializable {
别名使用:在sql关系映射文件中使用别名
<!-- List<Employee> getAllEmp();-->
<select id="getAllEmp" resultType="emp">
select * from tbl_employee
</select>
注意事项: 在使用注解别名的时候,必须要开启批量别名模式,否则报错。
environments标签
environments
标签:环境,mybatis可以配置多种环境 ,default指定使用某种环境。可以达到快速切换环境。
transactionManager
事务管理器
type事务管理器的类型
1.JDBC
(JdbcTransactionFactory):使用JDBC的方式进行事务的回滚以及提交等
2.MANAGED
(ManagedTransactionFactory):使用JEE服务器容器的方式进行事务控制,
其实是两个别名,这里一般用Spring来配置
自定义事务管理器:实现TransactionFactory接口.type指定为全类名。
dataSource
数据源:
type
:数据源类型
1.UNPOOLED
(UnpooledDataSourceFactory):不使用连接池技术,从数据库拿连接
2.POOLED
(PooledDataSourceFactory):使用数据库连接池技术
3.JNDI
(JndiDataSourceFactory)使用JNDI连接技术
可以自定义德鲁伊,C3P0数据库连接池等
自定义数据源:实现DataSourceFactory接口,type是全类名
其实在Configuration中定义的都是别名:
<!--配置环境,default使用mysql环境-->
<environments default="dev_mysql">
<!--配置mysql的环境,可以配置多个数据库-->
<environment id="dev_mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<!--配置连接数据库的4个基本信息-->
<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="dev_oracle">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${orcl.driver}" />
<property name="url" value="${orcl.url}" />
<property name="username" value="${orcl.username}" />
<property name="password" value="${orcl.password}" />
</dataSource>
</environment>
</environments>
databaseIdProvide标签
databaseIdProvide
支持多数据库厂商的,作用就是得到数据库厂商的标识
type="DB_VENDOR"
:VendorDatabaseIdProvider (驱动getDatabaseProductName()),
mybatis就能根据数据库厂商标识来执行不同的sql;
一般是:
MySQL,Oracle,SQL Server
全局配置文件设置:
<databaseIdProvider type="DB_VENDOR">
<!-- 为不同的数据库厂商起别名 -->
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
</databaseIdProvider>
在sql映射文件中,输入databaseId="别名"指定使用的数据库:
<!-- List<Employee> getAllEmp();-->
<select id="getAllEmp" resultType="emp" databaseId="mysql">
select * from tbl_employee
</select>
默认加载所有不带规则的SQL语句,如果当前是mysql,一般加载更精确的sql语句,(指的是标识)
mappers标签映射注册
<mappers></mappers>
标签映射注册:在全局配置文件中注册。
mapper
标签:注册一个sql映射
注册配置文件方式:
resource
:引用类路径下的sql映射文件,如:mybatis/mapper/EmployeeMapper.xml
url
:引用网路路径或者磁盘路径下的sql映射文件如:file:///var/mappers/AuthorMapper.xml
注册接口方式:
class
:引用(注册)接口,
1、有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;
2、没有sql映射文件,所有的sql都是利用注解写在接口上;
推荐:
比较重要的,复杂的Dao接口我们来写sql映射文件
不重要,简单的Dao接口为了开发快速可以使用注解.
将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中
全局配置文件:(注册方式选一种就好)
<!-- 告知mybatis映射配置的位置 -->
<mappers>
<!-- 注册单个映射配置文件-->
<!-- <mapper resource="cn/codewhite/dao/EmployeeMapper.xml"/>-->
<!-- 注册接口模式,有sql映射文件的情况-->
<!-- <mapper class="cn.codewhite.dao.EmployeeMapper"/>-->
<!-- 注册接口,没有关系映射文件,但是有注解的方式-->
<!-- <mapper class="cn.codewhite.dao.EmployeeMapperAnnotation"/>-->
<!-- 批量注册:注册一个包下的所有映射 -->
<!-- 接口也会注册!注意,前提是接口和关系映射文件需要在同一个目录或包下-->
<package name="cn.codewhite.dao"/>
</mappers>
这里需要讲的是:
注册接口注解开发模式:
java代码: 写上注解
public interface EmployeeMapperAnnotation {
@Select("select * from tbl_employee where id = #{id}")
Employee getEmpById(Integer id);
}
注册接口模式:(有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;)
同一个包的概念:
下图这样属于同一个包。
在Maven工程中:其实这两个也是算同一个包内:
mybatis的映射配置文件位置必须和dao接口的包结构相同。
因为所有的文件都放在Bin目录下,只要我设置了3层目录,所以也等同于同一个目录
在idea中创建目录的时候,它和包是不一样的
包在创建时:com.itheima.dao它是三级结构
目录在创建时:com.itheima.dao是一级目录