Mybatis-plus工具类自动填充QueryWrapper进行高级查询

更新时间:2023-07-03 01:13:58 阅读: 评论:0

Mybatis-plus⼯具类⾃动填充QueryWrapper进⾏⾼级查询
现在只⽀持QueryWrapper的eq和like功能 后续拓展SqlAnnotation的注解值 可以进⾏其他匹配
先看实体类
public class EnrollmentRecord implements Serializable {
private static final long rialVersionUID =1L;
@TableId(value ="id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty(value ="学校编号")
private String schoolSn;
@ApiModelProperty(value ="报名id")
private Integer enrollmentId;
@ApiModelProperty(value ="订单号(如果免费,订单号为空)")
private String orderSn;
@ApiModelProperty(value ="⽤户id")
private Integer consumerId;
@SqlAnnotation
@ApiModelProperty(value ="家长名字")
private String parentName;
duba}
再看⼯具类
package com.school.admin.util;
import ditions.query.QueryWrapper;
import com.shiro.UrUtil;
import s.lang3.StringUtils;
facebowimport flect.Field;
import flect.Method;
/**
* 此类主要⾯向⾼级查询
* @author yiyanjia
*/
public class SqlConditionUtil {
/**
* ⾼级查询⾃动填充条件与值
* @param tableName 表名表有别名写别名
* @param obj 类值的类
* @param queryWrapper 需要填充的queryWrapper
* @return 泛型QueryWrapper
* @throws Exception 反射异常
*/
public static QueryWrapper<?>getQueryWrapper(String tableName,Object obj,QueryWrapper<?> queryWrapper)throws Exception {        Class clz = Class();
Field[] fields = DeclaredFields();
fields =delElement(fields,0);
for(int i=0;i<fields.length;i++){
Method method = Class().getMethod("get"+getMethodName(fields[i].getName()));
Object param = method.invoke(obj);code break
Field field = fields[i];
if(param!=null){
switch(fields[i].getGenericType().toString()){
ca"class java.lang.String":
if(StringUtils.String())){
if(StringUtils.String())){
if(fields[i].isAnnotationPrent(SqlAnnotation.class)){
queryWrapper.like(tableFieldName(Name()),param);
}
el{
queryWrapper.eq(tableFieldName(Name()),param);
}
}
break;
ca"class java.lang.Integer":
queryWrapper.eq(tableFieldName(Name()),param);
break;
ca"int":
if(Integer.String())!=0){
System.out.println(Integer.String()));
}
break;中小学培训
ca"class java.math.BigDecimal":
queryWrapper.eq(tableFieldName(Name()),param);
break;
ca"class java.time.LocalDateTime":
queryWrapper.eq(tableFieldName(Name()),param);
break;
}
}
}
Ur().getIdentity()!=1){
queryWrapper.eq(tableFieldName(tableName,"schoolSn"),Ur().getSchoolSn());
}
return queryWrapper;
};
/**
* 获取⽅法名
* @param fildeName
* @return
* @throws Exception
*/
private static String getMethodName(String fildeName)throws Exception{
byte[] items = Bytes();
items[0]=(byte)((char) items[0]-'a'+'A');
bf什么意思return new String(items);
}
美剧scandal
/**take的过去式
* 删除类字段集的不需要数据
* @param arrays
* @param index
* @return
*/
public static Field[]delElement(Object[] arrays,int index){
int length = arrays.length;
//判断数据合理性
if(index >=0&& index < length){
Field[] arrays_result =new Field[arrays.length -1];
//将arrays数组在index前的元素都复制到新数组arrays_result中
System.arraycopy(arrays,0, arrays_result,0, index);
//判断index之后是否还有元素,有则将index后的元素从index位置复制到新数组中
if(index < length -1){
tell laura i love herSystem.arraycopy(arrays, index +1, arrays_result, index, arrays_result.length - index);
}
return arrays_result;
}el{
//不合理,抛越界异常
throw new IndexOutOfBoundsException("index :"+ index +", length: "+ length);
}
}
}
/**
* 字段名与表名
* @param tableName
* @param fieldName
* @return
*/
public static String tableFieldName(String tableName,String fieldName){
StringBuffer tableField =new StringBuffer();
tableField.append(tableName+".");
for(int i =0;i<fieldName.length();i++){
char c = fieldName.charAt(i);
if(Character.isUpperCa(c)){
tableField.append('_');
}
windowed mode
tableField.LowerCa(c));
}
String();
}
}
注解类
package com.school.admin.util;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)//记录在.class⽂件中,并且在运⾏时保留"注释"
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface SqlAnnotation {
String type()default"";
}
ironbark主要原理就是根据反射获取被填充了数据的字段 然后拼接表名和字段名放⼊QueryWrapper中由于是初版 所以打了SqlAnnotation的字段会使⽤like

本文发布于:2023-07-03 01:13:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/165310.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:填充   数据   获取   元素
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图