• mybatis多参数传递,延迟加载,缓存,注解开发


    1、Mybatis的多参数传递方式

    需求:更具id 和 名字查询用户:
    select * from user where id = ? and name = ?;

    1):QueryVo 或者 User : JavaBean
    2)顺序传参(有误)
    3)@Param:表示,sql语句中,#{}中填写的值
    User findUserByIdName(@Param("id") int id, @Param("username") String name);
    4)Map传参
    取值:#{}中是map的key值
    select * from user where id = #{id} and username = #{username}


    2、Mybatis的延时加载

    延时加载:按需加载,懒加载

    问题:在用户和账户的关系中:1对多
    1个用户可能存在多个账户
    在查询用户的同时把用户对应的账户也查询出来

    解决问题:用户下的账户信息 什么时候使用 什么时候加载

    表关系:多对1 ,1对1
    一对多,多对多

    1对1 : 根据账户查询用户

    1、修改账户的映射配置文件、
    2、修改核心配置文件:打开延迟加载
    3、修改sql语句

    1对多:根据用户查询账户

    1、修改账户的映射配置文件、
    2、修改sql语句

    3、mybatis的缓存
    //重点
    什么是缓存
    存在于内存中的临时数据
    为什么要使用缓存
    减少和数据库的交互次数,提高执行效率
    什么样的数据能使用缓存
    经常查询不轻易改变
    数据的正确与否对最终结果影响不大

    //知道就好(redis)
    mybatis的一级缓存:
    缓存的是sqlsession对象。
    当我们执行查询以后,查询的寄过回同时存入到sqlsession为我们提供的一块区域中(Map)
    当我们再次查询相同数据的时候,mybatis会优先到sqlsession中查询是否存在,如果存在,直接拿来用
    当我们sqlsession消失,mybatis的一级缓存也就消失了

    清空一级缓存:
    sqlSession.close();
    sqlSession.clearCache();
    当sqlsession在执行updatdeleteinsert方法的时候 都会情况清空缓存

    mybatis的二级缓存:
    缓存的是sqlsessionFactory对象,由同一个SqlSessionFactory对象创建出来的sqlSession共享其缓存

    二级缓存步骤:
    1、mybatis支持二级缓存(SqlMapConfig.xml)
    <!-- 开启缓存 -->
    <setting name="cacheEnabled" value="true"></setting>
    2、配置映射文件,让映射文件支持二级缓存
    <cache></cache>
    3、修改当前操作 支持二级缓存
    <select id="findUser" resultMap="userMap1" useCache="true">

    4、mybatis注解开发

    1、curd操作
    2、多表操作
    1对1:查询账户及账户对应的用户信息
    @Select("select * from account")
    @Results(id="accountMap",value={
    @Result(id = true,column = "id",property = "id"),
    @Result(column = "uid",property = "uid"),
    @Result(column = "money",property = "money"),
    @Result(column = "uid",property = "user",one = @One(select = "com.xmcc.dao.AnnoUserDao.findById",fetchType = FetchType.LAZY))
    1对多:查询用户以及用户对应的账户信息
    @Select("select * from user")
    @Results(id="userMap",value = {
    @Result(id = true,column = "id",property = "id"),
    @Result(column = "username",property = "username"),
    @Result(column = "birthday",property = "birthday"),
    @Result(column = "sex",property = "sex"),
    @Result(column = "address",property = "address"),
    @Result(column = "id",property = "accounts",many = @Many(select = "com.xmcc.dao.AnnoAccountDao.findById",fetchType = FetchType.LAZY))


    二级缓存:


    @CacheNamespace(blocking=true)
    public interface AnnoUserDao {

  • 相关阅读:
    MAC记住 git的用户名密码
    webpack初学踩坑记
    __dirname和__filename和process.cwd()三者的区别
    webpack
    日期格式在ios中的兼容性
    php实现导出excel功能
    node 之koa项目学习
    nodejs之socket.io 私发消息和选择群组发消息
    nodejs之socket.io 聊天实现
    mongoDB基础语法
  • 原文地址:https://www.cnblogs.com/lyhhary/p/10511043.html
Copyright © 2020-2023  润新知