动态数据库增删改查增强版
2021/4/17 19:25:24
本文主要是介绍动态数据库增删改查增强版,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
实体类
package com.phone.entity; import lombok.Data; import lombok.ToString; @Data public class MyDatasource { private String driverClassName; private String db; private String username; private String password; private String ip; private String port; private String sql; private String dbType; private String url; private org.springframework.jdbc.datasource.DriverManagerDataSource driverManagerDataSource; @Override public String toString() { return "MyDatasource [driverClassName=" + driverClassName + ", db=" + db + ", username=" + username + ", password=" + password + ", ip=" + ip + ", port=" + port + ", sql=" + sql + ", dbType=" + dbType + ", url=" + url + ", driverManagerDataSource=" + driverManagerDataSource + "]"; } }
缓存机制
package com.phone.jdbc; import java.util.HashMap; import java.util.List; import java.util.Map; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.stereotype.Component; import com.phone.entity.MyDatasource; @Aspect @Component public class AdviceTest { private static Map<String,DriverManagerDataSource> map=new HashMap<>(); // 表达式需要根据实际情况修改 //@Around("execution(* com.phone.jdbc.*.testConnection*(..))") @Around("execution(* com.phone.jdbc.*.*(..))") public Object process(ProceedingJoinPoint point) throws Throwable { System.out.println(map); System.out.println("@Around:执行目标方法之前..."); //访问目标方法的参数: Object[] args = point.getArgs(); if (args != null && args.length > 0 && args[0].getClass() == MyDatasource.class) { MyDatasource myDatasource= (MyDatasource) args[0]; String url = "jdbc:DBTYPE://IP:PORT/DB?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT"; url=url.replace("DBTYPE", myDatasource.getDbType()).replace("IP", myDatasource.getIp()).replace("PORT", myDatasource.getPort()).replace("DB", myDatasource.getDb()); myDatasource.setUrl(url); DriverManagerDataSource myDatasource2 = map.get(url); if(myDatasource2==null) { System.out.println("没用缓存"); DriverManagerDataSource dataSource=new DriverManagerDataSource(); dataSource.setUsername(myDatasource.getUsername()); dataSource.setPassword(myDatasource.getPassword()); dataSource.setDriverClassName(myDatasource.getDriverClassName()); dataSource.setUrl(url); myDatasource.setDriverManagerDataSource(dataSource); args[0]=myDatasource; Object proceed = point.proceed(args); if(proceed !=null) { map.put(url, dataSource); } return (List<Map<String,Object>>)proceed; //return Collections.EMPTY_LIST; }else { System.out.println("使用缓存"); myDatasource.setDriverManagerDataSource(myDatasource2); Object proceed = point.proceed(args); return (List<Map<String,Object>>)proceed; //return Collections.EMPTY_LIST; } } //用改变后的参数执行目标方法 System.out.println("@Around:执行目标方法之后..."); System.out.println("@Around:被织入的目标对象为:" + point.getTarget()); return args; } }
查询的一个demo
package com.phone.jdbc; import java.util.Collections; import java.util.List; import java.util.Map; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.phone.entity.MyDatasource; @RestController public class QueryDa { /** * 动态使用任意数据库查询数据 * @param myDatasource */ @PostMapping("testConnection") public List<Map<String,Object>> testConnection(@RequestBody MyDatasource myDatasource) { JdbcTemplate jdbcTemplate=new JdbcTemplate(); jdbcTemplate.setDataSource(myDatasource.getDriverManagerDataSource()); String sql=myDatasource.getSql(); List<Map<String,Object>> queryForList = jdbcTemplate.queryForList(sql); if(queryForList==null) { return Collections.EMPTY_LIST; } for (Map<String, Object> map : queryForList) { System.out.println("-------------------"); for (String key : map.keySet()) { Object object = map.get(key); System.out.println("key:"+key+"|value:"+object); } } return queryForList; } }
这篇关于动态数据库增删改查增强版的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?