hibernate 이름 조회 어떻게 실현

이름 조회란 무엇입니까?Hibernate는 맵 파일에 문자열 형식의 조회 문장을 정의할 수 있습니다. 이런 조회 방식이 명명 조회가 되면 명명 조회를 사용하는 데 어떤 장점이 있습니까?Hibernate를 사용하는 HQL은 자바 코드에 문자열 조회 문장을 써야 하기 때문에 HQL이 코드 사이에 섞여 코드의 가독성을 파괴한다. 명명 조회를 사용하면 업무 논리와 조회 문장을 분리하여 조회에 전념할 수 있고 SQL이나 HQL 코드가 전체 응용 프로그램에 분산되는 상황을 피할 수 있다.명명 조회를 응용하여 복잡한 조회를 할 수 있는 처리 명명 조회는 어떻게 실현됩니까?방법 1: 프로필에 표시된 아래에서 검색 문장을 설명합니다.비고: 무슨 뜻이에요?순수한 텍스트로 표시되어 있습니다. 이것이 없으면 <> & 문자는 XML에 직접 저장할 수 없습니다. 전의가 필요합니다. 이 표시를 사용하면 전의가 필요하지 않고 이 기호를 XML 문서에 저장합니다.예기치 않은 특수 기호로 인해 XML 확인 오류가 발생하는 것을 피할 수 있습니다
 
<hibernate-mapping>
<class name="com.test.bean.Student" table="student" catalog="users">
<id name="id" type="integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" length="11" />
</property>
<property name="age" type="integer">
<column name="age" />
</property>
<property name="sex" type="string">
<column name="sex" length="2" />
</property>
</class>
<!-- -->
<query name="findStudentByName">
<![CDATA[from Student where name = :name]]>
</query>
</hibernate-mapping>
방법2: 프로필에 표시된 안에서도 조회 문장을 설명할 수 있으나,java 코드를 호출할 때 지정(패키지+클래스+프로필명)해야 합니다
 
public List<Student> query(){
Session session = HibernateSessionFactory.getSession();
Query q = session.getNamedQuery("findStudentByName");
q.setString("name", "zhangsan");
List<Student> list = q.list();
return list;
}
방법 3: 원생 sql 조회 를 사용합니다. 이 방식을 사용하면 테이블의 모든 열을 다 써야 합니다. 그렇지 않으면'열 이름이 잘못되었습니다'오류가 발생합니다
 
<hibernate-mapping>
<class name="com.test.bean.Student" table="student" catalog="users">
<id name="id" type="integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" length="11" />
</property>
<property name="age" type="integer">
<column name="age" />
</property>
<property name="sex" type="string">
<column name="sex" length="2" />
</property>
<!-- -->
<query name="findStudentByName">
<![CDATA[from Student where name = :name]]>
</query>
</class>
</hibernate-mapping>
public List<Student> query(){
Session session = HibernateSessionFactory.getSession();
Query q = session.getNamedQuery("com.test.bean.Student.findStudentByName");
q.setString("name", "zhangsan");
List<Student> list = q.list();
return list;
}
비고: 표기에 표기를 적용하여 표의 모든 필드를 열거할 수도 있습니다. 위에서 설명한 방법과 마찬가지로 모든 열을 조회할 수 있습니다
 
<hibernate-mapping>
<class name="com.test.bean.Student" table="student" catalog="users">
<id name="id" type="integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" length="11" />
</property>
<property name="age" type="integer">
<column name="age" />
</property>
<property name="sex" type="string">
<column name="sex" length="2" />
</property>
</class>
<!-- -->
<sql-query name="findStudentByName">
<return alias="s" class="com.test.bean.Student">
</return>
<![CDATA[select {s.*} from student s where s.name = :name]]>
</sql-query>
</hibernate-mapping>
방법4: 원생 sql 조회를 사용하고return-scalar를 사용하여 필드 형식을 설정하면 조회 부분 필드를 실현할 수 있습니다
 
public List<Student> query(){
Session session = HibernateSessionFactory.getSession();
Query q = session.getNamedQuery("findStudentByName");
q.setString("name", "zhangsan");
List<Student> list = q.list();
return list;
}
또는:
 
<hibernate-mapping>
<class name="com.test.bean.Student" table="student" catalog="users">
<id name="id" type="integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" length="11" />
</property>
<property name="age" type="integer">
<column name="age" />
</property>
<property name="sex" type="string">
<column name="sex" length="2" />
</property>
</class>
<!-- -->
<sql-query name="findStudentByName">
<return-scalar column="name" type="string"/>
<return-scalar column="age" type="integer"/>
<![CDATA[select s.name , s.age from student s where s.name = :name]]>
</sql-query>
</hibernate-mapping>
public List<Object[]> query(){
Session session = HibernateSessionFactory.getSession();
Query query = session.getNamedQuery("findStudentByName");
query.setString("name", "zhangsan");
List<Object[]> list = query.list();
return list;
}

좋은 웹페이지 즐겨찾기