• 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;
        }
    }
  • 相关阅读:
    【转】 cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
    HDU How many prime numbers
    《大学ACM的总结 》(转载)
    POJ 最小公倍数
    HDU 开门人和关门人
    HDU shǎ崽 OrOrOrOrz
    HDU Saving HDU 2111
    HDU 1106 排序
    strtok函数()
    HDU 2187汶川地震
  • 原文地址:https://www.cnblogs.com/coder-lzh/p/10524718.html
Copyright © 2020-2023  润新知