이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 16672|회답: 0

[출처] createCriteria의 자세한 사용법은 Hibernate의 QBC 쿼리입니다

[링크 복사]
게시됨 2017. 8. 9. 오후 2:26:13 | | |

이제 id, name, age 속성을 가진 Student 클래스가 있다고 가정해 봅시다
문자열 hql = "학생 s로부터";
예전처럼, 보통 그렇게 하죠
Query query = session.createQuery(hql);
또는 조건에 따라 검색할 수도 있습니다.
문자열 hql = "학생 s에서 'King%'와 같은 s.name"
Query query = session.createQuery(hql);
만약 HQL 대신 QBC를 사용한다면, 코드는 다음과 같습니다:
기준 기준 =session.createCriteria(Student.class);
기준 기준 = Expression.like("이름", "king%");
이렇게 볼 수 없어. 그 다음 22세 연령에 검색 조건을 추가합니다.
HQL:
문자열 hql = "학생 s에서 '왕%'와 s.name 나이=22 ";
Query query = session.createQuery(hql);
리스트 리스트 = query.list();
QBC:
기준 기준 =session.createCriteria(Student.class);
기준 criterion1 = Expression.like("이름","king%");
기준 criterion2 = Expression.eq("age", newInteger(22));
기준.add(기준1).add(기준2);
리스트 리스트 = criteria.list();


훨씬 더 번거로워 보입니다. 하지만 프로젝트를 해본 사람이라면 모듈의 비즈니스 로직이 바뀌면 종종 SQL을 다시 작성해야 한다는 것을 알고 있습니다. 그리고 가장 짜증나는 것은 다른 사람의 HQL이나 SQL을 가져가는 것입니다.
QBC를 사용하면 코드의 가독성과 유지보수성이 크게 향상됩니다.
null 값은 다음 값임을 유의하는 것이 중요합니다.
예를 들어, null name을 가진 Student 객체를 찾고 싶을 때는 이렇게 작성해야 합니다
기준 기준 =session.createCriteria(Student.class);
Criterion criterion = Expression.isNull("name");
criteria.add(criterion).list();
그리고 그 사이에... 그리고 시간
기준 기준 =session.createCriteria(Student.class);
기준 criterion1 = Expression.ge("나이", 새로운 정수(20)); 하한선
기준 criterion2 = Expression.le("age", new Integer(25)); 천장
//这里也可以把上述两个条件添加到第三个条件里
기준 criterion3 =Expression.and(criterion1,criterion2);
criteria.add(criterion3).list();
20세에서 25세 사이의 학생과 동등합니다.
이는 s.age >= 20, s.age <=25


다음은 HQL과 QBC의 일반적으로 사용되는 쿼리 조건 비교입니다
HQL QBC를 의미하는 표현
> 이상일 때 = Expression.ge()
> Expression.gt() 이상입니다
< 미만 = Expression.le()
< Expression.lt() 미만입니다
equals = Expression.eq()
는 <>or!= Expression.ne()와 같지 않습니다.

Null은 null입니다. Expression.isNull()
is notnull Expression.isNotNull()
지정된 범위 내에서 ween과 Expression.between()
지정된 범위 내에서는 아니고, Expression.not(Expression.between())
Expression.in() 소장품 소속
Expression.not(Expression.in()) 컬렉션에 속하지 않음
그리고 expression.and()
또는 Expression.or()
표현이 아닙니다.not()
Expression.like 같은 퍼지 쿼리



1. net.sf.hibernate.Criteria Criteria 인스턴스 생성 이 인터페이스는 특정 영구 클래스에 대한 쿼리를 나타냅니다. 세션은 Criteria 인스턴스를 제조하는 데 사용되는 공장입니다.



Criteria crit = sess.createCriteria(Cat.class);


crit.setMaxResults(50);


List cats = crit.list();


2. 결과 집합의 범위를 좁히기 쿼리 조건(Criterion)은 net.sf.hibernate.expression.Criterion 인터페이스의 인스턴스입니다. net.sf.hibernate.expression.Expression 클래스는 내장된 Criterion 타입을 얻기 위해 정의합니다.


List cats = sess.createCriteria(Cat.class)


                .add( Expression.like("이름", "Fritz%")


                .add( Expression.between("weight", minWeight, maxWeight))


                .list();
표현식은 논리적으로 그룹화할 수 있습니다.

List cats = sess.createCriteria(Cat.class)



                .add( Expression.like("이름", "Fritz%")


                .add( Expression.or( Expression.eq( "age", new Integer(0) ), Expression.isNull("age"))


                .list();


List cats = sess.createCriteria(Cat.class)


                .add( Expression.in( "name", new String[]{"Fritz","Izi","Pk"})


                .add( Expression.disjunction()


                .add( Expression.isNull("age") )


                .add( Expression.eq("age", 새 Integer(0) )


                .add( Expression.eq("age", 새로운 Integer(1) )


                .add( Expression.eq("age", 새로운 Integer(2) ) ) )


                 .list();
미리 만들어진 조건 유형(표현식의 하위 클래스)이 많이 있습니다. SQL을 직접 삽입할 수 있게 해주는 유용한 기술이 있습니다.

List cats = sess.createCriteria(Cat.class)



                .add( Expression.sql("lower($alias.name) like lower(?)", "Fritz%", Hibernate.STRING))


                .list();  
{alias}가 자리 표시자인 경우, 쿼리된 엔터티의 줄 별칭으로 대체됩니다. (원래: {alias} 자리 표시자를 쿼리된 엔터티의 행 별칭으로 대체합니다.)


3. 결과 정렬하기 결과 집합을 정렬하기 net.sf.hibernate.expression.Order를 사용할 수 있습니다.


List cats = sess.createCriteria(Cat.class)



                .add( Expression.like("이름", "F%")


                .addOrder( Order.asc("name"))


                .addOrder( Order.desc("age"))


                .setMaxResults(50)


                .list();


4. 연관성 관계 관계 사이에 createCriteria()를 사용하여 관계가 있는 엔티티 간의 제약 조건을 쉽게 지정할 수 있습니다.

List cats = sess.createCriteria(Cat.class)



                 .add( Expression.like("이름", "F%")


                 .createCriteria("kittens")


                 .add( Expression.like("name","F%")


                 .list();


두 번째 createCriteria()는 새끼 고양이 컬렉션 클래스의 요소를 가리키는 새로운 Criteria 인스턴스를 반환한다는 점에 유의하세요. 다음과 같은 대체 형태는 특정 상황에서 유용합니다.


List cats = sess.createCriteria(Cat.class)


                .createAlias("kittens", "kt")


                .createAlias("mate", "mt")


                .add(Expression.eqProperty("kt.name", "mt.name"))


                .list();


(createAlias())는 Criteria의 새로운 인스턴스를 생성하지 않습니다. 앞선 두 쿼리에서 Cat 인스턴스가 보유한 새끼 고양이 컬렉션 클래스는 기준에 의해 사전 필터링되지 않았다는 점에 유의하세요! 기준에 맞는 새끼 고양이만 반환하고 싶다면 returnMaps()를 사용해야 합니다.


List cats = sess.createCriteria(Cat.class)


.createCriteria("kittens", "kt")


.add( Expression.eq("이름", "F%")


.returnMaps()


.list();


Iterator iter = cats.iterator();


while ( iter.hasNext())


{  


맵 맵 = (맵) iter.next();


고양이 고양이 = (고양이) 지도.get(Criteria.ROOT_ALIAS);


고양이 새끼 고양이 = (고양이) map.get("kt");


}


5. 동적 연관 가져오기 런타임에 FetchMode()를 설정하여 연관 객체의 자동 가져오기 정책을 변경할 수 있습니다.



List cats = sess.createCriteria(Cat.class)


                .add( Expression.like("이름", "Fritz%")


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


이 쿼리는 외부 조인을 통해 짝과 새끼 고양이 모두를 얻을 수 있습니다.


6. 예시 쿼리 net.sf.hibernate.expression.Example 클래스에 따르면, 지정된 인스턴스에서 쿼리 조건을 생성할 수 있습니다.


고양이 고양이 = 새 고양이();


cat.setSex('F');


cat.setColor(Color.BLACK);


목록 결과 = session.createCriteria(Cat.class)


                    .add( Example.create(cat) )


                    .list();
버전 속성, 표현 속성, 연관성은 모두 무시됩니다. 기본적으로 null 속성도 제외됩니다. 예제 적용 방식을 조정할 수 있습니다. 당신은 할 수 있어요
예시가 어떻게 적용되는지 조정하기 위해서입니다. 예시 예시 = Example.create(cat) .excludeZeroes() //exclude zero valued properties


.excludeProperty("color") //"color"라는 속성은 제외합니다. .ignoreCase() //대소문자에 구분이 없는 문자열 비교 수행


.enableLike(); 문자열 비교에 유사한 사용법


목록 결과 = session.createCriteria(Cat.class)


                      .add(예시)


                      .list();
예를 들어 관련 객체의 기준을 정하는 데도 도움이 됩니다. List results = session.createCriteria(Cat.class) .add(Example.create(cat) )


.createCriteria("mate") .add(예시.create(cat.getMate())) .list();


참조 코드는 다음과 같습니다:






이전의:LINQ 좌측, 우측, 내부 연결
다음:js에서 let과 var 정의 변수의 차이점
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com