• mybatis generator生成mapper接口后的代理类,很方便使用。


    1.spring 配置:

    <bean id="superMapperProxy" class="com.qws.v1.daoImpl.MapperProxy">
    <property name="mapperPackagePrifix" value="com.qws.v1.mapper."></property>
    </bean>

      1 package com.qsw.v1.daoImpl;
      2 
      3 import java.lang.reflect.Method;
      4 import java.util.ArrayList;
      5 import java.util.Arrays;
      6 import java.util.List;
      7 import java.util.concurrent.TimeUnit;
      8 
      9 import org.apache.ibatis.annotations.Param;
     10 import org.springframework.beans.BeansException;
     11 import org.springframework.context.ApplicationContext;
     12 import org.springframework.context.ApplicationContextAware;
     13 import org.springframework.data.redis.core.RedisTemplate;
     14 import org.springframework.data.redis.core.ValueOperations;
     15 
     16 import com.qsw.v1.util.BaseClass;
     17 
     18 /**
     19  * mapper proxy,结合pageHelper+MyBatisGenerator简直所向无敌
     20  * 后期将加入redis缓存功能,结合nginx转发组成高并发后端
     21  * @author Administrator
     22  *
     23  */
     24 public class MapperProxy extends BaseClass implements ApplicationContextAware {
     25 
     26     /**************************************    代理方法名 start     ***************************************/
     27     public static final String COUNT_BY_EXAMPLE_METHOD_NAME = "countByExample";
     28     public static final String DELETE_BY_EXAMPLE_METHOD_NAME = "deleteByExample";
     29     public static final String DELETE_BY_PRIMARY_KEY_METHOD_NAME = "deleteByPrimaryKey";
     30     public static final String INSERT_METHOD_NAME = "insert";
     31     public static final String INSERT_SELECTIVE_METHOD_NAME = "insertSelective";
     32     public static final String SELECT_BY_EXAMPLE_METHOD_NAME = "selectByExample";
     33     public static final String SELECT_BY_PRIMARY_KEY_METHOD_NAME = "selectByPrimaryKey";
     34     public static final String UPDATE_BY_EXAMPLE_SELECTIVE_METHOD_NAME = "updateByExampleSelective";
     35     public static final String UPDATE_BY_EXAMPLE_METHOD_NAME = "updateByExample";
     36     public static final String UPDATE_BY_PRIMARYKEY_SELECTIVE_METHOD_NAME = "updateByPrimaryKeySelective";
     37     public static final String UPDATE_BY_PRIMARYKEY_METHOD_NAME = "updateByPrimaryKey";
     38     /**************************************    代理方法名 end     ***************************************/
     39     
     40     /**
     41      * mapper所在包的前缀
     42      */
     43     private String mapperPackagePrifix;
     44     
     45     /**
     46      * application 实例
     47      */
     48     private ApplicationContext ctx;
     49 
     50     public void setMapperPackagePrifix(String name) {
     51         this.mapperPackagePrifix = name;
     52     }
     53 
     54     /**
     55      * 根据一个对象查找Mapper,对象要么是实体类,要么是example
     56      * @param obj
     57      * @return
     58      */
     59     public Object findMapper(Object obj) {
     60         try {
     61             if (obj == null) {
     62                 logger.warn("the param obj instance can not be null !");
     63                 return null;
     64             }
     65             Class<?> clazz = obj.getClass();
     66             String name = clazz.getSimpleName();
     67             String mapperClassName = "";
     68             if (name.endsWith("Example")) {
     69                 int index = name.indexOf("Example");
     70                 mapperClassName = mapperPackagePrifix + name.substring(0, index) + "Mapper";
     71             } else {
     72                 mapperClassName = mapperPackagePrifix + name + "Mapper";
     73             }
     74             logger.debug("mapper class name is :" + mapperClassName );
     75             Class<?> mapperClazz = Class.forName(mapperClassName);
     76             logger.debug("mapper is found :" + mapperClazz );
     77             return ctx.getBean(mapperClazz);
     78         } catch (Exception e) {
     79             logger.error("find mapper failed : " + e.getMessage());
     80         }
     81         return null;
     82     }
     83 
     84     /**
     85      * 查找方法
     86      * @param obj
     87      * @return
     88      */
     89     public Method findMethod(Object mapper, String methodName, Object... parameters) {
     90         try {
     91             if (mapper == null) {
     92                 logger.warn("the mapper can not be null ! ");
     93             }
     94             Class<?> clazz = mapper.getClass();
     95             Class<?>[] clazzArray = new Class[parameters.length];
     96             for (int i = 0; i < parameters.length; i++) {
     97                 if (parameters[i] == null) {
     98                     continue;
     99                 }
    100                 clazzArray[i] = parameters[i].getClass();
    101             }
    102             logger.debug("the clazz array is " + Arrays.toString(clazzArray));
    103             return clazz.getDeclaredMethod(methodName, clazzArray);
    104         } catch (Exception e) {
    105             logger.error(" find method : " + methodName + " is error," + e.getMessage());
    106         }
    107         return null;
    108     }
    109 
    110     /**
    111      * 查询数量
    112      * 
    113      * @param example
    114      * @return
    115      */
    116     public int countByExample(Object example) {
    117         try {
    118             if (example == null) {
    119                 logger.warn("countByExample failed,the example can not be null !");
    120                 return -1;
    121             }
    122 
    123             Object mapper = findMapper(example);
    124             logger.debug("mapper instance found for " + mapper.getClass());
    125 
    126             Method method = findMethod(mapper, COUNT_BY_EXAMPLE_METHOD_NAME, example);
    127             logger.debug("mapper instance found for " + mapper.getClass());
    128 
    129             return (int) method.invoke(mapper, example);
    130         } catch (Exception e) {
    131             logger.error("countByExample failed, " + e.getMessage() );
    132         }
    133         return -1;
    134     }
    135 
    136     /**
    137      * 代理方法
    138      * @param example
    139      * @return
    140      */
    141     public int deleteByExample(Object example) {
    142         try {
    143             if (example == null) {
    144                 logger.warn("deleteByExample failed,the example can not be null !");
    145                 return -1;
    146             }
    147 
    148             Object mapper = findMapper(example);
    149             logger.debug("mapper instance found for " + mapper.getClass());
    150 
    151             Method method = findMethod(mapper, DELETE_BY_EXAMPLE_METHOD_NAME, example);
    152             logger.debug("mapper instance found for " + mapper.getClass());
    153 
    154             return (int) method.invoke(mapper, example);
    155         } catch (Exception e) {
    156             logger.error("deleteByExample failed, " + e.getMessage() );
    157         }
    158         return -1;
    159     }
    160 
    161     /**
    162      * 代理方法
    163      * @param id
    164      * @param beanClazz
    165      * @return
    166      */
    167     public int deleteByPrimaryKey(Object id, Class<?> beanClazz) {
    168         String mapperClassName = "";
    169         try {
    170             if (id == null) {
    171                 logger.warn("deleteByPrimaryKey failed,the id can not be null !");
    172                 return -1;
    173             }
    174 
    175             if (beanClazz == null) {
    176                 logger.warn("deleteByPrimaryKey failed,the beanClazz can not be null !");
    177                 return -1;
    178             }
    179 
    180             mapperClassName = mapperPackagePrifix + beanClazz.getSimpleName() + "Mapper";
    181             Class<?> clazz = Class.forName(mapperClassName);
    182             logger.debug("Mapper class  found for " + mapperClassName);
    183 
    184             Object mapper = ctx.getBean(mapperClassName);
    185             logger.debug("mapper instance found for " + mapper.getClass());
    186 
    187             Method method = clazz.getMethod(DELETE_BY_PRIMARY_KEY_METHOD_NAME, id.getClass());
    188             logger.debug("mapper instance found for " + mapper.getClass());
    189 
    190             return (int) method.invoke(mapper, id);
    191         } catch (Exception e) {
    192             logger.error("deleteByPrimaryKey failed, " + e.getMessage() );
    193         }
    194         return -1;
    195     }
    196 
    197     /**
    198      * 代理方法
    199      * @param record
    200      * @return
    201      */
    202     public int insert(Object record) {
    203         try {
    204             if (record == null) {
    205                 logger.warn("insert faild,the object can not be null !");
    206                 return -1;
    207             }
    208 
    209             Object mapper = findMapper(record);
    210             logger.debug("mapper instance found for " + mapper.getClass());
    211 
    212             Method insertMethod = findMethod(mapper, INSERT_METHOD_NAME, record);
    213             logger.debug("method  found in " + mapper.getClass());
    214 
    215             if (insertMethod == null) {
    216                 logger.warn("insert faild,the method dose not exits !");
    217                 return -1;
    218             }
    219 
    220             Object value = insertMethod.invoke(mapper, record);
    221             logger.info("insert success,the return value is: " + value );
    222             ValueOperations<String, Object> values = ctx.getBean(RedisTemplate.class).opsForValue();
    223             List<Object> lst=(List<Object>) values.get("INSERT_LIST");
    224             if (lst==null) {
    225                 lst=new ArrayList<Object>();
    226             }
    227             values.set("INSERT_LIST", lst, 3, TimeUnit.DAYS);
    228             return (int) value;
    229         } catch (Exception e) {
    230             logger.error("insert faild," + e.getMessage() );
    231         }
    232         return -1;
    233     }
    234 
    235     /**
    236      * 代理方法
    237      * @param record
    238      * @return
    239      */
    240     public int insertSelective(Object record) {
    241 
    242         try {
    243             if (record == null) {
    244                 logger.warn("insertSelective faild,the object can not be null !");
    245                 return -1;
    246             }
    247 
    248             Object mapper = findMapper(record);
    249             logger.debug("mapper instance found for " + mapper.getClass());
    250 
    251             Method insertMethod = findMethod(mapper, INSERT_SELECTIVE_METHOD_NAME, record);
    252             logger.debug("method  found in " + mapper.getClass());
    253 
    254             if (insertMethod == null) {
    255                 logger.warn("insertSelective faild,the method dose not exits !");
    256                 return -1;
    257             }
    258 
    259             Object value = insertMethod.invoke(mapper, record);
    260             ValueOperations<String, Object> values = ctx.getBean(RedisTemplate.class).opsForValue();
    261             List<Object> lst=(List<Object>) values.get(record.getClass().getSimpleName()+"_List");
    262             if (lst==null) {
    263                 lst=new ArrayList<Object>();
    264             }
    265             values.set(record.getClass().getSimpleName()+"_List", lst, 3, TimeUnit.DAYS);
    266             logger.info("insertSelective success,the return value is: " + value );
    267             return (int) value;
    268         } catch (Exception e) {
    269             e.printStackTrace();
    270             logger.error("insertSelective faild," + e.getMessage() );
    271         }
    272         return -1;
    273     }
    274 
    275     /**
    276      * 代理方法
    277      * @param example
    278      * @return
    279      */
    280     public List<?> selectByExample(Object example) {
    281         try {
    282             if (example == null) {
    283                 logger.warn("selectByExample failed,the example can not be null !");
    284                 return null;
    285             }
    286 
    287             Object mapper = findMapper(example);
    288             logger.debug("mapper instance found for " + mapper.getClass());
    289 
    290             Method method = findMethod(mapper, SELECT_BY_EXAMPLE_METHOD_NAME, example);
    291             logger.debug("mapper instance found for " + mapper.getClass());
    292 
    293             return (List<?>) method.invoke(mapper, example);
    294         } catch (Exception e) {
    295             logger.error("deleteByExample failed, " + e.getMessage() );
    296         }
    297         return null;
    298     }
    299 
    300     /**
    301      * 代理方法,代理原selectByPrimaryKey方法,由于原方法只需要主键,此处无法只需要一个主键,故加入一个Type
    302      * @param id
    303      * @param clazz
    304      * @return
    305      */
    306     @SuppressWarnings("unchecked")
    307     public <T> T selectByPrimaryKey(Object id, Class<T> clazz) {
    308         String mapperClassName = "";
    309         try {
    310             if (id == null) {
    311                 logger.warn("selectByPrimaryKey failed,the id can not be null !");
    312                 return null;
    313             }
    314 
    315             if (clazz == null) {
    316                 logger.warn("selectByPrimaryKey failed,the param clazz can not be null !");
    317                 return null;
    318             }
    319             mapperClassName = mapperPackagePrifix + clazz.getSimpleName() + "Mapper";
    320             Class<?> clazzMapper = Class.forName(mapperClassName);
    321             logger.debug("Mapper class  found for " + mapperClassName);
    322 
    323             Object mapper = ctx.getBean(clazzMapper);
    324             logger.debug("mapper instance found for " + mapper.getClass());
    325 
    326             Method method = clazzMapper.getMethod(SELECT_BY_PRIMARY_KEY_METHOD_NAME, id.getClass());
    327             logger.debug("mapper instance found for " + mapper.getClass());
    328 
    329             return (T) method.invoke(mapper, id);
    330         } catch (Exception e) {
    331             logger.error("selectByPrimaryKey failed, " + e.getMessage() );
    332         }
    333         return null;
    334     }
    335 
    336     /**
    337      * 代理方法
    338      * @param record
    339      * @param example
    340      * @return
    341      */
    342     public int updateByExampleSelective(@Param("record") Object record, @Param("example") Object example) {
    343 
    344         try {
    345             if (record == null) {
    346                 logger.warn("updateByExampleSelective faild,the object can not be null !");
    347                 return -1;
    348             }
    349 
    350             Object mapper = findMapper(record);
    351             logger.debug("mapper instance found for " + mapper.getClass());
    352 
    353             Method updateByExampleSelectiveMethod = findMethod(mapper, UPDATE_BY_EXAMPLE_SELECTIVE_METHOD_NAME, record,
    354                     example);
    355             logger.debug("method  found in " + mapper.getClass());
    356 
    357             if (updateByExampleSelectiveMethod == null) {
    358                 logger.warn("updateByExampleSelectiveMethod faild,the method dose not exits !");
    359                 return -1;
    360             }
    361 
    362             Object value = updateByExampleSelectiveMethod.invoke(mapper, record, example);
    363             logger.debug("updateByExampleSelective success,the return value is: " + value );
    364             return (int) value;
    365         } catch (Exception e) {
    366             logger.error("updateByExampleSelective faild," + e.getMessage() );
    367         }
    368         return -1;
    369     }
    370 
    371     /**
    372      * 代理方法
    373      * @param record
    374      * @param example
    375      * @return
    376      */
    377     public int updateByExample(@Param("record") Object record, @Param("example") Object example) {
    378 
    379         try {
    380             if (record == null) {
    381                 logger.warn("updateByExample faild,the record can not be null !");
    382                 return -1;
    383             }
    384             if (example == null) {
    385                 logger.warn("updateByExample faild,the example can not be null !");
    386                 return -1;
    387             }
    388 
    389             Object mapper = findMapper(record);
    390             logger.debug("mapper instance found for " + mapper.getClass());
    391 
    392             Method updateByExampleSelectiveMethod = findMethod(mapper, UPDATE_BY_EXAMPLE_METHOD_NAME, record, example);
    393             logger.debug("method  found in " + mapper.getClass());
    394 
    395             if (updateByExampleSelectiveMethod == null) {
    396                 logger.warn("updateByExample faild,the method dose not exits !");
    397                 return -1;
    398             }
    399 
    400             Object value = updateByExampleSelectiveMethod.invoke(mapper, record, example);
    401             logger.debug("updateByExample success,the return value is: " + value );
    402             return (int) value;
    403         } catch (Exception e) {
    404             logger.error("updateByExample faild," + e.getMessage() );
    405         }
    406         return -1;
    407     }
    408 
    409     /**
    410      * 代理方法
    411      * @param record
    412      * @return
    413      */
    414     public int updateByPrimaryKeySelective(Object record) {
    415 
    416         try {
    417             if (record == null) {
    418                 logger.warn("updateByPrimaryKeySelective faild,the object can not be null !");
    419                 return -1;
    420             }
    421 
    422             
    423             Object mapper =findMapper(record);
    424             logger.debug("mapper instance found for " + mapper.getClass());
    425 
    426             Method updateByExampleSelectiveMethod = findMethod(mapper,UPDATE_BY_PRIMARYKEY_SELECTIVE_METHOD_NAME, record);
    427             logger.debug("method  found in " + mapper.getClass());
    428 
    429             if (updateByExampleSelectiveMethod == null) {
    430                 logger.warn("updateByExampleSelectiveMethod faild,the method dose not exits !");
    431                 return -1;
    432             }
    433 
    434             Object value = updateByExampleSelectiveMethod.invoke(mapper, record);
    435             logger.info("updateByExampleSelectiveMethod success,the return value is: " + value );
    436             return (int) value;
    437         } catch (Exception e) {
    438             logger.error("updateByExampleSelectiveMethod faild," + e.getMessage() );
    439         }
    440         return -1;
    441     }
    442 
    443     /**
    444      * 代理方法
    445      * @param record
    446      * @return
    447      */
    448     public int updateByPrimaryKey(Object record) {
    449 
    450         try {
    451             if (record == null) {
    452                 logger.warn("updateByPrimaryKey faild,the object can not be null !");
    453                 return -1;
    454             }
    455 
    456             Object mapper = findMapper(record);
    457             logger.debug("mapper instance found for " + mapper.getClass());
    458 
    459             Method updateByExampleSelectiveMethod =findMethod(mapper,UPDATE_BY_PRIMARYKEY_METHOD_NAME, record);
    460             logger.debug("method  found in " + mapper.getClass());
    461 
    462             if (updateByExampleSelectiveMethod == null) {
    463                 logger.warn("updateByPrimaryKey faild,the method dose not exits !");
    464                 return -1;
    465             }
    466 
    467             Object value = updateByExampleSelectiveMethod.invoke(mapper, record);
    468             logger.info("updateByPrimaryKey success,the return value is: " + value );
    469             return (int) value;
    470         } catch (Exception e) {
    471             logger.error("updateByPrimaryKey faild," + e.getMessage() );
    472         }
    473         return -1;
    474     }
    475 
    476     @Override
    477     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    478         ctx = applicationContext;
    479     }
    480 
    481 }
    View Code

    2.使用,如图:

  • 相关阅读:
    2015腾讯暑期实习笔试题目
    二叉树的优点和缺点
    pandas对象保存到mysql出错提示“BLOB/TEXT column used in key specification without a key length”解决办法
    事务的隔离机制
    Flink Sink定制开发
    Presto实现定时从配置文件读取配置
    LDAP与Sentry API使用
    Presto压测报告
    PrestoSPI安全扩展
    项目重构总结
  • 原文地址:https://www.cnblogs.com/swtjavaspace/p/6179650.html
Copyright © 2020-2023  润新知