Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Odwzorowania relacyjno-obiektowe Hibernate preselekcja.

Podobne prezentacje


Prezentacja na temat: "Odwzorowania relacyjno-obiektowe Hibernate preselekcja."— Zapis prezentacji:

1 Odwzorowania relacyjno-obiektowe Hibernate preselekcja

2 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 2 Uniwersalny mechanizm preselekcji Obiekt typu Command (dane + parametry) Kryteria Klasa rozwijająca kryteria Metody w GenericDAO

3 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 3 Preselection (I) public class Preselection { protected Class entityClass; protected List criteriaList = new ArrayList (); protected Set selectedIdSet = new HashSet (); protected String tableName = "list"; protected String rowInputName = "id";....

4 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 4 Preselection (II) protected int currentRow = -1; protected int rowCount = 0; protected int currentPage = 0; protected int pageSize = 50; protected String sortProperty; protected int sortProjectionIndex = -1; protected boolean sortAscending = true;.....

5 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 5 AbstractCriterion public abstract class AbstractCriterion implements Criterion, Serializable { protected String path; protected String nestedPath; protected String property; public void setPath(String path) { this.path = path; this.nestedPath = CriteriaHelper.getNestedPath(path); this.property = CriteriaHelper.getNestedProperty(path); } public abstract void prepareCriteria(Criteria criteria); }

6 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 6 StringLikeCriterion public class StringLikeCriterion extends AbstractCriterion { private String stringLike; public void prepareCriteria(Criteria criteria) { String[] stringList = stringLike.split("\\s"); Junction junc = Restrictions.disjunction(); for (String word : stringList) junc.add(Restrictions.ilike(getProperty(), word, MatchMode.ANYWHERE)); criteria.add(junc); }

7 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 7 EntityListCriterion public class EntityListCriterion extends AbstractCriterion { private List entityIdList; public void prepareCriteria(Criteria criteria) { if (entityIdList!=null && !entityIdList.isEmpty()) { criteria.add( Restrictions.in(getProperty(), entityIdList)); }

8 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 8 findByCriteria (I) public final List findByCriteria(Preselection preselection) { Criteria criteria = getSession().createCriteria(preselection.getEntityClass()); CriteriaHelper helper = new CriteriaHelper(criteria); if (preselection.getCriteriaList() != null) { for (Criterion c : preselection.getCriteriaList()) { c.prepareCriteria(helper.getSubcriteria(c.getNestedPath())); }

9 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 9 findByCriteria (II) criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteria.setProjection(Projections.countDistinct("id")); int rowCount = (Integer) criteria.uniqueResult(); preselection.setRowCount(rowCount); helper.addOrder(preselection.getSortProperty(), preselection.isSortAscending()); ProjectionList projectionList = Projections.projectionList(); projectionList.add(Projections.distinct(Projections.id())); projectionList.add(helper.getProjection(preselection.getSortProperty())); criteria.setProjection(projectionList);

10 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 10 findByCriteria (III) criteria.setFirstResult(preselection.getCurrentPage() * preselection.getPageSize()); criteria.setMaxResults(preselection.getPageSize()); List idList = new ArrayList (); List resultList = criteria.list(); for (Object o : resultList) { Object[] row = (Object[]) o; Integer id = (Integer) row[0]; idList.add(id); }

11 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 11 findByCriteria (IV) criteria = getSession().createCriteria(preselection.getEntityClass()); helper = new CriteriaHelper(criteria); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteria.add(Restrictions.in("id", idList)); helper.addOrder(preselection.getSortProperty(), preselection.isSortAscending()); List list = criteria.list(); for (int i=0;i

12 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 12 CriteriaHelper (I) public class CriteriaHelper { private Map criteriaMap; public CriteriaHelper(Criteria criteria) { criteriaMap = new HashMap (); criteriaMap.put(null, criteria); }...

13 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 13 CriteriaHelper (II) public static final String getNestedPath(String path) { int k = path.lastIndexOf('.'); return (k > 0) ? path.substring(0, k) : null; } public static final String getNestedProperty(String path) { int k = path.lastIndexOf('.'); return (k > 0) ? path.substring(k+1) : path; }

14 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 14 CriteriaHelper (III) private static final String getAliasForNestedPath(String path) { if ( path == null) return null; return '_' + path.replace('.','_'); } private static final String getFullPath(String nestedPath, String property) { if (StringUtils.hasText(nestedPath)) return nestedPath + '.' + property; else return property; }

15 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 15 CriteriaHelper (IV) public Criteria getSubcriteria(String nestedPath) { Criteria c = criteriaMap.get(nestedPath); if (c == null) { String parent = getNestedPath(nestedPath); String prop = getNestedProperty(nestedPath); c = getSubcriteria(parent); c = c.createCriteria(prop, getAliasForNestedPath(nestedPath), Criteria.LEFT_JOIN); criteriaMap.put(nestedPath, c); } return c; }... }

16 Odwzorowania relacyjno-obiektowe Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 16 Wykorzystanie preselection = new Preselection(Komputer.class); preselection.getCriteriaList().add ( new StringLikeCriterion("identyfikator",”KL-”)); preselection.getCriteriaList().add(new IntCriterion("faktura.id", 4)); ArrayList list = (ArrayList ) urzadzenieService.findByCriteria(preselection);


Pobierz ppt "Odwzorowania relacyjno-obiektowe Hibernate preselekcja."

Podobne prezentacje


Reklamy Google