mybatis表名反射实体
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表名反射实体的更多相关文章
- JPA设置表名和实体名,表字段与实体字段的对应
转自:https://blog.csdn.net/LQW_java_home/article/details/53079363 首先 你的jpaProperties配置项中要有 <prop ke ...
- Mybatis 表名是变量时
写语句时这样就可以了 <select id="selectTotal" resultType="java.util.Map" parameterType= ...
- MVC4数据访问EF查询linq语句的时候报错找不到表名问题
一天做项目的时候遇到这样的问题,MVC4用EF访问数据查询用linq语句的时候报错找不到表名:报错如下图: 研究了几种情况,最后还是没有找到正真的问题所在,不过可能是和路由解析问题有关,暂时还没有进行 ...
- 由数据库表生成jpa实体工具
package cn.net.yto.aaa.dao.generator; /** * 由数据库表生成jpa实体工具 * * @author huike * Created by gf.liu on ...
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...
- mybatis框架下解决数据库中表的列的字段名和实体类属性不相同的问题
导包.... 实体类中的属性,getter,setter,tostring,构造等方法就不写了 private int id; private String orderNo; private floa ...
- MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- MyBatis——解决字段名与实体类属性名不相同的冲突
原文:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况 ...
随机推荐
- 一个通用的Makefile框架
先做一个简单的记录,后续有时间再慢慢完善补充细节. 先上一个整体图片: 其中,最重要的文件就是:program_template.mk. 下面是program_template.mk最重要的内容: $ ...
- 【JavaScript】关于 setInterval() 调用函数方法的一次实验
实验主题: setInterval() 方法是 JS 中比较常用的一个方法.setInterval() 方法可以按照指定的周期 ( 毫秒 ) 来调用函数方法或计算表达式. setInterval() ...
- Django创建并连接数据库(实现增删改查)--ORM框架雏形
第一步:要先创建数据库(orm是不能创建数据库的) 第二步:settings里面指定连接到哪个数据库 DATABASES = { #默认使用的是sqlite3数据库 'default': { 'ENG ...
- springboot集成shiro——登陆记住我
在shiro配置类中增加两个方法: com.resthour.config.shrio.ShiroConfiguration /** * cookie管理对象 * @return */ @Bean p ...
- Linux硬件资源管理与外设设备使用、系统运行机制及用户管理
Linux硬件资源管理 PCI设备 显卡 $>>dmesg |grep -i vga[ 0.000000] Console: colour VG ...
- 【bzoj4260】Codechef REBXOR Trie树
题目描述 输入 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. 输出 输出一行包含给定表达式可能的最大值. 样例输入 5 1 2 3 1 2 样例输出 ...
- jQuery全屏滚动插件fullPage.js使用中遇到的问题(滑动轮播效果无效)
1.fullPage.js是什么? fullPage.js 是一个基于 jQuery ,用来制作全屏网站的插件. 2.兼容性: - jquery兼容:兼容 jQuery 1.7+ - 浏览器兼容: I ...
- 【python接口自动化】获取根目录
将该方法放在根目录下面,在其他类中直接import 该方法. import os def getRootPath(): rootPath = os.path.dirname(os.path.abspa ...
- 巧克力(zoj 1363)
2100年,ACM牌巧克力将风靡全球. “绿的,橘红的,棕色的,红的…”,彩色的糖衣可能是ACM巧克力最吸引人的地方.你一共见过多少种颜色?现在,据说ACM公司从一个24种颜色的调色板中选择颜色来装饰 ...
- jquery插件的基本写法
(function($){ var a={name:'2222',age:5555} var b={sex:'男',grade:5555} var c=$.extend({},a,b);//合并到新的 ...