SpringBoot通过反射使用mybatis的Dao操作
2017-12-14 13:38
531 查看
需求如下:
目的要把所有的Dao和Model封装在一个反射操作的Model里统一管理,在反射过程中方法invoke需要接口的实例,我们都知道接口是不能被实例化的,而java的动态代理可以解决这一问题,有关动态代理的事情本文就不说明了,请自行百度。
代码中我是以反射操作的Model的List作为参数的:
目的要把所有的Dao和Model封装在一个反射操作的Model里统一管理,在反射过程中方法invoke需要接口的实例,我们都知道接口是不能被实例化的,而java的动态代理可以解决这一问题,有关动态代理的事情本文就不说明了,请自行百度。
代码中我是以反射操作的Model的List作为参数的:
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.influxdb.InfluxDBTemplate; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import com.nbst.idevcloud.dispose.model.CacheModel; @Component public class TransactionUtil { private static final Logger LOG = LoggerFactory.getLogger(TransactionUtil.class); //自动注入SqlSession @Autowired private SqlSession sqlSession; @Autowired private InfluxDBTemplate influxDBTemplate; @Transactional public void mysqlInsertTransaction(List<CacheModel> list) throws InstantiationException, IllegalAccessException { CacheModel cacheModel = new CacheModel(); Class ModelClass = null; Class DaoClass = null; Method m = null; for (int i = 0; i < list.size(); i++) { cacheModel = (CacheModel) list.get(i); try { //反射获取model类 ModelClass = Class.forName(cacheModel.getModelClass()); //反射获取dao类 DaoClass = Class.forName(cacheModel.getDaoClass()); //反射获取dao类中相关操作的方法 m = DaoClass.getMethod(cacheModel.getMethod(), ModelClass); m.invoke(sqlSession.getMapper(DaoClass), cacheModel.getModelValue()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //实例置空回收 cacheModel = null; ModelClass = null; DaoClass = null; m = null; } }
相关文章推荐
- 黑马程序员--Java基础加强--15.利用反射操作泛型IV【通过反射Method解析泛型方法思路】【通过Method对四种Type子接口类型进行解剖】【使用递归对任意复合泛型类型进行彻底解剖】【个人
- MyBatis+Spring在注解@Autowried后通过反射的方式调用方法获取注入的Service或DAO对象为空
- 通过Reflector和.net的反射机制来探索和使用.net framework未文档化的API
- 使用模板模式简化DAO操作Hibernate
- .NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)
- 使用java反射优化Spring自动生成的DAO实现类!
- 通过DAO操作Access数据库
- 使用Struts的Action来通过Hibernate对数据库进行增、删、改、查四项操作
- 由sys用户通过查询与锁相关的视图来了解锁,了解阻塞会话与被阻塞会话的sid、serial#、用户名及其所使用的DML操作语句。
- 使用反射简化日常操作(转)
- 在多线程中使用匿名类通过反射获取其属性值
- 通过AIDL及反射机制,使用隐藏API挂断电话
- 使用模板模式简化DAO操作Hibernate
- 方正平台使用小妙招之在Java中通过SQL标记完成数据库的操作
- 通过反射动态使用Java类
- .NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)
- VC 7.0 中使用CDaoRecordset 类/使用Dao 方法操作数据库
- 使用ADO操作SQL SERVER 通过'OLE DB 访问 ACCESS 数据库 ,实现数据交换
- SSH2框架--使用泛型DAO,JUnit测试时,如何使用事务,使用操作不真正的提交的数据库中
- 使用模板模式简化DAO操作Hibernate