• Spring相关技术记录


    @ResponseStatus(value=)

    Hibernate
    OneToOne:
    使用optional=false,才能使用lazy
    如果关联字段是当前表的主键,我试了不加optional=false,lazy也生效,如果不使用lazy, 默认会使用left out join 来查询

    @Column(nullable=false)
    is an instruction for generating the schema. The database column generated off the class will be marked not nullable in the actual database.
    optional=false
    is a runtime instruction. The primary functional thing it does is related to Lazy Loading. You can't lazy load a non-collection mapped entity unless you remember to set optional=false (because Hibernate doesn't know if there should be a proxy there or a null, unless you tell it nulls are impossible, so it can generate a proxy.)

    Session:
    长session应用性能影响并不大,如果不进行数据库操作,session不会获取jdbc连接, hibernate建议每个请求对应一次session
    使用vo封装视图层需要的数据与openSessionInView各有优势,可以视情况使用,使用vo时,可以用Hibernate.initialize()或者用fetch查询出关联数据填充vo
    使用ThreadLocalSessionContext策略,Hibernate的Session会随着getCurrentSession()方法自动打开,并随着事务提交自动关闭。
    Session的打开关闭并意味着JDBC连接的打开关闭,创建Session时,并不会打开与数据库的连接,只有需要进行数据库操作时,才会获取JDBC连接
    一级缓存是session级别,二级缓存将缓存所有访问过的实体,查询缓存缓存特定的数据

    FetchMode:
    不设置,默认为FetchMode.SELECT, 可以使用Lazy,会有n+1问题
    FetchMode.JOIN - 采用外联,用一条sql取出关联数据,lazy无效
    FetchMode.SUBSELECT- 生成两条sql, 第二条用in去查询关联数据
    fetch_size - 设置批量查询的条数,和SUBSELECT类似,用in查询关联数据,生成多少sql取决于关联的数据量,默认是10,一般设置为50-100为佳
    batch_size - 批量删除、更新、插入的量,一般设置为50-100为佳
    max_fetch_depth - 外连接抓取深度,设置为0-3为佳

    测试感觉OneToMany应用FetchMode.JOIN无效,需要进一步验证

  • 相关阅读:
    微信小程序 request请求封装
    JavaScript中使用比较多的两种创建对象的方式
    angularjs中audio/video 路径赋值问题
    ajax渲染swiper问题
    angularjs与vue循环数组对象是区别
    gulp安装搭建前端项目自动化
    vue中-webkit-box-orient:vertical打包放到线上不显示
    Redis高级客户端Lettuce详解
    redis单点、redis主从、redis哨兵 sentinel,redis集群cluster配置搭建与使用
    Java线程、线程池ThreadPoolExecutor详细剖析
  • 原文地址:https://www.cnblogs.com/firejava/p/7550326.html
Copyright © 2020-2023  润新知