MyBatis相关介绍

1、MyBatis配置:
    mybatis配置项分别是:properties、settings、typeAliases、typeHandlers、plugins、environments、mappers,这些配置项必须按照先后顺序进行配置
    properties:        用于配置属性信息
    settings:            用于配置MyBatis的运行时方式
    typeAliases:      配置类型别名,可以在xml中用别名取代全限定名
    typeHandlers:   配置类型处理器
    plugins:             配置拦截器,用于拦截sql语句的执行
    environments:   配置数据源信息、连接池、事务属性等
    mappers:           配置SQL映射文件
    例:
        <property name="name1" value="value1"/>
        <property name="name2" value="value2"/>
        <property name="name3" value="value3"/>
        <property name="nameN" value="valueN"/>
        或:
        <properties resource="config.properties" />
        config.properties:
        name1:value1 
        name2:value2 
        name3:value2 
        nameN:valueN
        
        <settings>  
            <setting name="cacheEnabled" value="true" />  
            <setting name="lazyLoadingEnabled" value="true" />  
            <setting name="multipleResultSetsEnabled" value="true" />  
            <setting name="useColumnLabel" value="true" />  
            <setting name="useGeneratedKeys" value="false" />  
            <setting name="enhancementEnabled" value="false" />  
            <setting name="defaultExecutorType" value="SIMPLE" />  
        </settings>
        
        <typeAliases>
            <typeAlias alias="UserEntity" type="com.manager.data.model.UserEntity" />  
            <typeAlias alias="StudentEntity" type="com.manager.data.model.StudentEntity" />  
            <typeAlias alias="ClassEntity" type="com.manager.data.model.ClassEntity" />  
        </typeAliases>
        
        <mappers>  
            <mapper resource="com.manager.data.maps.UserMapper.xml" />  
            <mapper resource="com.manager.data.maps.StudentMapper.xml" />  
            <mapper resource="com.manager.data.maps.ClassMapper.xml" />  
        </mappers> 
        或:
        <mappers>
            <package name="com.manager.data.maps"/>
        </mappers>

2、MyBatis的主要成员:
    Configuration             MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中
    SqlSession                作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能
    Executor                    MyBatis执行器,是MyBatis调度的核心,负责SQL语句的生成和查询缓存的维护
    StatementHandler     封装了JDBC Statement操作,负责对JDBC statement的操作,如设置参数等
    ParameterHandler     负责对用户传递的参数转换成JDBC Statement所对应的数据类型
    ResultSetHandler      负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
    TypeHandler              负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换
    MappedStatement     MappedStatement维护一条<select|update|delete|insert>节点的封装
    SqlSource                  负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
    BoundSql                   表示动态生成的SQL语句以及相应的参数信息

3、mybatis执行器:
    什么是执行器?所有我们在应用层通过sqlSession执行的各类增删改查操作在做了动态sql和参数相关的封装处理后,都被委托给具体的执行器去执行,包括一、二级缓存的管理,事务的具体管理,Statement和具体JDBC层面优化的实现等等,所以执行器比较像是sqlSession下的各个策略工厂实现,用户通过配置决定使用哪个策略工厂
    mybatis提供了两种类型的执行器,缓存执行器与非缓存执行器(使用哪个执行器是通过配置文件中settings下的属性defaultExecutorType控制的,默认是SIMPLE)
        <settings>  
            <setting name="defaultExecutorType" value="REUSE" />  
        </settings>


    BaseExecutor:    BaseExecutor实现了大部分通用功能本地缓存管理、事务提交、回滚、超时设置、延迟加载等
    SimpleExecutor: 该执行器类型不做特殊的事情,它为每个语句的每次执行创建一个新的预处理语句
    ReuseExecutor:  该执行器类型会复用预处理语句
    BatchExecutor:   它是批量执行器


    CachingExecutor:
        缓存执行器相对于其他执行器的差别在于,首先是在query()方法中判断是否使用二级缓存,虽然mybatis默认启用了CachingExecutor,但是如果在mapper层面没有明确设置二级缓存的话,就退化为SimpleExecutor了

4、MyBatis缓存
    MyBatis提供查询缓存,用于减轻数据库压力,提高性能,MyBatis提供了一级缓存和二级缓存
        一级缓存是SqlSession级别的缓存,每个SqlSession对象都有一个哈希表用于缓存数据,不同SqlSession对象之间缓存不共享,同一个SqlSession对象执行2遍相同的SQL查询,在第一次查询执行完毕后将结果缓存起来,这样第二遍查询就不用向数据库查询了,直接返回缓存结果即可,MyBatis默认是开启一级缓存的(两次相同的查询之间,如果有数据的增删改,一级缓存自动失效)。

        二级缓存是mapper级别的缓存,二级缓存是跨SqlSession的,多个SqlSession对象可以共享同一个二级缓存,不同的SqlSession对象执行两次相同的SQL语句,第一次会将查询结果进行缓存,第二次查询直接返回二级缓存中的结果即可,MyBatis默认是不开启二级缓存的,可以在配置文件中使用如下配置来开启二级缓存

<settings>
    <setting name="cacheEnabled" value="true"/>
</settings>


Mapper映射文件中添加一行:

<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>


flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。 size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值是1024。 readOnly(只读)属性可以被设置为true或false。 
只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是false。

如果已经开启二级缓存的mapper里面某个查询不需要缓存,可以使用useCache=”false”禁用二级缓存:

<select id="selectById" resultMap="BaseResultMap" parameterType="java.lang.String" useCache="false">

    当SQL语句进行更新操作(删除/添加/更新)时,会清空对应的缓存,保证缓存中存储的都是最新的数据

5、mybatis拦截器:
    MyBatis允许在映射语句执行的某些点拦截方法调用,默认情况下,MyBatis允许插件(plugins)拦截下面的方法:
    Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
    ParameterHandler (getParameterObject, setParameters)
    ResultSetHandler (handleResultSets, handleOutputParameters)
    StatementHandler (prepare, parameterize, batch, update, query)
    如:
        @Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})
        public class PageInterceptor implements Interceptor {
            判断是否带分页参数
            查询总条数
            根据sql组装limit查询分页记录
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值