java-注解配合反射做一个简单的条件查询包
作用:
- 为了个性化生成Map条件包,放入mybatis-plus中可以直接成功进行按条件查询
- 配合注解反射去生成任意实体类的Map条件包,若前端给的参数没有值,那么条件就不会生成对应的字段条件。
思路
- 写一个自定义注解
- 在需要的字段上进行标注,然后写出数据库中的字段名
- 外边传来的对象(模拟前端传入数据),遍历所有字段,找到对应字段的注解,然后判断传来的对象是否有值,没有值就不放入HashMap中。
代码实现
注解:
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTableFieldName {
String name();
}
实体类:
@Data
@ToString
@EqualsAndHashCode(callSuper = false)
public class TAdmin implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "admin_id", type = IdType.AUTO)
@MyTableFieldName(name = "admin_Id")
private Integer adminId;
/**
* 账号
*/
@MyTableFieldName(name="admin_name")
private String adminName;
/**
* 密码
*/
@MyTableFieldName(name="password")
private String password;
}
@Data
@ToString
@EqualsAndHashCode(callSuper = false)
public class TUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "user_id", type = IdType.AUTO)
@MyTableFieldName(name = "user_id")
private Integer userId;
/**
* 权限ID
*
*/
@MyTableFieldName(name = "role_id")
private Integer roleId;
/**
* 用户名
*/
@MyTableFieldName(name = "user_name")
private String userName;
/**
* 密码
*/
@MyTableFieldName(name = "password")
private String password;
/**
* 专业
*/
private String major;
/**
* 联系方式
*/
private String phone;
/**
* 电子邮箱
*/
private String email;
/**
* 学习兴趣
*/
private String hobby;
}
工具类:
public class MyObjectTool {
public static Map<String,Object> analyseObject(Object object){
Class<?> myObject = object.getClass();
//找到所有的字段
Field[] fields = myObject.getDeclaredFields();
//构建条件包
Map<String,Object> map = new HashMap<>();
for (Field field : fields) {
//解开权限
field.setAccessible(true);
//获得自定义注解
MyTableFieldName annotation = field.getAnnotation(MyTableFieldName.class);
try {
String myTableFieldName = annotation.name();
//该字段值不为空
if (field.get(object)!=null){
//将注解内的内容和字段的值放入到Map中
map.put(myTableFieldName,field.get(object));
}
} catch (Exception e) {
continue;
}
}
return map;
}
//测试
public static void main(String[] args) {
TUser tUser = new TUser();
tUser.setUserName("test");
tUser.setPassword("66666666");
TAdmin admin = new TAdmin();
admin.setAdminName("test2");
Map<String, Object> stringObjectMap = analyseObject(tUser);
System.out.println(stringObjectMap);
Map<String, Object> stringObjectMap2 = analyseObject(admin);
System.out.println(stringObjectMap2);
}
}
实验结果