SSH 동적 조회 구체적 구현 Dao

package com.sxdf.manage.dao.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Component;
import com.sxdf.manage.dao.SnippetDao;

@Component("snippetDao")
public class SnippetDaoImpl implements SnippetDao {
	@Resource(name = "sessionFactory")
	private SessionFactory hu;
     //    (     count(*),        HQL  )
	public int count(final String hql, final Object[] param) {

		int count = 0;
		Session session = hu.getCurrentSession();
		Query query = session.createQuery(hql);

		if (param.length > 0) {
			for (int i = 0; i < param.length; i++) {
				query.setString(i, param[i].toString());
			}
		}

		List list = query.list();

		if (list.size() > 0) {
			count = list.size();
		}
		return count;
	}
     
             //                  
		public List<?> findPublic(final String hql, final Object[] param,
			final int start, final int limit) {
		Session session = hu.getCurrentSession();
		Query query = session.createQuery(hql);
		if (param.length > 0) {
			for (int i = 0; i < param.length; i++) {
				query.setString(i, param[i].toString());
			}
		}

		List<?> list = query.setFirstResult(start).setMaxResults(limit).list();
		return list;
	}
             //     hql
	        public String getHQL(Object[][] ob, Object[][] like
                          ,String[][] datetime
                          , String[] group,String[] asc, String[] desc) {
                StringBuffer hql = new StringBuffer();
                String ss = null;
                if (null != ob) {
                        for (Object[] o : ob) {
                                 // [key][value] name='value'
                                boolean b = ((null != o[1]) && (null != o[0])
                                                && (!"".equals(o[1].toString())) 
                                                && (!"".equals(o[0].toString())));
                                 if (b) {
                                         hql.append("and j." + o[0] + " =? ");
                                 }
                        }
                }
                if (null != like) {
                        for (Object[] l : like) {
                                 // [key][value] name like '%value%'
                                boolean bl = ((null != l[1]) && (null != l[0])
                                                 && (!"".equals(l[1].toString()))
                                                 && (!"".equals(l[0].toString())));
                                 if (bl) {
                                          hql.append("and j." + l[0] + " LIKE? ");
                                 }
                        }
                 }
                 //  (  )
		if (null != datetime) {


			for (String[] d : datetime) {
				// [key][value]
				boolean bd = ((null != d[1]) && (null != d[0])
						&& (!"".equals(d[1])) && (!"".equals(d[0]
						.toString())));
				if (bd) {

					hql.append("and to_char(j."+ d[0] +",'yyyy-mm-dd')" + " LIKE ? ");
				}
			}


		}
		//    group by [value]

		if (null != group && group.length > 0) {
			StringBuffer groupb = new StringBuffer();

			for (String str1 : group) {
				if (null != str1 && !"".equals(str1)) {

					groupb.append("j." + str1 + " , ");
				}

			}

			if (null != groupb && "".equals("")) {
				hql.append("group by ");
				hql.append(groupb.substring(0, groupb.lastIndexOf(",")));
			}

		}
		//   //  (    ) order by [value]
		if (null != asc && asc.length > 0 || null != desc && desc.length > 0) {

			String oy1 = null;
			String oy2 = null;
			// orderb.append("order by ");
			if (null != asc && asc.length > 0) {
				StringBuffer orderb1 = new StringBuffer();
				for (String str2 : asc) {

					if (null != str2 && !"".equals(str2)) {
						orderb1.append("j." + str2 + " , ");

					}
				}

				if (null != orderb1 && "".equals(orderb1)) {
					oy1 = orderb1.substring(0, orderb1.lastIndexOf(","))
							+ " asc ";

				}

			}

			if (null != desc && desc.length > 0) {
				StringBuffer orderb2 = new StringBuffer();
				for (String str3 : desc) {
					if (null != str3 && !"".equals(str3)) {
						orderb2.append("j." + str3 + " , ");
					}
				}

				if (null != orderb2 && !"".equals(orderb2)) {
					oy2 = orderb2.substring(0, orderb2.lastIndexOf(","))
							+ " desc ";

				}
			}

			if ((null != oy2 && !"".equals(oy2))
					|| (null != oy1 && !"".equals(oy1))) {
				hql.append("order by ");
				if (null != oy1 && !"".equals(oy1)) {
					hql.append(oy1);
				}
				if ((null != oy2 && !"".equals(oy2))
						&& (null != oy1 && !"".equals(oy1))) {
					hql.append(" , ");
				}
				if (null != oy2 && !"".equals(oy2)) {
					hql.append(oy2);
				}

			}

		}

		if (hql.toString().contains("and")) {
			ss = hql.substring(4, hql.length());

		}

		return ss;
	}
              //  (=、like)
	public List<Object> getValue(Object[][] ob, Object[][] like,String[][] datetime) {
		List<Object> list = new ArrayList<Object>();
		
		if (null != ob) {


			for (Object[] o : ob) {
				// [key][value]
				boolean b = ((null != o[1]) && (null != o[0])
						&& (!"".equals(o[1].toString())) && (!"".equals(o[0]
						.toString())));
				if (b) {


					list.add(o[1]);
				}


			}
		}
		
		if (null != like) {


			for (Object[] l : like) {
				// [key][value]
				boolean bl = ((null != l[1]) && (null != l[0])
						&& (!"".equals(l[1].toString())) && (!"".equals(l[0]
						.toString())));
				if (bl) {


					list.add("%" + l[1] + "%");
				}
			}


		}
		
		//  (  )
		if (null != datetime) {


			for (String[] d : datetime) {
				// [key][value]
				boolean bd = ((null != d[1]) && (null != d[0])
						&& (!"".equals(d[1])) && (!"".equals(d[0]
						.toString())));
				if (bd) {


					list.add("%" + d[1] + "%");
				}
			}


		}


		return list;
	}

}

다른 무관한 클래스 방법을 삭제했기 때문에, 일부 쓸모없는 import 도입이 존재할 수 있으며, 코드에 영향을 주지 않을 것이다
       
총괄적으로 말하자면 본고는if-else의 운용을 대량으로 사용하여 읽기 효과를 크게 낮춘다.여러분에게 좋은 방법과 건의가 있다면 귀 기울여 들어 주십시오.
세션 팩토리에 주석을 사용합니다.
이 클래스에서 상속된 SnippetDao는 이전 편에서 특별히 소개한 Dao 인터페이스 방법에 대한 상세한 설명은 윗글을 참조하십시오.
SSH 동적 조회 구체적 실현 서비스
Action 가져오기 예:
SnippetService 도입
@Resource(name = "snippetServiceImpl")
	private SnippetService ss;

다음은 액션 방법으로 이 인터페이스를 이용하여 원하는 검색을 실현합니다
  Object[][] aa1 =null;
	    Object[][] aa2 =null;
	    String[] group =null;
	    String[] asc =null;
	    String[] desc = null;;
	 ActionWriteUtil.writeStr(JsonUtil.getPurchaseJson((List<Purchase>)ss.search(Purchase.class, aa1,aa2 ,null,group,asc,desc,start, limit),
                                   ss.count(Purchase.class, aa1,aa2,null,group,asc,desc)));

어떠한 bean에 대해서도 서비스나dao층에서 조회 방법을 다시 쓸 필요가 없다(bean 속성*조회, 비교, 평균치 등 특수 조회 제외)
관련 기사:
SSH 동적 조회 패키지 인터페이스 소개
SSH 동적 조회 구체적 실현 서비스

좋은 웹페이지 즐겨찾기