zoukankan      html  css  js  c++  java
  • MyBatis全局配置文件标签详解

    一、全局配置文件结构

    configuration 配置
      properties 属性:可以加载properties配置文件的信息
      settings 设置:可以设置mybatis的全局属性
      typeAliases 类型命名
      typeHandlers 类型处理器
      objectFactory 对象工厂
      plugins 插件
      environments 环境
        environment 环境变量
          transactionManager 事务管理器
          dataSource 数据源
      databaseIdProvider 数据库厂商标识
      mappers 映射器

      1、为全局配置文件绑定dtd约束:
        1)联网会自动绑定
        2)没网的时候【/org/apache/ibatis/builder/xml/mybatis-3-config.dtd】:解压mybatis 的jar包然后在eclipse中绑定

            window——preperances——XML Catalog ——Add——设置key为http://mybatis.org/dtd/mybatis-3-config.dtd,绑定本地文件位置location:

      2、 properties属性

     1   <configuration>
     2     <!-- 
     3     1.mybatis可以使用properties来引入外部properties配置文件的内容
     4     resource:引入类路径下的资源
     5     url:引入网络路径或者磁盘路径下的资源
     6     -->
     7     <properties resource="jdbc.properties"></properties>
     8     <environments default="development">
     9       <environment id="development">
    10         <transactionManager type="JDBC"/>
    11         <dataSource type="POOLED">
    12           <property name="driver" value="${jdbc.driver}"/>
    13           <property name="url" value="${jdbc.url}"/>
    14           <property name="username" value="${jdbc.user}"/>
    15           <property name="password" value="${jdbc.passowrd}"/>
    16         </dataSource>
    17       </environment>
    18     </environments>
    19     <!-- 将我们写好的sql映射文件一定要注册到全局配置文件中 -->
    20     <mappers>
    21     <mapper resource="EmployeeMapper.xml"/>
    22     </mappers>
    23   </configuration>

      3、settings包含很多重要的设置项

        setting:用来设置每一个设置

        name:设置项名

        value:设置项取值

      举例:驼峰式命名

    1   <settings>
    2     <setting name="mapUnderscoreToCamelCase" value="true"/>
    3   </settings>

        1).mapUnderscoreToCamelCase:自动完成数据表标准列名和持久化类标准属性名之间的映射。

          例如:last_name和lastName

      4、typeAliases:给类起别名【不建议大家使用别名】

        作用:A type alias is simply a shorter name for a Java type

     1   <!-- typeAliases:别名处理器,可以为我们的java类型起别名,别名不区分大小写 -->
     2   <typeAliases>
     3     <!-- typeAlias:为某个java类型起别名
     4     type:指定要起别名的类型全类名;默认别名就是类名小写;
     5     alias:执行新的别名
     6     -->
     7     <typeAlias type="com.neuedu.mybatis.bean.Employee"/>
     8     <!-- 
     9     package:为某个包下的所有类批量起别名
    10     name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名【类名小写】)
    11     -->
    12     <package name="com.neuedu.mybatis.bean"/>
    13     <!-- 批量起别名的情况下,使用@Alias注解为某个类型指定新的别名 -->
    14   </typeAliases>

      虽然有这么多的别名可以使用:但是建议大家还是使用全类名,看SQL语句是怎么被封装为JAVA 对象的时候简单!

      5、typeHandlers:类型处理器

          类型处理器:负责如何将数据库的类型和java对象类型之间转换的工具类

      6、environments【用于配置MyBatis的开发环境】

          environments:环境们,mybatis可以配置多种环境,default指定使用某种环境。可以达到快速切换环境。

            environment:配置一个具体的环境信息;必须有两个标签;id代表当前环境的唯一标识

              transactionManager:事务管理器

                type:事务管理器的类型;type="[JDBC|MANAGED]"),这两个都是别名,在Configuration类中可以查看具体类!但是Spring对事务的控制才是最终的管理方案!

                JDBC:这个配置就是直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务。

                MANAGED:这个配置几乎没做什么,它从来不提交和回滚一个连接。而是让容器来管理事务的整个生命周期。

                所以综上:这里如果要配置事务处理器,就配置为JDBC。表示使用本地的JDBC事务。

                当然也可以自定义事务管理器:只需要和人家一样实现TransactionFactory接口,type指定为全类名。

              dataSource:数据源

                type:type="[UNPOOLED|POOLED|JNDI]"

                unpooled:无数据库连接池

                pooled:有数据库连接池

                JNDI:自定义数据源:实现DataSourceFactory接口,type也是全类名

            但是我们也说了,无论是事务管理器的配置还是数据源的配置我们都会使用spring来做,这里只需要了解一下即可!

     1   <environments default="development">
     2     <environment id="test">
     3       <transactionManager type="JDBC"/>
     4       <dataSource type="POOLED">
     5         <property name="driver" value="${test.driver}"/>
     6         <property name="url" value="${test.url}"/>
     7         <property name="username" value="${test.user}"/>
     8         <property name="password" value="${test.passowrd}"/>
     9       </dataSource>
    10     </environment>
    11     <environment id="development">
    12       <transactionManager type="JDBC"/>
    13       <dataSource type="POOLED">
    14         <property name="driver" value="${jdbc.driver}"/>
    15         <property name="url" value="${jdbc.url}"/>
    16         <property name="username" value="${jdbc.user}"/>
    17         <property name="password" value="${jdbc.passowrd}"/>
    18       </dataSource>
    19     </environment>
    20   </environments>

      补充:如何配置第三方数据源

        定制自己的第三方数据源,如下所示:

          要求:需要自定义一个类继承UnpooledDataSourceFactory类,然后在构造器中初始化该对应的dataSource属性,如下所示:

      自定义类为:

    1   public class C3P0DataSource extends UnpooledDataSourceFactory{
    2     public C3P0DataSource() {
    3       this.dataSource = new ComboPooledDataSource(); 
    4     }
    5   }

      MyBatis的全局配置文件为:

     1   <environments default="development">
     2        <environment id="development">
     3             <transactionManager type="JDBC"/>
     4             <!--<dataSource type="POOLED">
     5                 <property name="driver" value="${jdbc.driver}"/>
     6                 <property name="url" value="${jdbc.url}"/>
     7                 <property name="username" value="${jdbc.username}"/>
     8                 <property name="password" value="${jdbc.password}"/>
     9             </dataSource> -->
    10             <!-- 配置使用第三方的数据源。属性需要配置为第三方数据源的属性 -->
    11             <dataSource type="com.neuedu.mapper.C3P0DataSource">
    12                 <property name="driverClass" value="${jdbc.driver}"/>
    13                 <property name="jdbcUrl" value="${jdbc.url}"/>
    14                 <property name="user" value="${jdbc.username}"/>
    15                 <property name="password" value="${jdbc.password}"/>
    16             </dataSource>
    17          </environment>
    18   </environments>

      测试类:

     1   @Test
     2   public void test02(){
     3     //1.获取sqlSessionFactory对象
     4     SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
     5     //2.利用sqlSessionFactory对象创建一个SqlSession对象
     6     SqlSession session = sqlSessionFactory.openSession();
     7     System.out.println(session.getConnection());
     8     //提交事务
     9     session.commit();
    10   }

      当然这里需要加入c3p0的jar包;

        c3p0-0.9.2.1.jar

        mchange-commons-java-0.2.3.4.jar

      7、MyBatis的增删改查标签:

          <select></select>

          <insert></insert>

          <update></update>

          <delete></delete>
        例如:

    1   <insert id="saveEmployee">
    2     INSERT INTO tbl_employee(user_name,email,gender) VALUES(#{userName},#{email},#{gender})
    3   </insert>

      8、databaseIdProvider环境

        MyBatis is able to execute different statements depending on your database vendor. 

        ? MyBatis 可以根据不同的数据库厂商执行不同的语句

    1   <databaseIdProvider type="DB_VENDOR">
    2     <property name="SQL Server" value="sqlserver"/>
    3     <property name="DB2" value="db2"/>
    4     <property name="Oracle" value="oracle" />
    5     <property name="MySQL" value="mysql" />
    6   </databaseIdProvider>

        Type: DB_VENDOR

          –使用MyBatis提供的VendorDatabaseIdProvider解析数据库 厂商标识。也可以实现DatabaseIdProvider接口来自定义。

        Property-name:数据库厂商标识

        Property-value:为标识起一个别名,方便SQL语句使用

      这样在执行不同数据库的时候,就会执行不同数据库的语句了!

        databaseId属性:

          1).对于不同的数据库,做不同的SQL操作时,SQL语句会有不同。例如:

            MySQL和Oracle的分页[mysql分页为limit,而ORACLE分页我们使用rownumber]、插入主键的方式。

              MySQL:INSERT INTO tbl_employee(user_name,email,gender) VALUES(#{userName},#{email},#{gender})

              ORACLE:INSERT INTO employee(id,user_name,email) VALUES(test.seq.nextval,#{userName},#{email})

            所以要想使用ORACLE的自增序列还需要创建一个序列:

            如下所示:

              create sequence test_seq start with 1;

        这样做的好处:在service层只需要调用一个mybatis的方法,而不需要关注底层选择使用的数据库。

          employeeDao.insert(employee);

      mybatis如何区分使用的是哪个数据库呢?使用databaseId属性

        ①.在mybatis-config.xml文件中进行配置

    1   <databaseIdProvider type="DB_VENDOR">
    2     <property name="ORACLE" value="oracle"/>
    3     <property name="MySQL" value="mysql"/>
    4   </databaseIdProvider>

        ②.在mybatis的映射文件中使用databaseId来区分使用的是哪一个数据库

          在mybatis的全局配置文件配置了这个之后,我们只需要在sql映射文件中通过在执行语句的标签上加一个属性databaseId即可!

    1   <select id="getEmployeeById" resultType="emp">
    2     select * from tbl_employee where id = #{id}
    3   </select>
    4   <select id="getEmployeeById" resultType="emp" databaseId="mysql">
    5     select * from tbl_employee where id = #{id}
    6   </select>
    7   <select id="getEmployeeById" resultType="emp" databaseId="oracle">
    8     select * from tbl_employee where id = #{id}
    9   </select>

        全局配置文件

     1   <environments default="dev_mysql">
     2     <environment id="dev_oracle">
     3       <transactionManager type="JDBC"/>
     4       <dataSource type="POOLED">
     5         <property name="driver" value="${jdbc.oracle.driver}"/>
     6         <property name="url" value="${jdbc.oracle.url}"/>
     7         <property name="username" value="${jdbc.oracle.user}"/>
     8         <property name="password" value="${jdbc.oracle.passowrd}"/>
     9       </dataSource>
    10     </environment>
    11     <environment id="dev_mysql">
    12       <transactionManager type="JDBC"/>
    13       <dataSource type="POOLED">
    14         <property name="driver" value="${jdbc.driver}"/>
    15         <property name="url" value="${jdbc.url}"/>
    16         <property name="username" value="${jdbc.user}"/>
    17         <property name="password" value="${jdbc.passowrd}"/>
    18       </dataSource>
    19     </environment>
    20   </environments>

      9、mapper映射

        <!-- mappers:将sql映射注册到全局配置中 -->

           mapper:注册一个sql映射

          注册配置文件:

            resource:引用类路径下的sql映射文件:mybatis/mapper/EmployeeMapper.xml

            url:引用网络路径下或者磁盘路径下的sql映射文件:url="file:///var/mappers/AuthorMapper.xml"

        注册接口

          class:引用(注册)接口

            1.有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一个目录下;

            2.没有sql映射文件,所有的sql都是利用注解写在接口上;

          推荐:

            1.比较重要的,复杂的Dao接口我们来写sql映射文件

            2.不重要,见到的Dao接口为了开发快速可以使用注解

    1   <mappers>
    2     <mapper resource="mybatis/mapper/EmployeeMapper.xml"/>
    3     <mapper class="com.neuedu.mybatis.mapper.EmployeeMapperAnnotation"/>
    4     <!-- 批量注册:
    5       1.注解版肯定是没问题的
    6       2.但是对于Mapper.xml映射文件和接口分开的,就需要保证在同一个包下了,否则找不到 -->
    7     <package name="com.neuedu.mybatis.mapper"/>
    8   </mappers>

      10、最后就是全局配置文件中标签实际上是有顺序的!

  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/java-zmj/p/8075168.html
Copyright © 2011-2022 走看看