Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.mybatis.pj.example.util.BaseExampleUtil Maven / Gradle / Ivy
package com.mybatis.pj.example.util;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Table;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.mybatis.pj.example.select.SelectBaseExample;
import com.mybatis.pj.example.select.multipart.MultipartSelectExample;
/**
* Created with IntelliJ IDEA.
* User: satant
* Date: 2018/4/3
* Time: 15:46
* Description:
*/
public class BaseExampleUtil {
static final Logger log = LoggerFactory.getLogger(BaseExampleUtil.class);
/**
* 将结果集(数据库字段)转化为类属性
* @param list
* @param example
* @param clzs
*/
// public static void list2Property(List> list, SelectBaseExample example, Class> ... clzs) {
// //要搜索的字段数组
// List fields = example.getFields();
// //获取class类
// Field[] classFields =null;
// //字段的别名
// String alias;
// //数据库字段名
// String sqlField;
// Map map = new HashMap<>();
// // 数据库字段对应->class.数据库字段
// Map sqlField2classField = null;
// //获取属性与字段的映射
// //只有一张表,且不传字段或者传入的字段为*
// if (fields == null || fields.size() == 0 || "*".equals(fields.get(0))){
// if(example instanceof MultipartSelectExample){
// if(example.getTableMap() != null){
// throw new IllegalArgumentException("在结果字段为空或者为*时,不允许定义别名!");
// }
// }
// if (example.getTableName().size() != 1) {
// throw new IllegalArgumentException("在结果字段为空或者为*时,不允许出现两个表名!");
// }
// classFields = clzs[0].getDeclaredFields();
// //开始进行属性的封装
// selectField2FieldMap(null,classFields,null,null,null,map,true,false);
// }else {
// //判断是否有别名
// if(example.getTableMap() != null){
// sqlField2classField = new HashMap<>();
// //获取的目标class
// Class targetClass = null;
// //别名与表名的映射
// Map tableMap = example.getTableMap();
// //判断是否是多功能查询
// if(example instanceof MultipartSelectExample){
// //判断是一张表还是使用了left join
// if(((MultipartSelectExample) example).isLeftJoinFlag()){
// //封装class和别名的映射
// Map classMap = sqlTableName2Class(tableMap,clzs);
// for(String key :fields) {
// //key有两种形式, 一:a.* 二:a.felds
// String[] split = key.split("\\.");
// alias = split[0];
// sqlField = split[1];
// //判断是否有*
// //是*的字段
// targetClass = classMap.get(alias);
// classFields = targetClass.getDeclaredFields();
// if("*".equals(split[1])){
// //获取属性field,并添加到map中
// selectField2FieldMap(null,classFields,null,sqlField2classField,targetClass,map,true,true);
// }else{
// //不是*的字段
// selectField2FieldMap(null,classFields,sqlField,sqlField2classField,targetClass,map,false,true);
// }
// }
// }else{
// //没有使用left join 则只有一张表,有别名
// for(String key : fields) {
// targetClass = clzs[0];
// classFields = targetClass.getDeclaredFields();
// //数据库字段key
// String[] split = key.split("\\.");
// sqlField = split[1];
// //判断是否含有*
// if("*".equals(sqlField)){
// //含有*
// selectField2FieldMap(null,classFields,sqlField,sqlField2classField,targetClass,map,true,true);
// }else{
// //不是*的字段
// selectField2FieldMap(null,classFields,sqlField,sqlField2classField,targetClass,map,false,true);
// }
// }
// }
// }else{
// //基础查询,只有一张表,有别名
// //这里需要判断一下是否是*
// for(String key : fields) {
// targetClass = clzs[0];
// String[] split = key.split("\\.");
// sqlField = split[1];
// classFields = targetClass.getDeclaredFields();
// //判断是否有*
// if("*".equals(sqlField)){
// //含有*
// selectField2FieldMap(null,classFields,sqlField,sqlField2classField,targetClass,map,true,true);
// }else{
// //不含*
// selectField2FieldMap(null,classFields,sqlField,sqlField2classField,targetClass,map,false,true);
// }
// }
// }
// }else{
// //基础查询,未使用别名,且只有一张表,不是*字段
// //数据库字段key
// Class> clz = clzs[0];
// classFields = clz.getDeclaredFields();
// selectField2FieldMap(fields,classFields,null,null,null,map,false,false);
// }
// }
// copyList(list,map,sqlField2classField);
// }
/**
* 属性替换
* @param list 原结果集
* @param map 字段映射 image.create_date -> createDate 如果没有别名则为 create_date -> createDate
* @param middleMap 数据库字段与类字段的映射 a.create_date -> image.create_date 如果没有别名则为null
*/
// private static void copyList(List> list,Map map,Map middleMap){
// int size = list.size();
// if(middleMap == null){
// for(int i =0 ; i map2 = new HashMap<>();
// Map map1 = list.get(i);
// Set> es = map1.entrySet();
// for ( Map.Entry entry : es) {
// String oldKey = entry.getKey().toLowerCase();
// Object value = entry.getValue();
// String newKey = map.get(oldKey);
// if(!StringUtils.isBlank(newKey)){
// map2.put(newKey, value);
// }else{
// map2.put(oldKey, value);
// }
// }
// list.remove(i);
// list.add(i,map2);
// }
// }else{
// for(int i =0 ; i map2 = new HashMap<>();
// Map map1 = list.get(i);
// Set> es = map1.entrySet();
// for ( Map.Entry entry : es) {
// String oldKey = entry.getKey().toLowerCase();
// Object value = entry.getValue();
// //中间字段
// String classFiled = middleMap.get(oldKey);
// if(!StringUtils.isBlank(classFiled)){
// String newKey = map.get(classFiled);
// map2.put(newKey, value);
// }else{
// map2.put(oldKey, value);
// }
// }
// list.remove(i);
// list.add(i,map2);
// }
// }
// }
/**
* 类名转Class类
* @param map map中应装有别名与表名的映射
* @param clzs 要封装的类型
* @return 返回表名与类的映射map
*/
// private static Map sqlTableName2Class(Map map , Class> ... clzs){
// Set> set = map.entrySet();
// Map classMap = new HashMap<>();
// set.forEach(entry -> {
// String tableName = entry.getValue();
// for(Class> clz : clzs){
// Table t = clz.getAnnotation(Table.class);
// if(tableName.equals(t.name())){
// classMap.put(entry.getKey(),clz);
// }
// }
// });
// return classMap;
// }
/**
* 封装map 有两种情况 1:使用了别名,map中封装的为 类名.sql字段名 -> 类字段名
* 2:未使用别名,map中封装的为 sql中字段名 -> 类字段名
* @param classFields 类的所有字段
* @param sqlField 传入的sql字段名
* @param sqlField2classField sql字段与类字段的映射
* @param targetClass 目标类
* @param isAll 是否全部类型 true:是,即传入的字段有* false:不是,即传入的是sql字段
* @param useAlias 是否使用别名 true:使用了别名 false: 未使用别名
* @param map 有两种情况 1:使用了别名,map中封装的为 类名.sql字段名 -> 类字段名
* 2:未使用别名,map中封装的为 sql中字段名 -> 类字段名
*/
// public static void selectField2FieldMap(List fields , Field[] classFields,String sqlField,Map sqlField2classField,Class targetClass,Map map,boolean isAll,boolean useAlias){
// //是否查所有字段
// if(isAll){
// //查所有字段
// //是否含有别名
// if (useAlias) {
// //查所有字段,含有别名
// for (Field field : classFields) {
// Column annotation = field.getAnnotation(Column.class);
// String name = annotation.name().toLowerCase();
// sqlField2classField.put(name, targetClass.getSimpleName() + "." + name);
// map.put(targetClass.getSimpleName() + "." + name, field.getName());
// }
// }else{
// //查所有字段,不含别名
// for (Field field : classFields) {
// Column annotation = field.getAnnotation(Column.class);
// String name = annotation.name().toLowerCase();
// //没有别名传这个时传null sqlField2classField
// map.put(name, field.getName());
// }
// }
// }else {
// //查指定字段
// if (useAlias) {
// //查指定字段,使用了别名
// for (Field field : classFields) {
// Column annotation = field.getAnnotation(Column.class);
// String name = annotation.name();
// if (sqlField.toLowerCase().equals(name)) {
// sqlField2classField.put(name, targetClass.getSimpleName() + "." + name);
// map.put(targetClass.getSimpleName() + "." + sqlField.toLowerCase(), field.getName());
// break;
// }
// }
// } else {
// //查指定字段,未使用别名
// for( String key :fields) {
// for (Field field : classFields) {
// Column annotation = field.getAnnotation(Column.class);
// String name = annotation.name().toLowerCase();
// if (key.toLowerCase().equals(name)) {
// //未使用别名,只有一张表,sqlField2classField也时null
// map.put(key.toLowerCase(), field.getName());
// }
// }
// }
// }
// }
// }
/**
* 查询后的map转为实体对象
* @param map map集合
* @param clz 目标class类型
* @return
* @throws InstantiationException
* @throws IllegalAccessException
*/
// public static Object map2Object(Map map, Class> clz)throws InstantiationException,IllegalAccessException{
// Object obj = null;
// try {
// obj = clz.newInstance();
// } catch (InstantiationException e) {
// log.error("创建对象时出现异常");
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// e.printStackTrace();
// }
// Set> entries = map.entrySet();
// for (Map.Entry entry:entries) {
// String field = entry.getKey();
// BeanUtils.forceSetProperty(obj,field,entry.getValue());
// }
// return obj;
// }
/**
* 搜索前将传入的Class字段名map转换为sql字段名map
* @param param 类字段名与搜索值的集合
* @param clz Class对象
* @return Map 转换后的map对象
*/
public static Map classFieldMap2SqlFieldMap(Map param, Class> clz){
Field[] fields = clz.getDeclaredFields();
Map ObjectField2sqlField = new HashMap();
Map map = new HashMap();
if(param.get("page")!=null) {
map.put("page",param.get("page"));
param.remove("page");
}
if(param.get("limit")!=null) {
map.put("limit",param.get("limit"));
param.remove("limit");
}
for (Field field:fields) {
Column annotation = field.getAnnotation(Column.class);
String sqlField = annotation.name();
ObjectField2sqlField.put(field.getName(),sqlField);
}
Iterator> iterator = param.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = iterator.next();
String sqlField = ObjectField2sqlField.get(entry.getKey());
iterator.remove();
map.put(sqlField,entry.getValue());
}
Map sqlQuery = new HashMap(map);
return sqlQuery;
}
/**
* 替换list中的Class字段为sql字段
* @param fields class字段list
* @param clz 目标类
* @return
*/
// public static List classFieldList2SqlFieldList(List fields ,Class> clz){
// Field[] Classfields = clz.getDeclaredFields();
// Map objectField2sqlField = new HashMap();
// for (Field field:Classfields) {
// Column annotation = field.getAnnotation(Column.class);
// String sqlField = annotation.name();
// objectField2sqlField.put(field.getName(),sqlField);
// }
// int size = fields.size();
// fields.replaceAll(field -> {
// String sqlField = objectField2sqlField.get(field);
// return sqlField;
// });
// return fields;
// }
/**
* 将返回的map类型集合->转换为->对应对象集合
* @param list map集合
* @param clz 要转换成的目标类型
* @return
* @throws InstantiationException
* @throws IllegalAccessException
*/
// public static List> list2Object(List> list, Class> clz)throws InstantiationException,IllegalAccessException{
// List newList = new ArrayList<>();
// for(Map map :list){
// newList.add(map2Object(map,clz));
// }
// return newList;
// }
}