也许标题有点误导,但我想向您请教一条建议。
现在假设我已经为我的 spring mvc 应用程序配置了休眠和事务。部分配置如下所示:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="oracle.jdbc.OracleDriver"/>
<property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="user" value="xxx"/>
<property name="password" value="xxx"/>
<property name="maxPoolSize" value="10"/>
<property name="maxStatements" value="0"/>
<property name="minPoolSize" value="5"/>
</bean>
<!-- Session Factory Declaration -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
<property name="packagesToScan" value="com.execon.models"/>
</bean>
<!-- Enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="txManager"/>
<!-- Transaction Manager is defined -->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
所以基本上我现在需要做的,只是@Autowired
我的 sessinFactory 到将管理数据库访问权限的类?
一个简单的示例,虽然它带有@Controller
,但我将其移至@Service
:
@Resource(name = "sessionFactory")
private SessionFactory sessionFactory;
@RequestMapping(value = "/")
public String getMainPage( Model model )
{
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Query query = session.createQuery( "from Period" );
List<Period> list = query.list();
System.out.println( list );
session.getTransaction().commit();
return "MainPage";
}
如您所见,我只是想将映射类的标准控制台列表放入。它工作得很好,但我需要一条建议如何在更大的项目中进行管理。我应该有一些 util 类来获取会话并开始事务吗?或者我应该使用一些模板来管理它?只是我不想写这个:
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//
//...
//
session.getTransaction().commit();
在我需要连接到数据库的每个地方。也许我错过了一些东西,或者完全错了?任何帮助,将不胜感激