2011-11-19 175 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