通用Mapper思路和方法

    /**
     * 1.先获取调用的方法com.jt.manage.mapper.ItemMapper.findTextCount()
     * 2.通过反射先获取com.jt.manage.mapper.ItemMapper
     * 3.获取当前类的父级接口
     * 4.判断父级接口是不是泛型
     * 5.从泛型中获取Item对象
     * 6.获取Item的@Table注解
     * 7.获取表的名称
     * 8.编写sql语句实现数据查询
     */
    public SqlNode TextFindCount(MappedStatement ms){
    try {
    //1.获取客户端调用的方法 com.jt.manage.mapper.ItemMapper.findTextCount()
    String methodPath = ms.getId();
   
    //2.获取ItemMapper的字符串
    String targetPath = methodPath.substring(0, methodPath.lastIndexOf("."));
   
    //3.获取ItemMapper对象
    Class<?> targetClass = Class.forName(targetPath);
   
    //4.获取ItemMapper的父级接口 由于接口是可以多继承的
    Type[] types = targetClass.getGenericInterfaces();
   
    //5.获取SysMapper
    Type targetType = types[0];
   
    //判断该类型是否为泛型 SysMapper<Item>
    if(targetType instanceof ParameterizedType){
    //表示当前接口是一个泛型,并且获取泛型参数
    ParameterizedType parameterizedType = (ParameterizedType) targetType;
   
    //SysMapper<T,V,K>   获取泛型的全部参数
    Type[] supers =  parameterizedType.getActualTypeArguments();
   
    //表示成功获取第一个参数
    Class<?> targetMethodClass = (Class<?>) supers[0];
   
    //判断Class不能为空
    if(targetMethodClass !=null){
   
    //判断该类中是否含有注解
    if(targetMethodClass.isAnnotationPresent(Table.class)){
    //获取目标对象的注解
    Table table = targetMethodClass.getAnnotation(Table.class);
   
    //获取表名
    String tableName = table.name();
   
    //定义查询sql语句
    String sql = "select count(*) from "+tableName;
   
    //定义sqlNode对象
    SqlNode sqlNode = new StaticTextSqlNode(sql);
   
    return sqlNode;
    }
    }
    }
   
} catch (ClassNotFoundException e) {

e.printStackTrace();
}
   
    return null;
   
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值