package com.eshore.wbtimer.executor.service.impl;

 import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.SqlHelper;
import com.eshore.wbtimer.executor.service.CommonService;
import com.eshore.wbtimer.executor.util.field.SpringContextUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.ReflectionUtils; import java.lang.reflect.Method; /**
* 此方法利用动态代理和反射实现通用插入,根据bean类获取相应mapper接口,利用代理注入mapper,再反射调用响应方法
*/
@Service
public class CommonServiceImpl implements CommonService { @Override
public boolean commonMapperSave(Class<?> bean, Object dataBean) {
String mapperPath = SqlHelper.table(bean).getCurrentNamespace();
Class<?> dataMapperClass = null;
try {
dataMapperClass = Class.forName(mapperPath);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
}
try {
Object mapperServiceBean = SpringContextUtil.getBean(dataMapperClass);
Method mapperServiceBeanMethod = ReflectionUtils.findMethod(mapperServiceBean.getClass(), "insert", Object.class);
// 执行方法
ReflectionUtils.invokeMethod(mapperServiceBeanMethod, mapperServiceBean, dataBean);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
} @Override
public boolean commonMapperSelect(String className) {
String mapperPath = "com.eshore.wbtimer.executor.mapper.bean."+className;
Class<?> dataMapperClass = null;
try {
dataMapperClass = Class.forName(mapperPath);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
}
String dataPath = SqlHelper.table(dataMapperClass).getCurrentNamespace();
Class<?> mapperClass = null;
try {
mapperClass = Class.forName(dataPath);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
Object mapperServiceBean = SpringContextUtil.getBean(mapperClass);
EntityWrapper ew = new EntityWrapper();
ew.setEntity(mapperServiceBean);
ew.where("UPLOAD_TIMESTAMP < DATA_TIMESTAMP").or("UPLOAD_TIMESTAMP is null");
if(className.startsWith("SJ")) {
ew.where(" and CITY='SYGNGD' ");
}
Method mapperServiceBeanMethod = ReflectionUtils.findMethod(mapperServiceBean.getClass(), "select", EntityWrapper.class);
// 执行方法
Object obj = ReflectionUtils.invokeMethod(mapperServiceBeanMethod, mapperServiceBean, ew);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}

接口CommonService;

 package com.eshore.wbtimer.executor.service;

 /**
* @author
* @Description:
* @date 2019/3/21 14:48
*/
public interface CommonService {
public boolean commonMapperSave(Class<?> bean, Object dataBean); public boolean commonMapperSelect(String className);
}
 

mybatis表名反射实体的更多相关文章

  1. JPA设置表名和实体名,表字段与实体字段的对应

    转自:https://blog.csdn.net/LQW_java_home/article/details/53079363 首先 你的jpaProperties配置项中要有 <prop ke ...

  2. Mybatis 表名是变量时

    写语句时这样就可以了 <select id="selectTotal" resultType="java.util.Map" parameterType= ...

  3. MVC4数据访问EF查询linq语句的时候报错找不到表名问题

    一天做项目的时候遇到这样的问题,MVC4用EF访问数据查询用linq语句的时候报错找不到表名:报错如下图: 研究了几种情况,最后还是没有找到正真的问题所在,不过可能是和路由解析问题有关,暂时还没有进行 ...

  4. 由数据库表生成jpa实体工具

    package cn.net.yto.aaa.dao.generator; /** * 由数据库表生成jpa实体工具 * * @author huike * Created by gf.liu on ...

  5. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...

  6. mybatis框架下解决数据库中表的列的字段名和实体类属性不相同的问题

    导包.... 实体类中的属性,getter,setter,tostring,构造等方法就不写了 private int id; private String orderNo; private floa ...

  7. MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  8. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  9. MyBatis——解决字段名与实体类属性名不相同的冲突

    原文:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况 ...

随机推荐

  1. SVN 删除所有目录下的“.svn”文件夹,让文件夹脱离SVN控制

    SVN 删除所有目录下的“.svn”文件夹,将如下语句拷备到记事本,并保存为 *.reg,双击导入注册表,在文件夹右键中就多了一条“Delete SVN Folders”,点击就可以删处此目录下的所有 ...

  2. PHP全栈开发

     DAY01_PHP基础第一天                 01.了解php  00:09:26 ★  02.php的开发环境准备  00:13:47 ★  03.人人都会编程  00:10:26 ...

  3. PostgreSQL order by 排序问题

    默认的排序为order by 字段名, 如果该字段不允许为空的情况下可以这样操作, 但是当字段允许为null时,order by 字段名的方式会导致: 升序时(asc): 会从最小值开始升序,最后面接 ...

  4. sysctl内核参数解析

    sysctl内核参数解析 kernel.参数 kernel.shmall = 2097152    ## 1> 表示所有内存大小.可以分配的所有共享内存段的总和最大值.(以页为单位) ## 2& ...

  5. UISearchController,SearchBar的教程-Swift

    如果你的应用程序里显示了大量的数据,滚动的查看大规模的列表会很慢,也会给人一种烦躁的感觉.在这种情况下,查询UISearchController, UISearchBar是极其重要的,可以让用户搜索特 ...

  6. iOS学习笔记26-视频播放

    一.视频 在iOS中播放视频可以使用两个框架来实现: MediaPlayer框架的MPMoviePlayerController和MPMoviePlayerViewController AVFound ...

  7. LibreOJ2097 - 「CQOI2015」任务查询系统

    Portal Description 给出\(n(n\leq10^5)\)个任务,和总时间范围\(m(m\leq10^5)\).每个任务有开始/结束时间\(s_i,e_i(1\leq s_i \leq ...

  8. 字符串匹配之Sunday算法

    Sunday算法不像KMP算法那么复杂,但是效率又比较高,在KMP之上,下面简单介绍Sunday算法及其实现. Sunday 算法由 Daniel M.Sunday 在 1990 年提出,它的思想跟 ...

  9. P2730 魔板 Magic Squares (搜索)

    题目链接 Solution 这道题,我是用 \(map\) 做的. 具体实现,我们用一个 \(string\) 类型表示任意一种情况. 可以知道,排列最多只有 \(8!\) 个. 然后就是直接的广搜了 ...

  10. tomcat Enabling JMX Remote

    wiki 利用JMX做存活监控 cat /opt/wiki/work/bin/setenv.sh | grep jmxremoteCATALINA_OPTS="-Dcom.sun.manag ...