Mybatis学习(三):Mybatis的全局配置文件及用法

写在前边: 今天给大家讲解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

在不使用别名的情况下,没有开启驼峰命名它就无法封装信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZsIF9wFa-1590116276176)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200515123534188.png)]

如何开启:全局配置文件中加入settings配置:mapUnderscoreToCamelCasetrue

<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中定义的都是别名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ENcVKD2c-1590116276177)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200521120539838.png)]

<!--配置环境,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映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;)

同一个包的概念:

下图这样属于同一个包。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u0dXuZkr-1590116276178)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200521131127862.png)]

在Maven工程中:其实这两个也是算同一个包内:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RcVvjlvK-1590116276179)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200521131352892.png)]

mybatis的映射配置文件位置必须和dao接口的包结构相同。

因为所有的文件都放在Bin目录下,只要我设置了3层目录,所以也等同于同一个目录

在idea中创建目录的时候,它和包是不一样的
包在创建时:com.itheima.dao它是三级结构
目录在创建时:com.itheima.dao是一级目录

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值