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 동적 조회 구체적 실현 서비스
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
여러 github 계정즉, 모든 회사 리포지토리에는 이제 모든 개인 리포지토리와 동일한 도메인github.com이 있습니다. 곧 명백해지면서 회사 github 자격 증명 및 관련 ssh 키는 필연적으로 하나가 아닌 두 가지 측면에서 내 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.