1. 程式人生 > >SSH實現簡單增刪改查的功能例項

SSH實現簡單增刪改查的功能例項

在網上看到一篇寫的很不錯的關於SSH 整合實現簡單的增刪改查功能的例項。
因為也是初次使用SSH框架,通過這樣的例項更好的理解SSH框架。對原本的程式碼進行了修改和優化。如有不足之處,還請指教。
原文連結:http://blog.csdn.net/zhubinqiang/article/details/8498808

這裡寫圖片描述

與原例項更新之處和優化的地方。
新增1.實現hibernate自動建立資料表。
部分重要程式碼

<prop key="hibernate.hbm2ddl.auto">
    create
</prop>
 <class name="com.sqt.bean.User"
table="tb_Users" schema="db_hibernate"> <id name="id" type="int" column="ID"> <generator class="increment"></generator> </id> <property name="firstName" column="firstName" type="string"></property> <property name="lastName" column="lastName"
type="string"></property> <property name="age" column="age" type="int"></property> </class>

新增2.優化查詢功能
查詢功能在原先的程式碼中有的。但是返回的是user物件。我對它進行優化後,直接返回list,和查詢全部物件的方法一樣,當action返回SUCCESS時,<result name="success">/list.jsp</result>

@Override
public List<User>
findUserById(int id) { // TODO Auto-generated method stub System.out.println("-------UserDaoImp.findUserById-----------"+id); String hql = "from User u where u.id=:id order by u.id asc"; Query query=getSession().createQuery(hql); query.setInteger("id", id); List<User> list =query.list(); return list; }

優化3.原先在執行過程中會報錯。
報錯提示:

嚴重: Could not create and/or set value back on to object
java.lang.IllegalArgumentException
    at org.springframework.asm.ClassReader.<init>(Unknown Source)
    at org.springframework.asm.ClassReader.<init>(Unknown Source)
    at org.springframework.asm.ClassReader.<init>(Unknown Source)

這個原因是:

在表單提交的時候,action並沒有建立表單對應的例項(只在action中宣告:private User user)。
因為在寫表單對應的類時,寫了一個帶有引數的構造方法,而在action中只是定義了這個類,沒有實現 。

解決辦法:
在action中,new出表單對應的類

private User user= new User();

優化4
hibernate3換成hibernate4
hibernate4中getHibernateTemplate()沒有這個方法了。

private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public Session getSession() {
        return sessionFactory.getCurrentSession();
    }

直接用getSession()和getHibernateTemplate()一樣的效果。
解決了和spring3.0和hibernate4的結合。

主要優化就這些。

完整程式碼

aciton

package com.sqt.action.user;

import com.opensymphony.xwork2.ActionSupport;
import com.sqt.bean.User;
import com.sqt.service.UserService;

public class DeleteUserAction extends ActionSupport {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private User user=new User();
    private UserService userService;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    @Override
    public String execute() throws Exception {
        System.out.println("-------UserAction.deleteUser-----------"+user.getFirstName());
        this.userService.delete(user);
        return SUCCESS;
    }
}
package com.sqt.action.user;

import java.util.Map;
import com.sqt.service.UserService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ListUserAction extends ActionSupport {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private UserService userService;

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    @SuppressWarnings("unchecked")
    @Override
    public String execute() throws Exception {
        System.out.println("-------UserAction.ListUser-----------");
        Map request = (Map) ActionContext.getContext().get("request");

        request.put("list", this.userService.findAllUsers());
        return SUCCESS;
    }
}
package com.sqt.action.user;

import com.sqt.bean.User;
import com.sqt.service.UserService;

import com.opensymphony.xwork2.ActionSupport;

public class SaveUserAction extends ActionSupport {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private User user;
    private UserService userService;

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String execute() throws Exception {
//      呼叫service相關的方法,完成實際的業務處理
        System.out.println("-------UserAction.SaveUser-----------"+user.getFirstName());
        this.userService.doCreateUser(user);
        return SUCCESS ;
    }
}
package com.sqt.action.user;

import com.sqt.bean.User;
import com.sqt.service.UserService;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class UpdatePUser extends ActionSupport {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private User user=new User();
    private UserService userService;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    @Override
    public String execute() throws Exception {
        System.out.println("-------UserAction.UpdatePUser-----------"+user.getId());
        Map request = (Map) ActionContext.getContext().get("request");

        request.put("list", this.userService.findUserById(user.getId()));
        return SUCCESS;
    }
}
package com.sqt.action.user;


import com.opensymphony.xwork2.ActionSupport;
import com.sqt.bean.User;
import com.sqt.service.UserService;

public class UpdateUserAction extends ActionSupport {
    private User user=new User();
    private UserService userService;
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public UserService getUserService() {
        return userService;
    }
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    @Override
    public String execute() throws Exception {
        System.out.println("-------UserAction.UpdateUser-----------"+user.getFirstName());
        this.userService.update(this.user);
        return SUCCESS;
    }
}

bean

package com.sqt.bean;

public class User {  
    private int id;  
    private String firstName;  
    private String lastName;  
    private int age;  
    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  
    public String getFirstName() {  
        return firstName;  
    }  
    public void setFirstName(String firstName) {  
        this.firstName = firstName;  
    }  
    public String getLastName() {  
        return lastName;  
    }  
    public void setLastName(String lastName) {  
        this.lastName = lastName;  
    }  
    public int getAge() {  
        return age;  
    }  
    public void setAge(int age) {  
        this.age = age;  
    }  
    @Override  
    public String toString() {  
        return "ID: " + id + "FirstName: " + firstName;  
    }  
}  
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
     <class name="com.sqt.bean.User" table="tb_Users" schema="db_hibernate"> 

        <id name="id" type="int" column="ID">
            <generator class="increment"></generator>
        </id>

        <property name="firstName" column="firstName" type="string"></property>
        <property name="lastName" column="lastName" type="string"></property>
        <property name="age" column="age" type="int"></property>

    </class>
</hibernate-mapping>

dao

package com.sqt.dao;

import java.util.List;

import com.sqt.bean.User;

public interface UserDAO {  
    public void doCreateUser(User user);  
    public List<User> findAllUsers();  
    public void removeUser(User user);  
    public void updateUser(User user);  
    public List<User> findUserById(int id);
}  
package com.sqt.dao.impl;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import com.sqt.bean.User;
import com.sqt.dao.UserDAO;


public class UserDAOImpl  implements UserDAO {
    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public Session getSession() {
        return sessionFactory.getCurrentSession();
    }

    @Override
    public void doCreateUser(User user) {
        // TODO Auto-generated method stub
        System.out.println("-------UserDaoImp.doCreateUser-----------"+user.getFirstName());
        System.out.println("id"+user.getId());
        System.out.println("firstname"+user.getFirstName());
        System.out.println("lastname"+user.getLastName());
        System.out.println("age"+user.getAge());
        getSession().save(user);
    }

    @Override
    public List<User> findAllUsers() {
        // TODO Auto-generated method stub
        String hql = "from User u order by u.id asc";
        Query query=getSession().createQuery(hql);
        List<User> list =query.list();
        return list;
    }

    @Override
    public void removeUser(User user) {
        // TODO Auto-generated method stub
        System.out.println("-------UserDaoImp.removeUser-----------"+user.getFirstName());
        getSession().delete(user);
    }

    @Override
    public void updateUser(User user) {
        // TODO Auto-generated method stub
        System.out.println("-------UserDaoImp.updateUser-----------"+user.getFirstName());
        getSession().update(user);
    }

    @Override
    public List<User> findUserById(int id) {
        // TODO Auto-generated method stub
        System.out.println("-------UserDaoImp.findUserById-----------"+id);
        String hql = "from User u where u.id=:id order by u.id asc";
        Query query=getSession().createQuery(hql);
        query.setInteger("id", id);
        List<User> list =query.list();
        return list;
    }
}

service

package com.sqt.service;

import java.util.List;
import com.sqt.bean.User;

public interface UserService {
    public void doCreateUser(User user);
    public List<User> findAllUsers();
    public void delete(User user);
    public void update(User user);
    public List<User> findUserById(int id);
}
package com.sqt.service.impl;

import java.util.List;

import com.sqt.bean.User;
import com.sqt.dao.UserDAO;
import com.sqt.service.UserService;


public class UserServiceImpl implements UserService {
    private UserDAO dao;

    public UserDAO getDao() {
        return dao;
    }

    public void setDao(UserDAO dao) {
        this.dao = dao;
    }

    public void doCreateUser(User user) {
        System.out.println("-------UserService.doCreateUser-----------"+user.getFirstName());
        this.dao.doCreateUser(user);
    }

    public List<User> findAllUsers() {
        System.out.println("-------UserService.findAllUsers-----------");
        return this.dao.findAllUsers();
    }

    public void delete(User user) {
        System.out.println("-------UserService.deleteUser-----------"+user.getFirstName());
        this.dao.removeUser(user);
    }

    public void update(User user) {
        System.out.println("-------UserService.updateUser-----------"+user.getFirstName());
        this.dao.updateUser(user);
    }

    public List<User> findUserById(int id) {
        System.out.println("-------UserService.findUserById-----------"+id);
        return this.dao.findUserById(id);
    }

}

spring和hibernate的配置檔案
applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">


    <!-- 啟用spring註解支援 -->
    <context:annotation-config />

    <!-- 想到與Hibernate的hibernate.cfg.xml -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>org.gjt.mm.mysql.Driver</value>
        </property>

        <property name="url">
            <value>jdbc:mysql://127.0.0.1:3306/db_hibernate</value>
        </property>

        <property name="username">
            <value>root</value>
        </property>

        <property name="password">
            <value>123456</value>
        </property>

    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref local="dataSource"/>
        </property>

        <property name="mappingResources">
            <list>
                <value>com/sqt/bean/User.hbm.xml</value>                    
            </list>
        </property>

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                </prop>

                <prop key="hibernate.show_sql">
                    true
                </prop>

                <prop key="hibernate.hbm2ddl.auto">
                    create
                </prop>
            </props>
        </property>

    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref local="sessionFactory"/>
        </property>
    </bean>

    <bean id="userDAO" class="com.sqt.dao.impl.UserDAOImpl" scope="singleton">
        <property name="sessionFactory">
            <ref local="sessionFactory"/>
        </property>
    </bean>

    <bean id="userServiceTarget" class="com.sqt.service.impl.UserServiceImpl" scope="singleton">
        <property name="dao" ref="userDAO" />
    </bean>

    <bean id="userService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="target">
            <ref local="userServiceTarget"/>
        </property>

        <property name="transactionManager">
            <ref local="transactionManager"/>
        </property>

        <property name="transactionAttributes">
            <props>
                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

    <bean id="saveUserAction" class="com.sqt.action.user.SaveUserAction" scope="prototype">
        <property name="userService" ref="userService"></property>
    </bean>

    <bean id="listUserAction" class="com.sqt.action.user.ListUserAction" scope="prototype">
        <property name="userService" ref="userService"></property>
    </bean>

    <bean id="removeUserAction" class="com.sqt.action.user.DeleteUserAction" scope="prototype">
        <property name="userService" ref="userService"></property>      
    </bean>

    <bean id="updatePUserAction" class="com.sqt.action.user.UpdatePUser">
        <property name="userService" ref="userService"></property>
    </bean>

    <bean id="updateUserAction" class="com.sqt.action.user.UpdateUserAction" scope="prototype">
        <property name="userService" ref="userService"></property>
    </bean>

    <bean id="UpdatePUser" class="com.sqt.action.user.UpdatePUser" scope="prototype">
        <property name="userService" ref="userService"></property>
    </bean>
</beans>

struts.xml 配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="ssh2" extends="struts-default">
        <action name="saveUser" class="saveUserAction">
            <result name="success" type="redirect">listUser.action</result>
        </action>

        <action name="listUser" class="listUserAction">
            <result name="success">/list.jsp</result>
        </action>

        <action name="deleteUser" class="removeUserAction">
            <result name="success" type="redirect">listUser.action</result>
        </action>

        <action name="updatePUser" class="updatePUserAction">
            <result name="success">/update.jsp</result>
        </action>

        <action name="updateUser" class="updateUserAction">
            <result name="success" type="redirect">listUser.action</result>
        </action>

        <action name="findUser" class="UpdatePUser">
            <result name="success">/list.jsp</result>
        </action>
    </package>
</struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

</web-app>

jsp頁面
index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  <body>
    <h1><font color="red">Operation List</font></h1>
    <s:a href="save.jsp">Save User</s:a><br/>
    <s:a href="listUser.action">List Users</s:a>
    <s:form action="findUser">
        <s:textfield name="user.id" label="id"></s:textfield>
        <s:submit></s:submit>
    </s:form>
  </body>
</html>

list.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  
    <title>My JSP 'list.jsp' starting page</title>
    <script type="text/javascript">
        function del(){
            if(confirm("Are you sure?")){
                return true;
            }
            return false;
        }
    </script>
  </head>

  <body>
    <h1><font color="red">Users List</font></h1>
    <s:a href="/ssh2/index.jsp">返回</s:a>
    <table border="1" width="80%" align="center">
        <tr>
            <th>序號</th>
            <th></th>
            <th></th>
            <th>年齡</th>
            <th>刪除</th>
            <th>更新</th>
        </tr>

        <s:iterator value="#request.list" id="us">
            <tr>
                <td>
                    <s:property value="#us.id"/>
                </td>
                <td>
                    <s:property value="#us.firstName"/>
                </td>
                <td>
                    <s:property value="#us.lastName"/>
                </td>
                <td>
                    <s:property value="#us.age"/>
                </td>
                <td align="center">
                    <s:a href="deleteUser.action?user.id=%{#us.id}"