MyBatis复习二

配置数据库
驼峰命名,开启日志,定义别名,配置路径,开启二级缓存
properties里面的数据
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
dbuser=root
dbpassword=123456

<!--    要加载数据库的资源文件,然后在数据库的连接池的配置中可以使用-->
    <properties resource="db.properties"/>

    <settings>
        <!--     开启二级缓存   -->
        <setting name="cacheEnabled" value="true"/>
<!--    支持驼峰式命名规范,数据库里面式first_name,而User中式firstName 驼峰形式-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
<!--        日志-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

<!--    给User全类名,起一个别名,方便我们使用,别名不区分大小写-->
    <typeAliases>
        <typeAlias type="com.haina.mybatis.model.User" alias="user"/>
<!--        该包下的所有类的别名,都是类名-->
<!--        <package name="com.haina.mybatis.model"/>-->
<!--        以上这两条不能混着用,只能用一个,要不就乱套了-->
    </typeAliases>

    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"></transactionManager>

            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${dbuser}"/>
                <property name="password" value="${dbpassword}"/>
            </dataSource>
        </environment>
    </environments>

<!--    告诉mybatis 要加载得xml得路径在哪-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

Mybatis缓存机制
把相同条件的查询,合并成一个。
数据库的数据存储在硬盘中,程序运行过程中变量的值,对象的值式存储在内存中(堆)
出现过就放在内存中,
缓存的作用:就是加快我们程序的运行效率。

一级缓存(本地缓存):
特点:默认开启,声明周期短(不会占用太多的控件),session,会话开启到会话关闭就失效
sqlSession级别的缓存。一级缓存是一直开启的;SqlSession级别的一个Map,与数据库同一次会话期间的查询到的数据会放在本地缓存中。以后如果需要获取相同的数据,直接从缓存中拿,不会再去查询数据库。

一级缓存失效:
(1)openSession不同
(2)open Session相同,单查询条件不同s
(3) openSession相同,查询条件不同,两次查询间执行过增删改操作
(4)一级缓存呗清空,openSession.clearCache()

二级缓存(全局缓存):
特点:全局缓存(相当于dao级别的缓存),声明周期比较长(可以跨session),不能存放过多的数据。
占用空间大,所以要有限定条件加以控制。
基于namespace级别的缓存:一个namespace对应一个二级缓存;
原理:一个会话,查询一条数据,这个数据就会被放在当前会话的一级缓存中;如果会话关闭;一级缓存中的数据会被保存到二级缓存中;新的会话查询信息,就可以参照二级缓存中的内容;而不同Mapper有不同的namespace,那么由不同Mapper经过查询产生的数据,就会存储到不同的缓存区域(Map)

核心配置文件中加入

<setting name="cacheEnabled" value="true"/>
在sql语句中
<!--            表示这个方法要使用缓存 加useCache="true"-->
    <select id="selectById" resultType="USER" useCache="true">
        select*from user where id = #{id}
    </select>

序列化异常: implements Serializable,缓存的存储,就会出现序列化,反序列化

缓存的意义:缓存到本地内存种,先查缓存在查数据库

MyBatis:xml文件和注解两种形式,注解可以用一个条件查询
xml虽然麻烦一点但是比较灵活

缓存刷新,在UserMapper.xml中

    <cache>
        <property name="eviction" value="LRU"/>
<!--        缓存刷新 10-->
        <property name="flushInterval" value="10"/>
<!--        大小-->
        <property name="size" value="10"/>
    </cache>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值