前些天做了个学生信息的管理系统 无非是些信息的增删改查 ?这次用了ssh2不用模拟数据库了
注意点:
1.jar包
2.applicationContext.xml ?struts.xml ?hibernate.cfg.xml ?mode中类和映射文件User.hbm.xml
3.配置稍稍有点不同 ?
用hibernateTemplate配置了sessionFactory在dao中配置了hibernateTemplate ?也可以直接配置seesionFactory
?
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
4.在struts.xml中配置action 中的class必须和对应在applicationContext.xml的<bean id="***Action" class="com.***.action.**Action"> id的名字相对应,这样网页提交的action才能用spring实例化的对象
5.在(用User做对象)UserAction 中 声明userService ?或者在UserService中声明UserDAO的时候最好用接口声明
用的是动态代理 ?当然用类直接声明也是可以的 ?用的就是CGILB代理
6.dao要extends ?HibernateDaoSupport ?
下面放spring 和struts的配置?
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="userAction" class="com.aowin.action.UserAction" scope="prototype"> <property name="userService" ref="userService"></property> </bean> <bean id="userService" class="com.aowin.serviceimpl.UserServiceImpl"> <property name="userDAO" ref="userDAO"></property> </bean> <bean id="userDAO" class="com.aowin.daoimpl.UserDAOImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"></property> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation" value="classpath:hibernate.cfg.xml"></property> </bean> <!-- 负责开启、提交事务 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="transactionManager"></property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean id="autoproxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames" value="*Service"></property> <property name="interceptorNames" value="transactionInterceptor"></property> </bean> </beans>
?struts
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/user" extends="struts-default"> <action name="userlist" class="userAction" method="getUsers"> <result>/list.jsp</result> </action> <action name="input" class="userAction" method="addInput"> <result>/input.jsp</result> </action> <action name="update" class="userAction" method="update"> <result>/update.jsp</result> </action> <action name="updatedo" class="userAction" method="updatedo"> <result name="input">/result.jsp</result> <result>/result.jsp</result> </action> <action name="delete" class="userAction" method="delete"> <result>/result.jsp</result> </action> <action name="add" class="userAction" method="addUser"> <!-- 配置重复提交的拦截器 --> <interceptor-ref name="token"></interceptor-ref> <!-- 配置全局的拦截器(有单独的拦截器默认的就会被替换掉,注意此时一定要加上) --> <interceptor-ref name="defaultStack"></interceptor-ref> <result name="input">/result.jsp</result> <result name="success">/result.jsp</result> <result name="invalid.token">/error.jsp</result> </action> </package> </struts>
?dao?
import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.aowin.idao.IUserDAO; import com.aowin.model.User; public class UserDAOImpl extends HibernateDaoSupport implements IUserDAO { public void addUser(User user) { this.getHibernateTemplate().save(user); } public void deleteUser(User user) { this.getHibernateTemplate().delete(user); } public List<User> getAllUser() { String hql = "from User" ; List<User> list = this.getHibernateTemplate().find(hql); return list; } public void updateUser(User user) { this.getHibernateTemplate().update(user); } public User getOneUser(int id) { String hql = "select u from User u where u.id=?"; List<User> list = this.getHibernateTemplate().find(hql, id); return list.get(0); } }
?action ?中部分代码是老师的:
import java.util.List; import com.aowin.iservice.IUserService; import com.aowin.model.User; import com.aowin.serviceimpl.UserServiceImpl; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") public class UserAction extends ActionSupport { private int id; private String message; private User user; private List<User> userList; private IUserService userService; public IUserService getUserService() { return userService; } public void setUserService(IUserService userService) { this.userService = userService; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public int getId() { return id; } public void setId(int id) { this.id = id; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public List<User> getUserList() { return userList; } public void setUserList(List<User> userList) { this.userList = userList; } /** * 查询所有用户 * * @return */ public String getUsers() { userList = userService.getUserList(); return Action.SUCCESS; } /** * 准备添加用户 * * @return */ public String addInput() { return Action.SUCCESS; } /** * 添加用户 * * @return */ public synchronized String addUser() { userList = userService.getUserList(); // 业务逻辑的验证 if (userList.contains(this.user)) { this.message = "已经存在相同用户,不能添加"; return "input"; } // 增加用户 userService.addMessage(user.getUsername(), user.getAddress()); this.message = "添加用戶成功"; return Action.SUCCESS; } /** * 验证表单输入的合法性 */ public void validateAddUser() { if (null == this.user) { this.message = "请输入合法的用户名,地址"; // 强制去找input试图 this.addFieldError("", ""); } else if (null == user.getAddress() || "".equals(user.getAddress())) { this.message = "请输入合法的用户名或者地址"; this.addFieldError("", ""); } else if (null == user.getUsername() || "".equals(user.getAddress())) { this.message = "请输入合法的用户名或者地址"; this.addFieldError("", ""); } } /** * 准备修改用户 * * @return */ public String update() { for (User u : userService.getUserList()) { if (u.getId() == this.id) { user = u; } } return Action.SUCCESS; } /** * 修改用户 * * @return */ public String updatedo() { // 用户名 密码没有实际修改就提交 for (User u : userService.getUserList()) { if (u.getId() == this.id && u.getUsername().equals(user.getUsername()) && u.getAddress().equals(user.getAddress())) { this.message = "您没有做修改"; return Action.INPUT; } } // 用户名密码确实有修改过 if (userService.getUserList().contains(this.user)) { this.message = "存在相同的用户名、地址,不能修改"; return Action.INPUT; } userService.updateMessage(id, user.getUsername(), user .getAddress()); this.message = "修改用户成功"; return Action.SUCCESS; } /** * 验证修改用户 */ public void validateUpdatedo() { // 验证表单输入域的合法性 validateAddUser(); } /** * 删除用户 * * @return */ public String delete() { userService.delMessage(id); this.message = "删除成功"; return Action.SUCCESS; } }?显示用的是jsp页面 ?可以用S标签 ?也可以用一般的html标签
?