记录遇到的需求或问题
文章目录
前言
项目结构是JPA+Mybatis+Jsp+数据库不固定。记录遇到的问题方便查找。
一、ApplicationContextAware与@PostConstruct冲突
2023-07-17
启动项目时调用@PostConstruct声明的方法,方法中使用了SpringContextUtil工具类,工具类中的applicationContext出现空指针。
解决:在@PostConstruct声明的类上添加注解@DependsOn(“springContextUtil”),如果套用多层Service放在了最下层,AService-》BService-》CService,注解放在了CService上。SpringContextUtil类上添加@Component,例如:
SpringContextUtil:
Service:
二、在nullSafeSet方法中获取到当前执行SQL的表名或类名
2023-07-18
方案一:
直接调用PreparedStatement的toString方法,可以得到SQL,截取一下就能获取表名。但是根据本人查到的资料这个与用到的数据库驱动有关,Oracle可能并不适用;
String tableName = null;
//MySQL与Postgresql可行,Oracle可能不行
String sql = null;
PreparedStatement delegatePreparedStatement = getDelegatePreparedStatement(ps);
sql = delegatePreparedStatement.toString();
if (sql.contains("insert into ")) {
int tableNameStartIndex = sql.indexOf("insert into ") + "insert into ".length();
int tableNameEndIndex = sql.indexOf("(", tableNameStartIndex);
tableName = sql.substring(tableNameStartIndex, tableNameEndIndex).trim();
} else if (sql.contains("update")) {
int tableNameStartIndex = sql.indexOf("update") + "update".length();
int tableNameEndIndex = sql.indexOf("set", tableNameStartIndex);
ta