mybatis3.0-[topic10-14] -全局配置文件_plugins插件简介/ typeHandlers_类型处理器简介 /enviroments_运行环境 /多数据库支持/mappers_sql映射注册

mybatis3.0-全局配置文件_   下面为中文官网解释

/plugins插件简介     目前了解即可

插件(plugins) 
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:

Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
这些类中方法的细节可以通过查看每个方法的签名来发现,或者直接查看 MyBatis 发行包中的源代码。

/typeHandlers_类型处理器简介   目前了解即可

 

无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,
都会用类型处理器将获取的值以合适的方式转换成 Java 类型。下表描述了一些默认的类型处理器。 提示 从 MyBatis
3.4.5 (JDK1.8) 开始,MyBatis 默认支持 JSR-310(日期和时间 API) 。

/enviroments_运行环境     <--4 -->

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。
例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库, 想使用相同的 SQL 映射。许多类似的用例。

不过要记住:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。
事务管理器(transactionManager)
数据源(dataSource)

/多数据库支持      <--5 -->

/mappers_sql映射注册      <--6 -->

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。
但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。
Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。

你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。

笔记要点


出错分析与总结

使用包名的批量注册, conf下的com.dao 和src下的com.dao目录一直,也更加好看,
相当于把conf下的com.dao 的在物理位置上放到了src下的com.dao目录. 全局配置的mappers中添加:
<package name="com.dao"/>

推荐:比较重要的, 复杂的Dao 接口我们来写sql映射文件;
不重要的,简单的Dao接口为了开发快速可以使用注解;

全局配置文件 mybatis.xml

<?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>
    <properties resource="dbconfig.properties"></properties>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <!--.typeAliases : 别名处理器,可以为我们的java类的类型起别名 -->
    <typeAliases>
        <package name="com.bean"/>
    </typeAliases>

    <!-- 4.environments; 环境,mybatis可以配置多个环境,
        environments:配置一个具体的环境信息,必须有以下两个标签:
            transactionManager: 事务管理器;
                    在 MyBatis 中有两种类型(也就是 type=”[JDBC|MANAGED]”):
                        Spring中会自动覆盖;

            dataSource:数据源的type类型;
                有三种内建的数据源类型(也就是 type=”[UNPOOLED|
                        POOLED|
                        JNDI]
                 自定义数据源:实现DatasourceFactory接口即可,
        -->
    <environments default="development">
            <!--测试环境-->
        <environment id="test">
            <transactionManager type="JDBC"></transactionManager>
            <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="123456"/>
            </dataSource>
        </environment>
            <!--开发环境-->
        <environment id="development">
            <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="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--
        5.databaseIdProvider : 支持多数据库厂商;
            type="DB_VENDOR" ,
            作用就是得到数据库厂商的标识(驱动:getDatabaseProductName()).mybatis
            -->
    <databaseIdProvider type="DB_VENDOR">
        <property name="SQL Server" value="sqlserver"/>
        <property name="DB2" value="db2"/>
        <property name="MySQL" value="mysql"/>
        <property name="Oracle" value="oracle" />
    </databaseIdProvider>
        <!--6. 将我们写好的sql映射文件{EmployeeMapper.xml},
        一定要注册到本全局配置文件{mybatis-config.xml}中-->
    <mappers>
        <!--
            一个mapper; 注册一个sql映射!
            resource: 引用类路径下的sql映射文件,
                   eg: resource="EmployeeMapper.xml"/>
            或完全限定资源定位符:引用网络路径或者磁盘路径下的sql映射文件(包括 file:/// 的 URL),
                   eg:<mapper url="file:///var/conf/*********.xml"/>
            或类名(使用映射器接口实现类的完全限定类名):
                注册接口:class,引用注册接口.
                        1.有sql映射文件
                        2,没有sql映射文件,所有的sql都是利用注解进行;
                        eg:    <mapper class="com.dao.EmployeeMapperAnnotation"/>
            批量注册: 包名(将包内的映射器接口实现全部注册为映射器):

            推荐:比较重要的, 复杂的Dao 接口我们来写sql映射文件;
                不重要的,简单的Dao接口为了开发快速可以使用注解;
            -->
        <package name="com.dao"/>

    </mappers>
</configuration>

工程组织


测试代码

使用注解,建立EmployeeMapperAnnotation接口, 并加上注解

@Select("select * from tbl_employee where id=#{id}")

 :

package com.dao;

import com.bean.*;
import org.apache.ibatis.annotations.Select;

public interface EmployeeMapperAnnotation {
    @Select("select * from tbl_employee where id=#{id}")
    public Employee getEmpById(Integer id);
}

测试类:test_tp14    测试成功

package com.test;

public class test_tp14 {
    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream=Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }
    @Test
    public void test02() throws IOException{
        SqlSession openSession = getSqlSessionFactory().openSession();

        try {
            EmployeeMapperAnnotation mapper=openSession.getMapper(EmployeeMapperAnnotation.class);
            Employee empById = mapper.getEmpById(1);
            System.out.println(empById);
        } finally {
            openSession.close();
        }
    }

}

上个博客的 测试类:test_tp04    也测试成功

package com.test;
import com.bean.*;
import com.dao.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

/**接口式编程:
 * 1.  原生: Dao 接口-->Dao接口的实现类
 *   mybatis: Mapper --> 有一个与之对应的 XXMapper.xml
 * 2. SqlSession
 *      代表与数据库的一次会话,用完必须关闭资源;
 *3.SqlSession 和connection 一样都是非线程安全,不能声明为全局变量;
 *         每次使用都需要重新生命.
 * 4.mapper接口没有实现类, 但是mybatis 会为这个接口生成一个代理对象:
 *        (需要先将接口和XML文件进行绑定!)
 *        EmployeeMapper empMapper=openSession.getMapper(EmployeeMapper.class);
 *  5.两个重要的配置文件:
 *      mybatis的全局配置文件: 包含数据库连接池信息,事物管理器信息,系统文件的信息.....
 *      SQL映射文件: 保存了每一个SL语句的映射信息,
 */
public class Test_tp04 {
    //创建一个模板,直接返回一个新建的SqlSessionFactory
    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream=Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }
    @Test          //第四节测试,测试接口式编程
    public void test01() throws IOException{
        //1.获取sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();  //调用模板的方法

        //2.获取一个SqlSession对象
        SqlSession openSession = sqlSessionFactory.openSession();

        try {
            //3.获取接口的实现类
            EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class);
            Employee employee = mapper.getEmpById(1);
            System.out.println("mapper.getClass(): "+mapper.getClass());
            System.out.println(employee);
        } finally {
            openSession.close();
        }
    }
}
View Code


测试结果

DEBUG 11-27 18:20:35,719 ==>  Preparing: select * from tbl_employee where id=?   (BaseJdbcLogger.java:145) 
DEBUG 11-27 18:20:35,736 ==> Parameters: 1(Integer)  (BaseJdbcLogger.java:145) 
DEBUG 11-27 18:20:35,748 <==      Total: 1  (BaseJdbcLogger.java:145) 
Employee{id=1, lastname='tom', email='[email protected]', gender='0'}

猜你喜欢

转载自www.cnblogs.com/zhazhaacmer/p/10028168.html