Spring学习笔记:spring集成hibernate
来源:互联网 发布:没有货怎么开淘宝店铺 编辑:程序博客网 时间:2024/05/22 04:40
Spring集成hibernate有两种方式:1 完全使用hibernate编写dao层,把dao注入到spring由spring来管理生命周期,这种方式的好处是dao层与spring没有耦合关系;缺点是需要谨慎处理hibernate的session 关闭, exception, transaction. 2 使用spring的HibernateDaoSupport.这样的话dao层使用spring提供的一系列模板方法,同时不用关心session, exception,事务管理也交给了spring.第一种方式就不说了,基本无需改变dao层。只需要把dao注入就可以了,就学习一下第二种。首先需要注入一个sessionFactory.
view plaincopy to clipboardprint?
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:dao/hibernate/Hibernate.cfg.xml" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:dao/hibernate/Hibernate.cfg.xml" />
</bean>
LocalSessionFactoryBean利用配置文件生成sessionFactory的代理实例,这样可以更好的和spring的事务协调工作。sessionFactory还有spring风格的配置, 它需要注入一个dataSource. 见下面的配置文件。
dao继承自HibernateDaoSupport:
view plaincopy to clipboardprint?
package dao.hibernate;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import model.Company;
public class CompanyDaoImpl extends HibernateDaoSupport implements CompanyDao{
public List list() {
return getHibernateTemplate().find("from Company c");
}
public Company getById(int id) {
return (Company) getHibernateTemplate().get(Company.class, id);
}
public List findByName(String name) {
return getHibernateTemplate().find("from Company where name like ?", name + "%");
}
public void deleteById(int id) {
Company c = (Company) getHibernateTemplate().load(Company.class, id);
getHibernateTemplate().delete(c);
}
public void save(Company c) {
getHibernateTemplate().save(c);
}
}
package dao.hibernate;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import model.Company;
public class CompanyDaoImpl extends HibernateDaoSupport implements CompanyDao{
public List list() {
return getHibernateTemplate().find("from Company c");
}
public Company getById(int id) {
return (Company) getHibernateTemplate().get(Company.class, id);
}
public List findByName(String name) {
return getHibernateTemplate().find("from Company where name like ?", name + "%");
}
public void deleteById(int id) {
Company c = (Company) getHibernateTemplate().load(Company.class, id);
getHibernateTemplate().delete(c);
}
public void save(Company c) {
getHibernateTemplate().save(c);
}
}
可以看出:所有hibernate的crud操作都封装在HibernateTemplate里面(HibernateDaoSupport持有一个HibernateTemplate),大大简化了hibernate的操作.
这样的话,dao持有一个hibernateTemplate, hibernateTemplate持有一个sessionFactory, 这样的话配置文件如下:
view plaincopy to clipboardprint?
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<!--prop key=""></prop-->
</props>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="companyDao" class="dao.hibernate.CompanyDaoImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<!--prop key=""></prop-->
</props>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="companyDao" class="dao.hibernate.CompanyDaoImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>
测试代码:
view plaincopy to clipboardprint?
public class Test {
public static void main(String[] args) throws InterruptedException, SQLException{
ApplicationContext c = new ClassPathXmlApplicationContext("spring-test.xml");
CompanyDao dao = (CompanyDao)c.getBean("companyDao");
Company com = new Company("www.sss.com","SSS","shanghai", new Date());
dao.save(com);//success
}}
public class Test {
public static void main(String[] args) throws InterruptedException, SQLException{
ApplicationContext c = new ClassPathXmlApplicationContext("spring-test.xml");
CompanyDao dao = (CompanyDao)c.getBean("companyDao");
Company com = new Company("www.sss.com","SSS","shanghai", new Date());
dao.save(com);//success
}}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunxing007/archive/2009/09/21/4575334.aspx
- Spring学习笔记:spring集成hibernate
- Spring学习笔记:spring集成hibernate
- spring学习笔记7——集成hibernate
- Quartz Spring集成学习笔记
- Jersey+Spring+Hibernate集成学习记录
- Spring MVC + Spring + Hibernate集成
- Struts+spring+hibernate学习笔记!
- Spring-Hibernate整合 学习笔记
- Spring 学习笔记整合 Hibernate
- Spring 学习笔记 整合Hibernate
- spring struts hibernate 集成
- spring集成hibernate事务处理
- Spring+Sturts2+Hibernate集成
- spring和hibernate集成
- Struts+Spring+Hibernate集成
- 概括spring hibernate集成
- Struts+Hibernate+Spring 集成
- spring hibernate集成
- 用eclipse自带的打包工具将web工程打成jar包的问题
- 行列转换--例子
- flex中添加基于sprite组件的问题
- 推荐3个所谓的“顶级”CSS技巧!
- spring学习笔记:spring mvc处理器映射(handlerMapping)
- Spring学习笔记:spring集成hibernate
- java取当前时间的前一天/后一天
- 重磅推出:Oracle客户端精简绿色版
- sql窗口函数
- VC++发生的错误信息 unresolved external symbol _WinMain
- linux服务器编程--EPOLL
- InforSuite——云计算与中间件的完美结合
- ASP.NET 利用异常处理删除文件夹
- opengl 绘制 ttf 字符串