2011-11-19 307 views
1

由於我對所有這些Java EE海洋都陌生,因此我想知道很多東西,並且隨着我在互聯網上閱讀越來越多的信息,我比任何事情都變得更加困惑。是我的推定正確的:春季和休眠配置

  1. 首先,我們需要Entity類(POJO)與@Entity@Table@Column等註釋。
  2. 其次,我們製作Service類,它將使用SessionFactory對單個數據庫的表進行物理更改,女巫將爲@Autowired。如果我是正確的,這就是所謂的DAO?這個課程是否需要實施其他課程?因爲我看到很多例子,控制器和實體之間的連接就像3個類一樣長(其中一個是接口)。並且在這些類中有一些實現。
  3. 我們需要的最後一件事是控制器將有Service類對象,它也將是@Autowired

所以總結:我們有@Controller類使用@Autowired服務類對象。服務類對象由通過@Autowired SessionFactory對象執行的save/delete/select方法組成?

如果我是正確的需要什麼配置所有這個計劃的工作?如果我錯了,請解釋如何在XML文件中儘可能少地進行配置。

謝謝。

回答

2

有幾個問題埋在這裏,所以我會盡力給你高級答案。

@Entity 這將決定你的對象,更重要的是(與其他註釋你提到),它可以讓休眠/ JPA成功映射和堅持這些數據選擇的RDBMS。

您需要使其工作的其他信息(除了當然包括適當的庫)是hibernate配置文件(hibernate.cfg.xml),它將用於確定數據庫連接信息,其他休眠設置以及要掃描的類(假設註釋正在使用中)。

@Service 是彈簧刻板印象表明,春季應該管理這個類,它應該被視爲一個服務(我會認爲這是一個幾乎標記接口,我相信這是處理幾乎相同的方式爲@零件)。至於實現任何接口或擴展特定的類,我不這麼認爲。我認爲最大的問題是掌握實體經理。讓我拉一小段從一個業餘愛好項目...

@Service 
public class UserServiceImpl implements UserService { 


private SessionFactory sessionFactory; 

public UserServiceImpl() { 
    sessionFactory = new Configuration().configure().buildSessionFactory(); 

} 


@Override 
public Collection<Person> getAllUsers() { 
    Collection<Person> peoples = new ArrayList<Person>(); 
    Session session = sessionFactory.getCurrentSession(); 
    session.beginTransaction(); 
    Query query = session.createQuery("from Person").setMaxResults(500); 
    peoples.addAll(query.list()); 
    session.close(); 
    return peoples; 
} 
} 

@Autowired 自動裝配Autowired是一個註釋Spring使用,以表明註釋字段將被注入(按類型可能是最常見的,但當然不是唯一的方法)(只要該類由spring管理或標記爲@Configurable)。

要反彙總: 您需要的唯一XML就是hibernate配置文件。你不必(只要你有權訪問會話工廠就不需要自動連接。)

+0

感謝您的回覆,我終於有時間觀看它了。問題爲什麼在你的例子中你需要實現其他類?我認爲實現只有當你有幾個類似的類可以在實現的類中進行概括時才需要實現,例如披薩,麪食,湯(這些類實現食物)是食物(接口)。另一個問題:是否有足夠的三個類使用hibernate,一個是「@ Entity」,另一個是「@ Service」,最後一個是「@ Controller」? – Minutis

+1

對不起,延遲。 (在這個例子中)接口是我從另一個例子中剪切和粘貼的。對接口的深入討論將不適合註釋,但有一個很好的討論http://stackoverflow.com/questions/2659366/java-interfaces-methodology-should-every-class-implement-an-interface。至於類的數量....我認爲*技術上*,如果你有@Entity和配置文件,你可以編寫一個單元測試來進行查詢。 – jholder

1

你是在正確的軌道上。這是Spring和Hibernate的一個很好的walkthrough

您可以用@Service而不是@Autowired註釋您的服務,但兩者都可以使用。您需要在application-context.xml中添加一個部分來告訴Spring哪些包需要註釋。

你是正確的,服務是一個DAO,好了,這就是常見的用法,但你可以寫一個服務,如果你想,做多提供CRUD等干將的一個實體。實體代表一個數據庫表,一個控制器處理一個(或多個)的網址和服務是在這兩個使獲取和從數據庫中設置數據更容易的類通過提供由多個控制器稱爲CRUD等方法。

如果通過在鏈接的例子中運行,那麼它會給你一個好主意,如何在Spring工作的不同部分。

+0

嗨,很好的例子。是否有可能在一個文件中連接hibernate-context.xml和hibernate.cfg.xml會很好,配置在hibernate.cfg.xml文件可以被添加到hibernate-context.xml中,並且hibernate.cfg.xml將被刪除) – Minutis