最近做ssh组合的练习,实现一个用户管理模块,具有用户登陆,注册,用户信息修改三个功能,用户登陆时一切正常,注册新用户时出现错误,现问题已经解决,特备忘分享给像我一样的新手。
UserDao
package com.javasky.photo.dao;
import java.util.List;
import com.javasky.photo.model.User;
public interface UserDao {
//根据主键查找用户
public User findById(String id);
//根据用户名查找
public User getUserByUserName(String username);
//保存用户
public void saveUser(User user);
//删除用户
public void deleteUser(User user);
}
UserDaoHibernate
package com.javasky.photo.dao.hibernate;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.javasky.photo.dao.UserDao;
import com.javasky.photo.model.User;
public class UserDaoHibernate extends HibernateDaoSupport implements UserDao {
/* (non-Javadoc)
* @see com.hljxxg.photoprint.dao.UserDao#deleteUser(com.hljxxg.photoprint.model.User)
*/
public void deleteUser(User user) {
this.getHibernateTemplate().delete(user);
}
public User findById(String id) {
return (User)this.getHibernateTemplate().get(User.class, userid);
}
public void saveUser(User user) {
this.getHibernateTemplate().saveOrUpdate(user);
}
public User getUserByUserName(String userName){
List<User> list = this.getHibernateTemplate().findByNamedParam("from User user where user.username=:username", "username", userName);
if(list.size()==0){
return null;
}
return list.get(0);
}
}
UserService
package com.javasky.photo.service;
import java.util.List;
import com.javasky.photo.model.User;
public interface UserService {
public User findById(String id);
public void saveUser(User user);
public void updateUser(User user);
public void deleteUser(User user);
public User getUserByUsername(String username);
}
UserServiceImpl
package com.javasky.photo.service.impl;
import java.util.List;
import com.javasky.photo.dao.UserDao;
import com.javasky.photo.model.User;
import com.javasky.photo.service.UserService;
/**
* @author batllehawk
* Create 2008-11-28
* Version 1.0
*/
public class UserServiceImpl implements UserService {
private UserDao userDao;
/**
* @return the userDao
*/
public UserDao getUserDao() {
return userDao;
}
/**
* @param userDao the userDao to set
*/
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void deleteUser(User user) {
this.getUserDao().deleteUser(user);
}
public User findById(String userid) {
return this.getUserDao().findById(userid);
}
public void saveUser(User user) {
this.getUserDao().saveUser(user);
}
public void updateUser(User user) {
this.getUserDao().saveUser(user);
}
public User getUserByUsername(String username) {
return this.getUserDao().getUserByUserName(username);
}
}
spring的配置文件如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
default-autowire="byName">
<!-- 数据源配置dbcp 略 -->
<!-- sessionFactory配置 略-->
<!-- hibernate事务配置 略-->
<!-- 事务代理父类 -->
<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="save*"
>PROPAGATION_REQUIRED</prop>
<prop key="update*"
>PROPAGATION_REQUIRED</prop>
<prop key="delete*"
>PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
<property name="optimize">
<value>true</value>
</property>
</bean>
<!-- service -->
<bean id="userService" parent="baseTransactionProxy"
>
<property name="target"
>
<bean class="com.javasky.photo.service.impl.UserServiceImpl"></bean>
</property>
</bean>
<!-- DAO -->
<bean id="userDao" class="com.javasky.photo.dao.hibernate.UserDaoHibernate">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
</beans>
spring事务管理支持两种方式,一种编程式事务管理,一种声明式事务管理,我觉得如果采用第一种方式,那么当我们想取消事务的时候就比较麻烦,相比而言,修改配置文件简单些,这里我使用第二中方式,userServiecBean里红色部分表示我们给它加上事务管理
,另外,<property name="transactionAttributes">的属性中,红色部分的key命名我们要和UserService里的方法保持一致
,开始我的UserService注册用户的方法我命名为addUser,而配置文件中我这样设置
<prop key="save*">PROPAGATION_REQUIRED</prop>
key以save开头,导致出现以下错误
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
at org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1095)
at org.springframework.orm.hibernate3.HibernateTemplate$16.doInHibernate(HibernateTemplate.java:688)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:686)
at com.javasky.photo.dao.hibernate.UserDaoHibernate.saveUser(UserDaoHibernate.java:32)
at com.javasky.photo.service.impl.UserServiceImpl.saveUser(UserServiceImpl.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:139)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy1.saveUser(Unknown Source)
at com.javasky.photo.action.UserAction.addUser(UserAction.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1192)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:430)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:857)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509)
at java.lang.Thread.run(Thread.java:595)
如有不妥或更好的办法,希望不吝指出,谢谢!
下一篇我将贴出spring2.0整合hibernate3的配置
分享到:
相关推荐
《Struts1.2+Spring1.2+Hibernate3.0构建的企业人力资源管理系统详解》 在JavaEE领域,Struts、Spring和Hibernate是三个极为重要的框架,它们共同构成了经典的MVC(Model-View-Controller)架构,为企业级应用开发...
Struts1.2、Spring1.2和Hibernate3.1是经典的Java企业级开发框架组合,通常被称为SSH(Struts + Spring + Hibernate)集成。这个整合示例代码提供了一个全面的学习资源,帮助开发者理解如何将这三个强大的框架有效地...
3. **添加依赖**:在pom.xml或build.xml中添加Struts 1.2、Hibernate 3.3、Spring 3.0以及它们的依赖库。 4. **配置Struts**:编写struts-config.xml文件,定义Action、ActionForward和Form Bean。同时,需要在web....
在Spring中整合Hibernate,可以方便地实现数据持久化,并且Spring可以管理Hibernate的SessionFactory和Session,以确保事务的一致性。 在整合这三个框架时,通常会遵循以下步骤: 1. **环境配置**:安装并配置JDK...
4. 整合Spring和Hibernate:在Spring中配置Hibernate的SessionFactory Bean,使用HibernateTemplate或JdbcTemplate进行数据访问。 5. 测试和运行:通过JUnit进行单元测试,确保各层功能正常,然后部署应用,测试...
Struts1.2、Hibernate3.2、Spring2.5 和 DWR2.0 是一组经典的Java企业级开发框架组合,它们在Web应用程序开发中扮演着重要的角色。这些框架的集成为开发人员提供了强大的功能,使得后端数据管理、业务逻辑处理以及...
例如,学习如何在Struts中定义Action和ActionForm,如何配置Hibernate的实体类和映射文件,如何利用Spring管理Bean和配置事务,以及如何在DWR中设置远程调用的方法。此外,还要掌握HTML、CSS和JavaScript等前端技术...
这里我们关注的是一个整合了Spring 2.0、Hibernate 3.0、Struts 1.1以及XFire 1.2的项目。这些技术都是Java Web开发中的重要组件,各自在应用程序的不同层面提供服务。 Spring 2.0是Java企业级应用中的一个核心框架...
Struts1.2、Spring2和Hibernate3是Java Web开发中的三大框架,它们的整合是构建企业级应用的常见方式。这个"struts1.2,spring2,hibernate3整合实例代码 改进"提供了对这三者集成的一种改进方案,主要目标是提升系统...
5. **整合Hibernate和Spring**:利用Spring的LocalSessionFactoryBean和HibernateTemplate,让Spring管理Hibernate的SessionFactory和数据库操作。 在实际项目中,SSH整合可以实现以下优势: - **解耦合**:通过...
【Spring+Struts+Hibernate整合配置方案】 Spring、Struts和Hibernate是Java Web开发中三大核心框架,它们各自负责不同的职责:Spring作为依赖注入容器和面向切面编程(AOP)框架,提供应用的结构和事务管理;Struts...
在整合这三个框架时,Spring通常作为核心,管理Struts1.2的Action实例和Hibernate的SessionFactory。这样,Struts1.2处理HTTP请求,将控制权交给Spring,Spring再调用Hibernate执行数据库操作。Spring的AOP可以用来...
Struts1.2、Spring2和Hibernate3是Java Web开发中的三大框架,它们的整合是构建企业级应用的常见方式。这个实例代码提供了一个清晰的示例,展示了如何将这三个框架有效地结合在一起。 Struts1.2是MVC(Model-View-...
标题中的“spring整合hibernate的jar包”指的是在Java Web开发中,Spring框架与Hibernate持久层框架的集成。这两个框架结合使用可以提供强大的数据访问和业务逻辑处理能力。Spring作为一个全面的轻量级框架,提供了...
Struts2、Spring3和Hibernate4是Java Web开发中的三大框架,它们的整合是构建高效、灵活的企业级应用的常用方式。这篇详细的知识点解析将深入探讨这三个框架的各自功能,以及如何将它们有效地整合在一起。 **Struts...
在本文中,我们将深入探讨SSH1整合的关键知识点,并以"SSH1整合代码简单的(struts1.2+Hibernate2.5+Spring2.5)"为背景,解析它们如何协同工作。 **Struts1.2** 是MVC设计模式的实现,主要用于处理用户界面与业务...
3. **Spring2.5**:Spring是一个全面的后端开发框架,包含了依赖注入、AOP(面向切面编程)、事务管理等核心功能。在2.5版本中,Spring加强了与第三方库的集成,如Hibernate,使得开发者可以方便地在Spring环境中...
1、struts1.2+spring 2.0+hibernate3.2 2、struts的动作交由spring来管理,hibernate的配置集中在spring中配置。 3、增加了声明式事务处理,加强了hibernateTemplate的简单事务处理。 4、完整的Myeclipse的工程文件...