zoukankan      html  css  js  c++  java
  • entityManager分页

    @PersistenceContext
    private EntityManager entityManager;

    十分操蛋。

    需要两步。

    第一步,查询一共需要多少条。

    第二步   分页得到数据

    Query query = this.entityManager.createNativeQuery(sb2.toString());
    
    query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
    // 获取总结果集
    List<ExceptionAnalysis> maps2 = query.getResultList();
    
    // 设置分页
    query.setFirstResult((page - 1) * size);
    query.setMaxResults(size);
    
    // 获取分页查询结果集
    List<ExceptionAnalysis> list = query.getResultList();
    //封装的分页
    PageResult pageResult = new PageResult(Long.valueOf(maps2.size()), list);

    上面的是返回map ,如果要返回对象 

    Query query = getEntityManager().createNativeQuery(sb.toString());
            query.unwrap(SQLQuery.class).setResultTransformer(new Testtrans(DealFlow.class));
            List<ExceptionAnalysisDetail> maps = query.getResultList();
            // 设置分页
            query.setFirstResult((page - 1) * size);
            query.setMaxResults(size);
            // 获取查询结果集
            List<DealFlow> list = query.getResultList();
            PageResult pageResult = new PageResult(Long.valueOf(maps.size()), list);
            return pageResult;
    Testtrans类
    package com.mairuide._frame.utils;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.lang.reflect.Modifier;
    import java.math.BigDecimal;
    import java.sql.Timestamp;
    
    import org.hibernate.transform.AliasToBeanResultTransformer;
    
    public class Testtrans extends AliasToBeanResultTransformer {
        private Class resultClass;
    
        public Testtrans(Class resultClass) {
            super(resultClass);
            this.resultClass = resultClass;
        }
    
        private static final long serialVersionUID = 1L;
    
        public Object transformTuple(Object[] tuple, String[] aliases) {
            Object obj = null;
            try {
                obj = resultClass.newInstance();
            } catch (InstantiationException e1) {
                e1.printStackTrace();
            } catch (IllegalAccessException e1) {
                e1.printStackTrace();
            }
            Method[] methods = resultClass.getMethods();// 返回这个类里面方法的集合
            Field[] fields = resultClass.getDeclaredFields();
            for (int k = 0; k < aliases.length; k++) {
                String aliase = getKey(fields, aliases[k]);
                char[] ch = aliase.toCharArray();
                ch[0] = Character.toUpperCase(ch[0]);
                String s = new String(ch);
                String[] names = new String[] { ("set" + s).intern(), ("get" + s).intern(), ("is" + s).intern(),
                        ("read" + s).intern() };
                Method setter = null;
                Method getter = null;
                int length = methods.length;
                for (int i = 0; i < length; ++i) {
                    Method method = methods[i];
                    /**
                     * 检查该方法是否为公共方法,如果非公共方法就继续
                     */
                    if (!Modifier.isPublic(method.getModifiers()))
                        continue;
                    String methodName = method.getName();
    
                    for (String name : names) {
                        if (name.equals(methodName)) {
                            if (name.startsWith("set") || name.startsWith("read"))
                                setter = method;
                            else if (name.startsWith("get") || name.startsWith("is"))
                                getter = method;
    
                        }
                    }
                }
                if (getter != null) {
                    Object[] param = buildParam(getter.getReturnType().getName(), tuple[k]);
                    try {
                        setter.invoke(obj, param);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            return obj;
        }
    
        private final static Object[] buildParam(String paramType, Object value) {
            Object[] param = new Object[1];
            if (paramType.equalsIgnoreCase("java.lang.String")) {
                param[0] = (String) (value);
            } else if (paramType.equalsIgnoreCase("int") || paramType.equalsIgnoreCase("java.lang.Integer")) {
                if (value instanceof BigDecimal) {
                    param[0] = ((BigDecimal) (value)).intValue();
                } else {
                    param[0] = (Integer) (value);
                }
            } else if (paramType.equalsIgnoreCase("long") || paramType.equalsIgnoreCase("java.lang.Long")) {
                param[0] = (Long) (value);
            } else if (paramType.equalsIgnoreCase("double") || paramType.equalsIgnoreCase("java.lang.Double")) {
                param[0] = (Double) (value);
            } else if (paramType.equalsIgnoreCase("BigDecimal") || paramType.equalsIgnoreCase("java.math.BigDecimal")) {
                param[0] = (BigDecimal) (value);
            } else if (paramType.equalsIgnoreCase("float") || paramType.equalsIgnoreCase("java.lang.Float")) {
                param[0] = (Float) (value);
            } else if (paramType.equalsIgnoreCase("char") || paramType.equalsIgnoreCase("Character")) {
                param[0] = (char) (value);
            } else if (paramType.equalsIgnoreCase("timestamp") || paramType.equalsIgnoreCase("java.sql.Timestamp")) {
                param[0] = (Timestamp) (value);
            }
            return param;
        }
    
        private String getKey(Field[] fields, String aliase) {
            String result = aliase;
            try {
                for (Field f : fields) {
                    String fieldName = f.getName();
                    String temp = fieldName.toUpperCase();
                    if (fieldName.equals(aliase) || temp.equals(aliase)) {
                        result = fieldName;
                        break;
                    }
                }
            } catch (Exception e) {
            }
            return result;
        }
    }
  • 相关阅读:
    改造vant日期选择
    css3元素垂直居中
    npm综合
    (转)网页加水印方法
    Mac下IDEA自带MAVEN插件的全局环境配置
    隐藏注册控件窗口
    High performance optimization and acceleration for randomWalk, deepwalk, node2vec (Python)
    How to add conda env into jupyter notebook installed by pip
    The Power of WordNet and How to Use It in Python
    背单词app测评,2018年
  • 原文地址:https://www.cnblogs.com/coder-lzh/p/10524718.html
Copyright © 2011-2022 走看看