Spring + Hibernate开发
来源:互联网 发布:2016java程序员薪资 编辑:程序博客网 时间:2024/05/17 00:56
加入支持的顺序是先Spring,再加入Hibernate。
Spring中加入的支持包与Spring + JDBC开发时完全相同。
支持包还是只加入单独加入Hibernate时的支持包。
选择使用Spring配置文件来完成数据库连接的管理。
Spring准备好了Hibernate的SessionFactory类的<bean>配置。
Spring自动生成了一个id为dataSource的<bean>。
取消掉建立HibernateSessionFactory的功能,因为Spring已经建立好了这个类。
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource">
<propertyname="driverClassName"value="oracle.jdbc.OracleDriver">
</property>
<propertyname="url"value="jdbc:oracle:thin:@localhost:1521:ORCL">
</property>
<propertyname="username"value="sunxun"></property>
<propertyname="password"value="123"></property>
</bean>
<beanid="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<propertyname="dataSource">
<refbean="dataSource"/>
</property>
<propertyname="hibernateProperties">
<props>
<propkey="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<propkey="hibernate.show_sql">
true
</prop>
<propkey="hibernate.format_sql">
true
</prop>
</props>
</property>
</bean>
</beans>
可以在里面配置show_sql等属性。
下面自动生成pojo映射,可以使用一对多等关系。
这里还是完成新闻和新闻类型的管理功能。
实现新闻的数据库操作,接口与之前没有区别:
public interface INewsDAO extends IDAO<Integer, News> {
}
Spring + JDBC时数据库操作使用的对象是JdbcTemplate,Spring +HIbernate开发时,同样不再使用Hibernate原有的对象进行数据库处理,改为使用HibernateTemplate来完成数据库操作。
建立实现类,继承一个HibernateDaoSupport类。
public class NewsDAOImpl extends HibernateDaoSupportimplements INewsDAO {
public void doCreate(News vo) throws Exception {
super.getHibernateTemplate().save(vo);
}
public void doRemove(Integer id) throws Exception {
super.getHibernateTemplate().delete(findById(id));
}
public void doUpdate(News vo) throws Exception {
super.getHibernateTemplate().update(vo);
}
public List<News> findAll()throws Exception {
return super.getHibernateTemplate().loadAll(News.class);
}
public List<News> findAll(finalint pageNo,finalint pageSize,final String keyword,
final String column)throws Exception {
// Spring没有封装HQL版本的分页查询方法.
// 1、使用Criteria来完成分页查询
DetachedCriteria c = DetachedCriteria.forClass(News.class);
// 加入模糊查询的条件
c.add(Restrictions.like(column,"%" + keyword + "%"));
List all = super.getHibernateTemplate().findByCriteria(c,
(pageNo - 1) * pageSize, pageSize);
// 2、使用Spring的扩展接口,通过匿名内部类的形式来扩展Spring原有的方法
// List all = super.getHibernateTemplate().executeFind(
// new HibernateCallback() {
// public Object doInHibernate(Session session)
// throws HibernateException, SQLException {
// // 这里就是封装好的Hibernate中的操作。
// // 内部类要使用外部类的属性,必须为属性加入final关键字
// String hql = "FROM News AS n WHERE n." + column + " LIKE ?";
// Query query = session.createQuery(hql);
// query.setString(0, "%"+keyword+"%");
// query.setFirstResult((pageNo - 1) * pageSize);
// query.setMaxResults(pageSize);
//
// return query.list();
// }
// });
returnall;
}
public News findById(Integer id)throws Exception {
return super.getHibernateTemplate().get(News.class, id);
}
public int getAllCount(String keyword, String column) throws Exception {
String hql = "SELECT COUNT(n) FROM News AS n WHERE n." + column
+ " LIKE ?";
List all = super.getHibernateTemplate().find(hql,"%" + keyword + "%");
return ((Long) all.get(0)).intValue();
}
}
总结HibernateTemplate的操作方法:
1) 继承自Session的方法:save(),update(),delete(),get/load(),saveOrUpdate()
2) 扩展了Session的方法:loadAll(),deleteAll(Collection)(删除一组数据),saveOrUpdateAll(Collection)(添加或修改一组数据)
3) HQL的操作方法:find(HQL,参数),返回List集合
4) Criteria的操作方法:findByCriteria(Criteria,firstResult,MaxResults),可以实现分页处理功能
5) 扩展方法:executeFind或execute,可以自行建立一个匿名内部类的HibernateCallback,并覆写doInHibernate方法,自行扩展数据库操作方法,可以实现HQL形式的分页功能。
配置:
<beanid="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate">
<propertyname="sessionFactory">
<refbean="sessionFactory"/>
</property>
</bean>
<beanid="newsDAOImpl"class="org.liky.dao.impl.NewsDAOImpl">
<propertyname="hibernateTemplate">
<refbean="hibernateTemplate"/>
</property>
</bean>
下面实现Service操作,与之前基本没有区别。
因此这里可以参考前面Spring + JDBC的部分来完成。
但要注意,AOP部分有一点区别:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<beanid="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<propertyname="transactionManager">
<refbean="transactionManager"/>
</property>
<!--
设置事务处理的方式,可以选择以下几种之一:
PROPAGATION_REQUIRED:如果之前有事务,则将当前操作合并到事务中,如果之前没有事务,则开始一个新的事务。
PROPAGATION_REQUIRED_NEW:无论之前是否有事务,都开始一个新的事务。
PROPAGATION_REQUIRED_NEVER:不使用事务处理,自动提交。
-->
<propertyname="transactionAttributes">
<props>
<propkey="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<propertyname="beanNames">
<list>
<value>*ServiceImpl</value>
</list>
</property>
<propertyname="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
transactionManager改变为Hibernate形式的事务处理对象。
- spring+hibernate开发网站
- struts+spring+hibernate开发
- Spring + Hibernate开发
- struts + hibernate + spring开发流程
- struts+hibernate+spring 开发入门
- jsf + spring + hibernate 开发示例
- myeclipse hibernate spring整合开发
- Hibernate+Spring+Struts2+ExtJS 开发
- Spring+Struts+Hibernate集成开发
- Struts+hibernate+spring整合开发
- 使用MyEclipse开发Spring+Hibernate
- Struts2+Hibernate+Spring开发过程
- Struts2+Spring+Hibernate整合开发
- MyEclipse Spring Hibernate整合开发
- Spring、Struts2、Hibernate集成开发
- spring+ hibernate + struth2 整合开发
- Spring+CXF+Hibernate开发webservice
- MyEclipse Spring Hibernate整合开发
- mysql数据类型详解
- jvisualvm功能演示
- 指针函数与函数指针的区别
- 走进小米电视:走进智慧家庭
- UInavigationBar自定义导航栏背景和按钮(二)
- Spring + Hibernate开发
- 下了eclipse后需要做的工作
- 马航飞机失踪最新消息:MH370在万米高空遭遇了什么?
- SQL Server 语法
- c# 生成word文档
- owb错误解决之ent-968和ORA-30333
- 资料外泄:给系统管理者的警告
- javascript中Max与Min,求最大值与最小值
- hibernate使用jdbc批量插入