欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Hibernate Search牛刀小試

系統 1693 0
?

Hibernate Search牛刀小試

分類:? Java ? 5300人閱讀 ? 評論 (4) ? 收藏 ? 舉報
前幾天看到Hibernate與Lucene的整合框架Hiberate Search3.0.0.GA版出來了,昨天試這寫了一個Demo,感覺用起來的確很方便的,貼出來與大家分享一下。

1、創建POJO
package ?com.yehui;

import ?javax.persistence.CascadeType;
import ?javax.persistence.Column;
import ?javax.persistence.Entity;
import ?javax.persistence.GeneratedValue;
import ?javax.persistence.GenerationType;
import ?javax.persistence.Id;
import ?javax.persistence.JoinColumn;
import ?javax.persistence.ManyToOne;
import ?javax.persistence.Table;

import ?org.hibernate.search.annotations.DocumentId;
import ?org.hibernate.search.annotations.Field;
import ?org.hibernate.search.annotations.Index;
import ?org.hibernate.search.annotations.Indexed;
import ?org.hibernate.search.annotations.IndexedEmbedded;
import ?org.hibernate.search.annotations.Store;

/**
?*?Employee?generated?by?MyEclipse?Persistence?Tools
?
*/

@Entity
@Table(name?
= ? " employee " ,?catalog? = ? " hise " ,?uniqueConstraints? = ? {} )
@Indexed(index?
= ? " indexes/employee " )
public ? class ?Employee? implements ?java.io.Serializable? {
????
private ? static ? final ? long ?serialVersionUID? = ? 7794235365739814541L ;
????
private ?Integer?empId;
????
private ?String?empName;
????
private ?Department?dept;
????
private ?String?empNo;
????
private ?Double?empSalary;

????
// ?Constructors

????
/** ?default?constructor? */
????
public ?Employee()? {
????}


????
/** ?minimal?constructor? */
????
public ?Employee(Integer?empId)? {
????????
this .empId? = ?empId;
????}


????
/** ?full?constructor? */
????
public ?Employee(Integer?empId,?String?empName,
????????????String?empNo,?Double?empSalary)?
{
????????
this .empId? = ?empId;
????????
this .empName? = ?empName;
????????
this .empNo? = ?empNo;
????????
this .empSalary? = ?empSalary;
????}


????
// ?Property?accessors
????@Id
????@GeneratedValue(strategy?
= ?GenerationType.AUTO)
????@Column(name?
= ? " emp_id " ,?unique? = ? true ,?nullable? = ? false ,?insertable? = ? true ,?updatable? = ? true )
????@DocumentId
????
public ?Integer?getEmpId()? {
????????
return ? this .empId;
????}


????
public ? void ?setEmpId(Integer?empId)? {
????????
this .empId? = ?empId;
????}


????@Column(name?
= ? " emp_name " ,?unique? = ? false ,?nullable? = ? true ,?insertable? = ? true ,?updatable? = ? true ,?length? = ? 30 )
????@Field(name
= " name " ,?index = Index.TOKENIZED,?store = Store.YES)
????
public ?String?getEmpName()? {
????????
return ? this .empName;
????}


????
public ? void ?setEmpName(String?empName)? {
????????
this .empName? = ?empName;
????}


????@Column(name?
= ? " emp_no " ,?unique? = ? false ,?nullable? = ? true ,?insertable? = ? true ,?updatable? = ? true ,?length? = ? 30 )
????@Field(index
= Index.UN_TOKENIZED)
????
public ?String?getEmpNo()? {
????????
return ? this .empNo;
????}


????
public ? void ?setEmpNo(String?empNo)? {
????????
this .empNo? = ?empNo;
????}


????@Column(name?
= ? " emp_salary " ,?unique? = ? false ,?nullable? = ? true ,?insertable? = ? true ,?updatable? = ? true ,?precision? = ? 7 )
????
public ?Double?getEmpSalary()? {
????????
return ? this .empSalary;
????}


????
public ? void ?setEmpSalary(Double?empSalary)? {
????????
this .empSalary? = ?empSalary;
????}


????@ManyToOne(cascade?
= ?CascadeType.ALL)
????@JoinColumn(name
= " dept_id " )
????@IndexedEmbedded(prefix
= " dept_ " ,?depth = 1 )
????
public ?Department?getDept()? {
????????
return ?dept;
????}


????
public ? void ?setDept(Department?dept)? {
????????
this .dept? = ?dept;
????}


}

package ?com.yehui;

import ?java.util.List;

import ?javax.persistence.Column;
import ?javax.persistence.Entity;
import ?javax.persistence.GeneratedValue;
import ?javax.persistence.GenerationType;
import ?javax.persistence.Id;
import ?javax.persistence.OneToMany;
import ?javax.persistence.Table;

import ?org.hibernate.search.annotations.ContainedIn;
import ?org.hibernate.search.annotations.DocumentId;
import ?org.hibernate.search.annotations.Field;
import ?org.hibernate.search.annotations.Index;
import ?org.hibernate.search.annotations.Indexed;
import ?org.hibernate.search.annotations.Store;

/**
?*?Department?generated?by?MyEclipse?Persistence?Tools
?
*/

@Entity
@Table(name?
= ? " department " ,?catalog? = ? " hise " ,?uniqueConstraints? = ? {} )
@Indexed(index
= " indexes/department " )
public ? class ?Department? implements ?java.io.Serializable? {
????
private ? static ? final ? long ?serialVersionUID? = ? 7891065193118612907L ;
????
private ?Integer?deptId;
????
private ?String?deptNo;
????
private ?String?deptName;
????
private ?List < Employee > ?empList;

????
// ?Constructors

????@OneToMany(mappedBy
= " dept " )
????@ContainedIn
????
public ?List < Employee > ?getEmpList()? {
????????
return ?empList;
????}


????
public ? void ?setEmpList(List < Employee > ?empList)? {
????????
this .empList? = ?empList;
????}


????
/** ?default?constructor? */
????
public ?Department()? {
????}


????
/** ?minimal?constructor? */
????
public ?Department(Integer?deptId)? {
????????
this .deptId? = ?deptId;
????}


????
/** ?full?constructor? */
????
public ?Department(Integer?deptId,?String?deptNo,?String?deptName)? {
????????
this .deptId? = ?deptId;
????????
this .deptNo? = ?deptNo;
????????
this .deptName? = ?deptName;
????}


????
// ?Property?accessors
????@Id
????@GeneratedValue(strategy
= GenerationType.AUTO)
????@Column(name?
= ? " dept_id " ,?unique? = ? true ,?nullable? = ? false ,?insertable? = ? true ,?updatable? = ? true )
????@DocumentId
????
public ?Integer?getDeptId()? {
????????
return ? this .deptId;
????}


????
public ? void ?setDeptId(Integer?deptId)? {
????????
this .deptId? = ?deptId;
????}


????@Column(name?
= ? " dept_no " ,?unique? = ? false ,?nullable? = ? true ,?insertable? = ? true ,?updatable? = ? true ,?length? = ? 30 )
????
public ?String?getDeptNo()? {
????????
return ? this .deptNo;
????}


????
public ? void ?setDeptNo(String?deptNo)? {
????????
this .deptNo? = ?deptNo;
????}


????@Column(name?
= ? " dept_name " ,?unique? = ? false ,?nullable? = ? true ,?insertable? = ? true ,?updatable? = ? true ,?length? = ? 30 )
????@Field(name
= " name " ,?index = Index.TOKENIZED,store = Store.YES)
????
public ?String?getDeptName()? {
????????
return ? this .deptName;
????}


????
public ? void ?setDeptName(String?deptName)? {
????????
this .deptName? = ?deptName;
????}

}
???????? 不了解Hibernate映射相關的Annotation的朋友可以到Hibernate的官方網站下載Hibernate Annotation Reference,有http://wiki.redsaga.com/翻譯的中文文檔。當然,也可以直接使用hbm.xml文件。
??? ??? Hibernate Search相關的Annotation主要有兩個:
??? ?? ? @Indexed?? ?? ? ??? ??? 標識需要進行索引的對象,
??? ???? 屬性??? ??? index??? ???? 指定索引文件的路徑
??? ?? ?? @Field?? ?? ?? ?? ?? ?? ?? 標注在類的get屬性上,標識一個索引的Field
??? ??? ? 屬性?????? index???????? 指定是否索引,與Lucene相同
??? ??? ??? ??? ??? ???? store???????? 指定是否索引,與Lucene相同
??? ?? ?? ?? ?? ?? ?? ?? name??????? 指定Field的name,默認為類屬性的名稱
??? ?? ?? ?? ?? ?? ?? ?? analyzer??? 指定分析器

???????? 另外@IndexedEmbedded? 與? @ContainedIn 用于關聯類之間的索引
??? ?? ?? @IndexedEmbedded有兩個屬性,一個prefix指定關聯的前綴,一個depth指定關聯的深度
??? ?? ?? 如上面兩個類中Department類可以通過部門名稱name來索引部門,在Employee與部門關聯的前綴為dept_,因此可以通過部門名稱dept_name來索引一個部門里的所有員工。

2、配置文件
<? xml?version='1.0'?encoding='UTF-8' ?>
<! DOCTYPE?hibernate-configuration?PUBLIC
??????????"-//Hibernate/Hibernate?Configuration?DTD?3.0//EN"
??????????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
>

< hibernate-configuration >

< session-factory >
????
< property? name ="hibernate.dialect" >
????????org.hibernate.dialect.MySQLDialect
????
</ property >
????
< property? name ="hibernate.connection.url" >
????????jdbc:mysql://localhost:3306/hise
????
</ property >
????
< property? name ="hibernate.connection.username" > root </ property >
????
< property? name ="hibernate.connection.password" > 123456 </ property >
????
< property? name ="hibernate.connection.driver_class" >
????????com.mysql.jdbc.Driver
????
</ property >

????
< property? name ="hibernate.search.default.directory_provider" >
????????org.hibernate.search.store.FSDirectoryProvider
????
</ property >
????
< property? name ="hibernate.search.default.indexBase" > e:/index </ property >
????
????
< mapping? class ="com.yehui.Employee" ? />
????
< mapping? class ="com.yehui.Department" ? />
</ session-factory >

</ hibernate-configuration >
如果使用JPA,配置文件為
<? xml?version="1.0"?encoding="UTF-8" ?>
< persistence? xmlns ="http://java.sun.com/xml/ns/persistence"
????xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
????xsi:schemaLocation
="http://java.sun.com/xml/ns/persistence
????http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
?version ="1.0" >
????
????
< persistence-unit? name ="jpaPU" ?transaction-type ="RESOURCE_LOCAL" >
????????
< provider > org.hibernate.ejb.HibernatePersistence </ provider >
????????
< class > com.yehui.Department </ class >
????????
< class > com.yehui.Employee </ class >
????????
< properties >
????????????
< property? name ="hibernate.connection.driver_class"
????????????????value
="com.mysql.jdbc.Driver" ? />
????????????
< property? name ="hibernate.connection.url"
????????????????value
="jdbc:mysql://localhost:3306/hise" ? />
????????????
< property? name ="hibernate.connection.username" ?value ="root" ? />
????????????
< property? name ="hibernate.connection.password"
????????????????value
="123456" ? />
????????????
< property? name ="hibernate.search.default.directory_provider" ?
????????????????value
="org.hibernate.search.store.FSDirectoryProvider" />
????????????
< property? name ="hibernate.search.default.indexBase" ?
????????????????value
="e:/index" />
????????
</ properties >
????
</ persistence-unit >

</ persistence >
主要就是添加兩個屬性, hibernate.search.default.directory_provider指定Directory的代理,即把索引的文件保存在硬盤中( org.hibernate.search.store.FSDirectoryProvider)還是內存里( org.hibernate.search.store.RAMDirectoryProvider),保存在硬盤的話 hibernate.search.default.indexBase屬性指定索引保存的路徑。

3、測試代碼
package ?com.yehui;

import ? static ?junit.framework.Assert.assertNotNull;
import ? static ?junit.framework.Assert.assertTrue;

import ?java.util.List;

import ?org.apache.lucene.analysis.StopAnalyzer;
import ?org.apache.lucene.queryParser.QueryParser;
import ?org.hibernate.Query;
import ?org.hibernate.Session;
import ?org.hibernate.SessionFactory;
import ?org.hibernate.Transaction;
import ?org.hibernate.cfg.AnnotationConfiguration;
import ?org.hibernate.search.FullTextSession;
import ?org.hibernate.search.Search;
import ?org.junit.After;
import ?org.junit.Before;
import ?org.junit.BeforeClass;
import ?org.junit.Test;

public ? class ?SearchResultsHibernate? {
????
private ? static ?SessionFactory?sf? = ? null ;
????
private ? static ?Session?session? = ? null ;
????
private ? static ?Transaction?tx? = ? null ;

????@BeforeClass
????
public ? static ? void ?setupBeforeClass()? throws ?Exception? {
????????sf?
= ? new ?AnnotationConfiguration().configure( " hibernate.cfg.xml " ).buildSessionFactory();

????????assertNotNull(sf);
????}


????@Before
????
public ? void ?setUp()? throws ?Exception? {
????????session?
= ?sf.openSession();
????????tx?
= ?session.beginTransaction();
????????tx.begin();
????}


????@After
????
public ? void ?tearDown()? throws ?Exception? {
????????tx.commit();
????????session.close();
????}


????
public ? static ? void ?tearDownAfterClass()? throws ?Exception? {
????????
if ?(sf? != ? null )
????????????sf.close();
????}


????@Test
????
public ? void ?testAddDept()? throws ?Exception? {
????????Department?dept?
= ? new ?Department();
????????dept.setDeptName(
" Market " );
????????dept.setDeptNo(
" 6000 " );

????????Employee?emp?
= ? new ?Employee();
????????emp.setDept(dept);
????????emp.setEmpName(
" Kevin " );
????????emp.setEmpNo(
" KGP1213 " );
????????emp.setEmpSalary(8000d);
????????
????????session.save(emp);
????}


????@Test
????
public ? void ?testFindAll()? throws ?Exception? {
????????Query?query?
= ?session.createQuery( " from?Department " );

????????List
< Department > ?deptList? = ?query.list();

????????assertTrue(deptList.size()?
> ? 0 );
????}

????
????@Test
????
public ? void ?testIndex()? throws ?Exception? {
????????FullTextSession?fullTextSession?
= ?Search.createFullTextSession(session);
????????assertNotNull(session);

????????QueryParser?parser?
= ? new ?QueryParser( " name " ,? new ?StopAnalyzer());
????????org.apache.lucene.search.Query?luceneQuery?
= ?parser
????????????????.parse(
" name:Kevin " );
????????Query?hibQuery?
= ?fullTextSession.createFullTextQuery(luceneQuery,
????????????????Employee.
class );

????????List?list?
= ?hibQuery.list();
????????assertTrue(list.size()?
> ? 0 );
????}

????
????@Test
????
public ? void ?testIndex2()? throws ?Exception? {
????????FullTextSession?fullTextSession?
= ?Search.createFullTextSession(session);
????????assertNotNull(session);

????????QueryParser?parser?
= ? new ?QueryParser( " dept_name " ,? new ?StopAnalyzer());
????????org.apache.lucene.search.Query?luceneQuery?
= ?parser
????????????????.parse(
" dept_name:Market " );
????????Query?hibQuery?
= ?fullTextSession.createFullTextQuery(luceneQuery,
????????????????Employee.
class );

????????List?list?
= ?hibQuery.list();
????????assertTrue(list.size()?
> ? 0 );
????}

}
測試通過。OK

Hibernate Search牛刀小試


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品视频久久 | 综合色久 | 精品久久久久久久久久久久 | av播放在线 | 羞羞视频网站在线看 | 在线中文字幕日韩 | 国产一区二区三区久久久久久久久 | 国产欧美日韩一区二区三区四区 | 亚洲自拍偷拍在线 | 午夜影视在线观看 | a国产精品 | 国产精品日韩欧美 | 久久99国产精品 | 亚洲精品久久久蜜桃 | 欧美成人a∨高清免费观看 毛片特级 | 亚洲天堂网在线观看 | 日韩毛片大全免费高清 | 国产精品久久久久免费视频 | 米奇精品一区二区三区在线观看 | 国产亚洲女人久久久久久 | 亚洲欧美另类视频 | av免费网站在线观看 | 国产欧美一区二区三区久久人妖 | 日韩精品一二三区 | 狠狠撸电影院 | 久草影视网 | 欧美日韩视频在线第一区二区三区 | 欧美高清在线视频一区二区 | 亚欧在线一线 | 成年网址网站在线观看 | 欧美精品福利 | 日本不卡一区二区三区在线观看 | 国产精品久久久久久亚洲色 | 涩涩伊人 | 521国产精品视频 | av电影网站在线观看 | 欧美日韩在线看 | 国产在线观看中文字幕 | 日韩无毛 | 看中国国产一级毛片真人视频 | www.亚洲黄色 |