🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 19.6.2\. 数据记录(Metrics) Hibernate提供了一系列数据记录,其记录的内容包括从最基本的信息到与具体场景的特殊信息。所有的测量值都可以由 `Statistics`接口进行访问,主要分为三类: * 使用`Session`的普通数据记录,例如打开的Session的个数、取得的JDBC的连接数等; * 实体、集合、查询、缓存等内容的统一数据记录 * 和具体实体、集合、查询、缓存相关的详细数据记录 例如:你可以检查缓存的命中成功次数,缓存的命中失败次数,实体、集合和查询的使用概率,查询的平均时间等。请注意 Java中时间的近似精度是毫秒。Hibernate的数据精度和具体的JVM有关,在有些平台上其精度甚至只能精确到10秒。 你可以直接使用getter方法得到全局数据记录(例如,和具体的实体、集合、缓存区无关的数据),你也可以在具体查询中通过标记实体名、 或HQL、SQL语句得到某实体的数据记录。请参考`Statistics`、`EntityStatistics`、 `CollectionStatistics`、`SecondLevelCacheStatistics`、 和`QueryStatistics`的API文档以抓取更多信息。下面的代码则是个简单的例子: ``` Statistics stats = HibernateUtil.sessionFactory.getStatistics(); double queryCacheHitCount = stats.getQueryCacheHitCount(); double queryCacheMissCount = stats.getQueryCacheMissCount(); double queryCacheHitRatio = queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount); log.info("Query Hit ratio:" + queryCacheHitRatio); EntityStatistics entityStats = stats.getEntityStatistics( Cat.class.getName() ); long changes = entityStats.getInsertCount() + entityStats.getUpdateCount() + entityStats.getDeleteCount(); log.info(Cat.class.getName() + " changed " + changes + "times" ); ``` 如果你想得到所有实体、集合、查询和缓存区的数据,你可以通过以下方法获得实体、集合、查询和缓存区列表: `getQueries()`、`getEntityNames()`、 `getCollectionRoleNames()`和 `getSecondLevelCacheRegionNames()`。