MybatisInsertAndUpdateInterceptor.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package com.ematou.wxservice.interceptor;
  2. import com.ematou.wxservice.common.utils.DateUtil;
  3. import org.apache.ibatis.executor.Executor;
  4. import org.apache.ibatis.mapping.MappedStatement;
  5. import org.apache.ibatis.mapping.SqlCommandType;
  6. import org.apache.ibatis.plugin.*;
  7. import org.springframework.stereotype.Component;
  8. import java.lang.reflect.Field;
  9. import java.sql.Timestamp;
  10. import java.util.Date;
  11. import java.util.Map;
  12. import java.util.Properties;
  13. /**
  14. * @author lhm
  15. * @version 1.0
  16. * 2021-04-30 15:30
  17. */
  18. @Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
  19. @Component
  20. public class MybatisInsertAndUpdateInterceptor implements Interceptor {
  21. @Override
  22. public Object intercept(Invocation invocation) throws Throwable {
  23. Object[] args = invocation.getArgs();
  24. MappedStatement mappedStatement = (MappedStatement) args[0];
  25. if (mappedStatement.getSqlCommandType() == SqlCommandType.UPDATE) {
  26. Object arg = args[1];
  27. if (arg instanceof Map) {
  28. Map<?, ?> map = (Map<?, ?>) arg;
  29. for (Object key : map.keySet()) {
  30. if (key.toString().contains("param")) {
  31. handleUpdateData(map.get(key));
  32. }
  33. }
  34. } else {
  35. handleInsertData(arg);
  36. }
  37. } else if (mappedStatement.getSqlCommandType() == SqlCommandType.INSERT) {
  38. Object arg = args[1];
  39. if (arg instanceof Map) {
  40. Map<?, ?> map = (Map<?, ?>) arg;
  41. for (Object key : map.keySet()) {
  42. if (key.toString().contains("param")) {
  43. handleInsertData(map.get(key));
  44. }
  45. }
  46. } else {
  47. handleInsertData(arg);
  48. }
  49. }
  50. return invocation.proceed();
  51. }
  52. private void handleInsertData(Object o) throws IllegalAccessException {
  53. Field[] fields = o.getClass().getDeclaredFields();
  54. for (Field field : fields) {
  55. switch (field.getName()) {
  56. case "createTime":
  57. field.setAccessible(true);
  58. field.set(o, DateUtil.formatDate(new Date()));
  59. break;
  60. case "modTime":
  61. field.setAccessible(true);
  62. field.set(o, DateUtil.formatDate(new Date()));
  63. break;
  64. case "tstm":
  65. field.setAccessible(true);
  66. field.set(o, new Timestamp(System.currentTimeMillis()));
  67. break;
  68. case "createrSn":
  69. // TODO
  70. field.setAccessible(true);
  71. field.set(o, "admin");
  72. break;
  73. }
  74. }
  75. }
  76. private void handleUpdateData(Object o) throws IllegalAccessException {
  77. Field[] fields = o.getClass().getDeclaredFields();
  78. for (Field field : fields) {
  79. switch (field.getName()) {
  80. case "modTime":
  81. field.setAccessible(true);
  82. field.set(o, DateUtil.formatDate(new Date()));
  83. break;
  84. case "tstm":
  85. field.setAccessible(true);
  86. field.set(o, new Timestamp(System.currentTimeMillis()));
  87. break;
  88. case "moderSn":
  89. // TODO
  90. field.setAccessible(true);
  91. field.set(o, "admin");
  92. break;
  93. }
  94. }
  95. }
  96. @Override
  97. public Object plugin(Object target) {
  98. return Plugin.wrap(target, this);
  99. }
  100. @Override
  101. public void setProperties(Properties properties) {
  102. }
  103. }