Hibernate命名查詢

2022-09-16 18:42:10 字數 4523 閱讀 6962

hibernate命名的查詢是通過一些有意義的名稱來使用查詢的方式。就類似於使用別名一樣。 hibernate框架提供命名查詢的概念,以便應用程式設計師不需要將查詢分散到所有的j**a**,進一步提高**的可維護性。

在hibernate中定義命名查詢有兩種方法:

如果要在hibernate中使用命名查詢,則需要了解@namedqueries@namedquery注釋。

我們來看看使用命名查詢的例子:

@namedqueries(  

)

j**a

我們首先建立乙個 j**a 專案:namedquery, 其完整的專案結構如下圖所示 -

在這個例子中,我們使用註解來定義持久化類中的命名查詢。只有三個檔案:

employee.j**a

hibernate.cfg.xml

maintest.j**a

在這個例子中,我們假設資料庫中有乙個em表,其中包含4列:idnamejobsalary,並且這個表中有一些記錄。

檔案:employee.j**a

它是乙個使用注釋定義命名查詢並將此類標記為實體的持久化類。

package com.yiibai;

import j**ax.persistence.*;

import j**ax.persistence.entity;

import j**ax.persistence.generatedvalue;

import j**ax.persistence.id;

@namedqueries(

) @entity

@table(name="em")

public class employee

public int getid()

public void setid(int id)

public string getname()

public void setname(string name)

public int getsalary()

public void setsalary(int salary)

public string getjob()

public void setjob(string job)

}

j**a

檔案:hibernate.cfg.xml

它是乙個配置檔案,用於儲存有關資料庫的資訊,如驅動程式類,url,使用者名稱,密碼和對映類等。

<?xml version='1.0' encoding='utf-8'?>

>

>

name="hbm2ddl.auto">update>

name="connection.driver_class">com.mysql.jdbc.driver>

name="connection.url">jdbc:mysql://localhost:3306/test>

name="connection.username">root>

name="connection.password">123456>

name="dialect">org.hibernate.dialect.mysql5innodbdialect>

name="show_sql">true>

>

>

xml

檔案:maintest.j**a

它是乙個使用命名查詢的j**a類,並根據查詢列印資訊。getnamedquery方法使用命名查詢並返回query的例項。

package com.yiibai;

import j**a.util.iterator;

import j**a.util.list;

import org.hibernate.boot.metadatasources;

import org.hibernate.boot.registry.standardserviceregistry;

import org.hibernate.boot.registry.standardserviceregistrybuilder;

import org.hibernate.*;

public class maintest

session.close();}}

在這種情況下,需要建立定義命名查詢的hbm檔案。 其他資源與上述示例中相同,除了持久化類employee.j**a,您不需要使用任何注釋和hibernate.cfg.xml檔案,需要指定hbm檔案中的對映資源。

emp.hbm.xml檔案應該是這樣的:

<?xml version='1.0' encoding='utf-8'?>

name="com.yiibai.employee" table="em">

name="id">

class="native">>

>

name="name">>

name="job">>

name="salary">>

>

name="findemployeebyname">

>

xml

持久化的類應該如下所示,檔案:employee.j**a -

package com.yiibai;

public class employee

public int getid()

public void setid(int id)

public string getname()

public void setname(string name)

public int getsalary()

public void setsalary(int salary)

public string getjob()

public void setjob(string job)

}

j**a

在hbm檔案中包含對映資源。檔案:hibernate.cfg.xml 如下所示 -

<?xml version='1.0' encoding='utf-8'?>

>

>

name="hbm2ddl.auto">update>

name="connection.driver_class">com.mysql.jdbc.driver>

name="connection.url">jdbc:mysql://localhost:3306/test>

name="connection.username">root>

name="connection.password">123456>

name="dialect">org.hibernate.dialect.mysql5innodbdialect>

name="show_sql">true>

>

>

xml

現在執行maintest.j**a檔案,它首先建立表結構,並向表中插入資料,然後使用命名查詢資料。得到結果如下所示-

log4j:warn please initialize the log4j system properly.

log4j:warn see for more info.

hibernate: create table em (id integer not null auto_increment, name varchar(255), job varchar(255), salary integer, primary key (id)) engine=innodb

hibernate: insert into em (name, job, salary) values (?, ?, ?)

hibernate: insert into em (name, job, salary) values (?, ?, ?)

hibernate: select employee0_.id as id1_0_, employee0_.name as name2_0_, employee0_.job as job3_0_, employee0_.salary as salary4_0_ from em employee0_ where employee0_.name=?

1 maxsu 8900 j**a開發工程師

Hibernate 命名查詢

1.定義 hibernate允許在對映配置檔案中定義字串形式的查詢語句,這種查詢方式被稱為命名查詢。2.建立表結構並新增測試資料 create table student id double age double name varchar 96 insert into student id age ...

hibernate 原生sql 命名查詢

sql query中必須把錶所有的列寫全才可以,否則會出現 列名無效 的錯誤 除非你使用return scalar來設定字段型別。使用return property來明確地指定字段 別名,但是列字段要寫全,兩種配置方式 select from blog t where t.content like ...

hibernate10 命名查詢

public class emptest 命名查詢 hibernate允許我們在xml對映檔案或者類中 使用註解的方式 定義字串形式的查詢語句!命名查詢 可以寫 hql也可以是sql語句!程式不區分命名查詢語句的型別 hql,sql 只會根據名稱進行查詢!getnamedquery 得到我們實現寫好...