1、Description du problème
Besoins opérationnels:Informations de configuration dans le projet,Il s'agit de l'exactitude des données du programme,Qui doit être enregistré、Quand est - ce que、Quels champs ont été modifiés,Valeur initiale、Dernière valeur,Pour remonter le temps,Pour éviter les égratignures,Coups internes“Procès”Avec.
2、Solutions
AdoptionjavaRéflexe,Le démon compare les valeurs entrantes frontales aux valeurs de la base de données,Et l'enregistrer;
2.1 Classe d'entité d'essai
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class User {
private String name;
private String des;
}
Brève description:Créer une classe de testUser,Deux propriétés;
2.2 Classe d'outils
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Utils {
public static<T> String compareObject(Object oldBean, Object newBean) {
String str = "";
T pojo1 = (T) oldBean;
T pojo2 = (T) newBean;
try {
Class clazz = pojo1.getClass();
Field[] fields = pojo1.getClass().getDeclaredFields();
int i = 1;
for (Field field : fields) {
PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
Method getMethod = pd.getReadMethod();
Object o1 = getMethod.invoke(pojo1);
Object o2 = getMethod.invoke(pojo2);
if (o1 == null || o2 == null) {
continue;
}
if (!o1.toString().equals(o2.toString())) {
if (i != 1) {
str += ";";
}
str += i + "、Champ:" + field.getName() + ",Ancienne valeur:" + o1 + ",Nouvelles valeurs:" + o2;
i++;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
public static void main(String[] args) {
User user1 = new User();
user1.setName("Lao Wang.");
user1.setDes("Beau gosse.");
User user2 = new User();
user2.setName("Lao Wang.");
user2.setDes("Beau gosse.");
String result = compareObject(user1,user2);
System.out.println(result);
}
}
Brève description:
(1)Ginseng, Les types d'objets doivent être cohérents ;
(2)Dont:invoke Est d'obtenir une valeur de comparaison spécifique ,pojo1Etpojo2 Est un objet entrant ;
2.3 Tableau des effets
Comme vous pouvez le voir sur le graphique , Les valeurs de changement peuvent déjà être enregistrées ;
Supplément à la demande : Parce que ce qui arrive de l'avant jsonDonnées formatées, Les champs sont tous en anglais , Comme dans la capture d'écran des, Champ d'affichage de la page correspondante , Pas nécessairement. ,Utiliser des annotations personnalisées, Convertir en notes en chinois ;
2.4 Commentaires personnalisés
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface ColumnConf {
String value() default "";
}
Commentaires personnalisés;
2.5 Annotations personnalisées utilisées sur les classes d'entités
@Setter
@Getter
public class User {
@ColumnConf("Nom")
private String name;
@ColumnConf("Description")
private String des;
}
2.6 Modifier légèrement la méthode de l'outil ,Ajouter une ligne, Modifier la valeur ci - dessous , Les autres ne bougent pas.
ColumnConf columnConf = field.getAnnotation(ColumnConf.class);
str += i + "、Champ:" + columnConf.value() + ",Ancienne valeur:" + o1 + ",Nouvelles valeurs:" + o2;
2.7 Dessin de l'effet après transformation :
2.8 Description
Quant à la préservation log,Je n'en dirai pas plus.,Créerlog Garde ta montre. ..
Pour plus d'informations, veuillez prêter attention au numéro public :「Software Lao Wang」,Attention à ne pas se perdre,Software Wang et sonITMes amis, Partager leurs connaissances techniques et leurs histoires de vie