/// <summary>
/// CacheKeyHelper
/// </summary>
public class CacheKeyHelper
{
/// <summary>
/// 域名
/// </summary>
const string DomainName = "App"; /// <summary>
/// 当前类型
/// </summary>
private static readonly Type CurrentType = typeof (CacheKeyHelper); /// <summary>
/// 获取缓存Key
/// </summary>
/// <param name="detailCacheKey">PartialCacheKey</param>
/// <returns></returns>
public static string GetCacheKey(string detailCacheKey)
{
MethodBase mb = GetCaller();
if (mb != null && mb.DeclaringType != null)
{
return string.Format("{0}:{1}:{2}:{3}_{4}", DomainName, mb.DeclaringType.Namespace, mb.DeclaringType.Name, mb.Name, detailCacheKey.Md5());
} return string.Format("{0}_{1}", DomainName, detailCacheKey.Md5());
} /// <summary>
/// 获取缓存Key
/// </summary>
/// <param name="reqObj">reqObj</param>
/// <param name="properties">properties</param>
/// <returns>PartialCacheKey</returns>
public static string GetCacheKey<T>(T reqObj, IEnumerable<string> properties) where T : class
{
return GetCacheKey(string.Join("_", properties.Select(p => reqObj.GetPropertyValue(p, "null").ToString())));
} /// <summary>
/// 获取缓存Key
/// </summary>
/// <param name="reqObj">reqObj</param>
/// <returns>PartialCacheKey</returns>
public static string GetCacheKey<T>(T reqObj) where T : class
{
return GetCacheKey(reqObj, typeof(T).GetProperties().Where(p => p.CanRead).Select(q => q.Name));
} /// <summary>
/// 获得非本类的直接调用者
/// </summary>
/// <returns></returns>
private static MethodBase GetCaller()
{
var ss = new StackTrace(false);
var currentClass = ss.GetFrame().GetMethod().DeclaringType;
MethodBase mb = null;
var level = ;
while (true)
{
//index:0为本身的方法;1为调用方法;2为其上上层,依次类推
mb = ss.GetFrame(level).GetMethod();
if (mb.DeclaringType == null)
{
break;
} if (mb.DeclaringType != CurrentType)
{
break;
} level++;
} return mb;
}
}

自动生成缓存Key值的CacheKeyHelper的更多相关文章

  1. DAO以及获取自动生成主键值

    package com.alibaba.sql; import java.lang.reflect.InvocationTargetException; import java.sql.Connect ...

  2. JAVA中自定义扩展Swagger的能力,自动生成参数取值含义说明,提升开发效率

    大家好,又见面了. 在JAVA做前后端分离的项目开发的时候,服务端需要提供接口文档供周边人员做接口的对接指导.越来越多的项目都在尝试使用一些基于代码自动生成接口文档的工具来替代由开发人员手动编写接口文 ...

  3. JavaWeb学习记录(二十四)——获取插入数据后,自动生成的id值

    public Integer insertObjects(final Goods entity) { // 定义sql语句        final String sql1 = "inser ...

  4. Vertica系列: 自动生成Identity 字段值的方法

    参考 https://thisdataguy.com/2015/01/05/vertica-some-uses-of-sequences/ 在 vertica 中有三种定义 identity 字段的方 ...

  5. 【转】Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码

    Intellij IDEA 14 作为Java IDE 神器,接触后发现,非常好用,对它爱不释手,打算离开eclipse和myeclipse,投入Intellij IDEA的怀抱. 然而在使用的过程中 ...

  6. idea使用generator自动生成model、mapper、mapper.xml(转)

    原文链接:http://www.mamicode.com/info-detail-445217.html TEP 0.在Intellij IDEA创建maven项目(本过程比较简单,略) STEP 1 ...

  7. IDEA 中使用MyBatis-generator 自动生成MyBatis代码

    0.在Intellij IDEA创建maven项目 1. 在maven项目的pom.xml 添加mybatis-generator-maven-plugin 插件 <build> < ...

  8. MyBatis Generator 自动生成的POJO对象的使用(一)

    MyBatis Generator 会自动生成以下几种类型的对象(除非你使用MyBatis3DynamicSql 的运行环境): Java Model Objects(总是生成) SQL Map Fi ...

  9. DB2_自动生成值

    生成数字序列的两种方法 在 DB2 中可以用两种方法自动生成一个数字序列: 定义带有 IDENTITY 属性的列. 创建 SEQUENCE 对象. IDENTITY 列 当用 IDENTITY 属性定 ...

随机推荐

  1. 解决在Python中使用Win32api报错的问题,No module named win32api

    一.系统环境 操作系统: Win7 64位 Python:3.7.0 二.在使用import win32api时,报错:No module named win32api 网上查到有下面解决办法: 方法 ...

  2. mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置

    n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...

  3. 基于unittest测试框架的扩展

    1 unittest介绍 Unittest,Python自带的单元测试框架,PyUnit类包含TestResult,TestCase, TestSuite,TextTestResult,TextTes ...

  4. Unix基本系统数据类型和stat结构体

    Unix基本系统数据类型 历史上,某些UNIX变量已与某些C数据类型联系在一起,例如,历史上主.次设备号存放在一个1 6位的短整型中, 8位表示主设备号,另外8位表示次设备号.但是,很多较大的系统需要 ...

  5. scala _ parameter

    Given that sequence, use reduceLeft to determine different properties about the collection. The foll ...

  6. Django rest_framework----认证,权限,频率组件

    认证 from rest_framework.authentication import BaseAuthentication from rest_framework.exceptions impor ...

  7. jqgrid常用操作

    .jqgrid控件列在需要的地方加上edittable=true <asp:JQGrid runat=" DataUrl="/ccr/CcrCompanyPromoterMa ...

  8. Shiro——认证

    引入shiro依赖 <!-- shiro --> <dependency> <!-- shiro-core Required in all environments. - ...

  9. SEO网站结构优化

    结构布局优化:用扁平化结构(层次结构超过三层小蜘蛛就不愿意爬了) 控制首页链接数量(中小网站100以内,页面导航.底部导航.锚文字链接等) 扁平化的目录层次(小蜘蛛跳转3次可以到达网站内任何一个内页, ...

  10. Jackson Streaming API to read and write JSON

    Jackson supports read and write JSON via high-performance Jackson Streaming APIs, or incremental mod ...