• mybatis(3)


    一,mybatis的延迟加载


    1,延迟加载

      在真正使用数据的时候才发起查询,不用的时候不查询,按需加载(懒加载)

    2,立即加载

      不管用不用,只要一调用,马上发起查询。

    3,四种表关系

      一对一,多对一:采用立即加载。

      一对多,多对多:懒加载。

    二,mybatis的缓存


     1,什么是缓存

      存在于内存中的临时数据

    2,为什么使用缓存

      减少和数据库的交互次数,提高执行效率。

    3,什么样的数据使用缓存

      使用于缓存:

        经常查询且不经常改变的。

        数据的正确与否最终的结果影响不大

      不适用于缓存: 

        经常改变的数据

        数据的正确与否对数据的影响很大

    4,Mybatis中的一级缓存:

      指的是mybatis中的SqlSession对象的缓存

      当执行查询后,查询的结果会同时存入到SqlSession为我们提供的一块区域中。

      该区域的结构是一个Map,当我们再次查询同样的数据,mybatis会先去SqlSession中查询是否有,有直接拿出来使用。

      当SqlSession对象消失时,mybatis的一级缓存也就消失了。

      注意:1,一级缓存:使用的是同一个对象

          2,SqlSession范围的缓存,当调用SqlSession的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存

    <!-- mybatis开启支持延迟加载 -->
             <setting name="lazyLoadingEnabled" value="true"/>
         
         </settings>
    <mapper namespace="com.dao.Load">
    
        <!-- 定义account和user的resultMap -->
            <resultMap type="account" id="accountUserMap">
            <id property="id" column="id"></id>
            <result property="uid" column="user_id" ></result>
            <result property="money" column="money" ></result>
            <!--  -->
            <association property="user" column="user_id" javaType="user" select="com.dao.IUserDao.findById">
            </association> 
            </resultMap>
    
        <!-- 一对一,或者多对一  配置查询所有  -->
            <select id="findAll" resultMap="accountUserMap">
                    select  * from my_account;
            </select>
            
            
            
    
    </mapper>

    5,二级缓存

       5.1定义:指的是Mybatis中SqlSessionFactory对象的缓存,有同一个SqlSessionFactory对象创建的

          SqlSession共享其缓存

       5.2步骤:

        第一步:让mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)

    <settings>
         <!-- mybatis开启二级缓存 -->
             <setting name="cacheEnabled" value="true"/>
         
         </settings>

        第二部:让当前的映射文件支持二级缓存(在当前的映射文件中配置)

    <!-- 开启二级缓存 -->
        <cache/>

        第三步:让当前的操作支持二级缓存(在select标签中配置)

         

    <select id="findAll" resultMap="accountUserMap" useCache="true">
                    select  * from my_account;
            </select>

        5.3:注意:二级缓存中存放的是数据不是对象。实际:访问二级缓存时是获取对象的数据,创建一个对象。

    三,mybatis中的注解开发

    针对crud一共有4个注解@Select ,@Insert ,@Update ,@Delete

    1,@Select(value="查询语句")//当只有一个参数时可以省略不写value

    public interface IUserDao {
        //针对crud一共有4个注解@Select
        @Select("select * from user")
        public List<User> findAll();
        @Insert("insert into user(name) values(#{name})")
        void saveUser(User user);//#{}里面的变量是对应的形参的属性名
        
        @Update("update user set name=#{name} where id=#{id} ")
        void updateUser(User user);
        
        @Delete("delete from user where id=#{id}")
        void deleteUser(Integer id);
        
        @Select("select * from user where id=#{id}")
        User findById(Integer id);
        
        //数据库和对应的表不能对应上
        @Select("select * from user")
        @Results(id="userMap",value = {
                @Result(id=true,column = "id",property = "userId"),
                @Result(column = "name",property = "userName"),
        })
        List<TUser> findTUser();
        
        
    
        @Select("select * from user where id=#{id}")
        @ResultMap(value = {"userMap"})
        TUser findByIdTUser(Integer id);
    
        
        
    }

    注意:results中的id属性用于给他们标号,便于迁移使用。避免重复代码。

    注意:当注解和配置文件的形式都存在时,无论主文件是采取resource或class的形式,都会报错

  • 相关阅读:
    执行预定义命令
    利用jemalloc优化mysql
    ssh增加密匙登录
    vsftpd增加ssl安全验证
    利用脚本获取mysql的tps,qps等状态信息
    innodb_buffer_pool_size 大小建议
    linux多核cpu下的负载查看
    DDoS deflate+iptables防御轻量级ddos攻击
    CentOS通过日志反查入侵
    shell读取文件每行,并执行命令
  • 原文地址:https://www.cnblogs.com/gjx1212/p/14705158.html
Copyright © 2020-2023  润新知