최대 절전 모드에는 HQL 쿼리 구문이 있습니다. 그러나 우리가 더 친숙한 것은 SQL 문을 세는 것입니다. 그렇다면 최대 절전 모드 지원 SQL을 어떻게 만들어야합니까? 우리는 이것을 고려할 필요가 없습니다. 최대 절전 모드 팀은 이미 그렇게했습니다.
말도 안되는 말을하지 말고 예를 들어 보자.
t_user usr에서 *를 선택하십시오
위는 SQL 문이며 모든 사람이 알고있는 말도 안됩니다. 최대 절전 모드 가이 진술을 실행하려면 어떻게해야합니까? 코드보기 :
query query = session.createsqlQuery ( "select * from t_user usr");
그게 다야, 모든 사람이 남은 일을 알아야하며 문의가 진행되는 일은 정상입니다.
그렇다면 쿼리 후에 반환되는 것은 무엇입니까?
while (iter.hasnext ()) {object [] objs = (Object []) iter.next (); for (int i = 0; i <objs.length; i ++) {system.out.print (objs [i]); } system.out.println (); } 반환 된 각 결과는 객체 [] 배열입니다.
현재 누군가가 나와서 대상 지향적이라고 말했습니다. 예, 객체 지향적입니다. 아아, 방법이 없습니다.
계속 지켜 보자 :
t_user usr에서 {usr.*}를 선택하십시오 이것을보고, 일부 어린이 신발이 움직이기 시작한 것 같습니다. 버팀대는 무엇입니까?
걱정하지 마세요. 시간을 내십시오. 먼저 코드를 계속 읽자.
코드 사본은 다음과 같습니다.
query query = session.createsqlQuery ( "t_user usr에서 {usr.*} 선택). addentity (tuser.class);
addentitysqlquery addentity (String tablealias, class entitytype) "루트"엔터티 파라 메테르 : tablealias- SQL 테이블 aliasentityType- 뿌리로 추가 할 자바 유형의 Java 유형
그것과 동일합니다. 약간의 빨기입니다. 직접 사용할 수 있습니다.
첫 번째 매개 변수는 테이블의 별칭을 나타냅니다. 위의 진술과 마찬가지로, 표의 별칭은 USR이므로 첫 번째 매개 변수는 USR이고 두 번째 매개 변수는 쿼리 결과를 매핑 해야하는 클래스를 나타냅니다. 여기서, 우리는 매핑 파일의 니저를 통해 t_user 테이블에 맵핑되기 때문에 물론 니저가 여기에 있습니다. 그런 다음 확인한 후 SQL 문이 있으며 결과는 니저 유형입니다.
우리가 찾은 결과는 다음과 같습니다.
org.hibernate.tutorial.domain6.tuser@198cb3d
물론, 당신은 내 것과 달라야합니다. 닭고기를 움직이지 마십시오.
아마도 우리는 모든 것을 찾을 필요가 없을 것입니다. 현재 필요한 것은 별칭을 설정하는 것입니다.
U.id as {usr.id}, u.name as {usr.name}, u.age as t_user u에서 at {usr.age}를 선택하십시오. 우리는 필드의 별칭을 지정하는 데 사용했으며 프로그램에서도 마찬가지입니다.
코드 사본은 다음과 같습니다.
query query = session.createsqlQuery ( "U.id as {usr.id}, u.name as {usr.name}, u.age as t_user u"). addentity ( "usr", tuser.class);
<sql-query name = "querytuser"> <return alias = "usr"entity-name = "org.hibernate.tutorial.domain6.tuser" /> t_user usr에서 {usr.*}를 선택하십시오. 여기에 엔터티 이름은 전체 패키지 이름으로 작성해야합니다. 그렇지 않으면 오류 가보고됩니다. 여기에는 테이블의 별칭 및 클래스 이름을 지정하는 자막 반환이 있습니다.
코드보기 :
query query = session.getNamedQuery ( "QueryTuser"); query.setparameter ( "name", "shun"); 목록 List = Query.list (); 반복자 iter = list.iterator ();
우리는 이렇게 괜찮습니다. 주로 구성 파일의 구성으로 인해 Addentity를 추가하지 않았습니다.
구성 파일에 구성된 경우 테이블 별명 및 클래스 이름을 지정하려면 리턴 하위 태그가 있어야합니다. 이것은 주로 진술을 읽을 때 반복적 인 판단을 피합니다.
오랫동안 그것에 대해 이야기 한 후, 우리는 별명이있는 테이블에 대해 이야기하고 있습니다. 테이블에 별명이 없지만 결과를 개체에서 캡슐화하려면 어떻게해야합니까?
t_user usr에서 *를 선택하십시오
매우 간단합니다. Addentity의 오버로드 된 방법 Addentity (클래스 클레이즈)를 호출하면 테이블 별명없이 클래스 이름 만 제공하면됩니다.
물론 최대 절전 모드는 저장된 절차를 지원합니다. 구성 파일에서 SQL-Query의 호출 가능한 속성을 true로만 설정하면 현재 저장된 프로 시저를 표시해야합니다. 저장된 절차와 많은 접촉이 없기 때문에 앞으로 더 많이 연구 한 다음 공부할 것입니다.
세션과 같은 해당 데이터 작업 방법을 호출하면 최대 절전 모드의 내장 SQL 문으로 변환되지만 SQL 문의 형식을 직접 제어하려면 어떻게해야합니까?
최대 절전 모드도 실제로 그것을 생각했습니다.
매핑 파일에 직접 추가합니다.
<SQL-Insert> t_user (이름, 에이지) 값 (?,?) </sql-insert> <sql-update>에 삽입하십시오. 사용자 set user_name =?, age =? 여기서 user_id =? </sql-update>
이것은 클래스 태그에 자막으로 추가해야합니다. 우리는 여기서 모든 대문자이며, 최대 절전 모드의 기본 진술과 구별되며 다른 의미가 없습니다.
먼저 삽입 전화를 살펴 보겠습니다.
사용자 user = 새 사용자 (); user.setName ( "shun123123"); user.setage (23);
저장을 호출 할 때 최대 절전 모드 문은 다음과 같습니다.
최대 절전 모드 :
사용자에 삽입 (user_name, age) 값 (?,?)
우리가 구성한 SQL-Insert 태그의 명령문을 호출합니다.
사용자 user = (user) session.get (user.class, new Long (29)); user.setName ( "shun123123"); user.setage (23); 세션 .SAVE (사용자);
우리는 저장을 호출하고, 자동으로 업데이트를 호출하며, 현재 진술은 다음과 같습니다.
최대 절전 모드 :
사용자 세트 User_Name =?, age =? 여기서 user_id =?출력 명령문이 대문자로 구성되어 있음을 알 수 있습니다. 이는 우리가 구성한 명령문이 호출되었음을 의미합니다.