SSI框架小實例,實現增刪改查

初步學習SSI框架,做的struts2+spring+ibatis框架整合的小實例,實現增刪改查操作。

項目框架如下所示:



準備工作:導入需要的struts2、spring、ibatis的jar包,這裏不一一列舉了。

下面直接上完整的配置文件內容和代碼,不說明先後步驟了

一、配置文件

1、spring配置文件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:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<!-- 引入參數配置文件,數據庫配置信息 -->  
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath*:jdbc.properties</value>
			</list>
		</property>
	</bean>
	
<!-- 數據源配製 -->  	
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
				destroy-method="close">
				<property name="driverClassName" value="${jdbc.driverClassName}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
				<property name="maxActive" value="20" />
				<property name="maxWait" value="1000" />
				<property name="testOnBorrow" value="true"/> 
				<property name="testWhileIdle" value="true"/> 
				<property name="validationQuery" value="select 1 from dual"/> 
				<property name="poolPreparedStatements" value="true" />
				<property name="defaultAutoCommit" value="true" />
	</bean>
	
<!-- 注入ibatis配置文件 -->	
	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocations">
			<list>
				<value>classpath*:/sqlMapConfig.xml</value>
			</list>
		</property>
		<property name="dataSource" ref="dataSource" />
	</bean>
<!-- action -->	
	<bean id="userAction" class="com.user.action.userAction" scope="prototype">
		<property name="userService" ref="userSI"></property>
	</bean>
	
<!-- service -->	 
	<bean id="userSI" class="com.user.service.impl.UserServiceImpl">
		<property name="userdao" ref="userDI" />
	</bean>

<!-- dao -->
	<bean id="userDI" class="com.user.dao.impl.UserDaoImpl">
		<property name="sqlMapClient" ref="sqlMapClient" />
	</bean>

	
 </beans>

2、數據庫參數配置文件jdbc.properties

jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@198.10.3.138:1521:fapdb
jdbc.username=fapdb
jdbc.password=fapdb

3、ibatis配置文件sqlMapConfig.xml(持久層)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
    <settings  cacheModelsEnabled="true"                 
               enhancementEnabled="true" 
               lazyLoadingEnabled="false" 
               maxTransactions="32"
		       maxRequests="512" 
		       maxSessions="128"
               useStatementNamespaces="false"/>

   <sqlMap resource="com/user/model/sqlmap/User.xml" /> 
  
</sqlMapConfig>

4、實體類sql配置文件User.xml(持久層)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap        
        PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"        
        "http://ibatis.apache.org/dtd/sql-map-2.dtd">
 <!-- 定義配置名 -->       
<sqlMap namespace="User">
	<!-- <typeAlias alias="User" type="com.user.model.User"> </typeAlias> -->
	<resultMap id="userResultMap" class="com.user.model.User">
		<result property="userid" column="USERID" />
		<result property="username" column="USERNAME" />
		<result property="password" column="PASSWORD" />
	</resultMap>
	
<!-- 插入數據 --> 
	<insert id="insertUser" parameterClass="com.user.model.User">
		insert into gy_user(USERID,USERNAME,PASSWORD) values(#userid#,#username#,#password#)
	</insert>
<!-- 查詢數據 -->
	<select id="queryUser" parameterClass="com.user.model.User" resultClass="com.user.model.User">
		select USERID,USERNAME,PASSWORD from gy_user
		<dynamic prepend="where">
		<isNotEqual prepend="and" property="userid" compareValue="0">
			USERID=#userid#
		</isNotEqual>
		</dynamic>
		order by USERID
	</select>
<!-- 查詢by id -->
	<select id="queryUserById" parameterClass="int" resultClass="com.user.model.User">
		select USERID,USERNAME,PASSWORD from gy_user where USERID=#id#
	</select>
<!-- 刪除數據 -->	
	<delete id="deleteUser" parameterClass="int">
		delete from gy_user where USERID=#id#
	</delete>
<!-- 更新數據 -->
	<update id="updateUser" parameterClass="com.user.model.User">
		update gy_user set USERID=#userid#,USERNAME=#username#,PASSWORD=#password# where USERID=#userid#
	</update>
</sqlMap>

5、struts參數配置文件struts.properties

### 默認編碼
struts.i18n.encoding=UTF-8
### 使用spring裝配工廠
struts.objectFactory = spring
struts.objectFactory.spring.autoWire = name
struts.objectFactory.spring.useClassCache = true
struts.multipart.parser=jakarta
struts.multipart.saveDir=/tmp
struts.multipart.maxSize=209715200
struts.action.extension=do
struts.serve.static=true
struts.serve.static.browserCache=true
struts.enable.DynamicMethodInvocation = true
struts.enable.SlashesInActionNames = false
struts.tag.altSyntax=true
struts.devMode = false
struts.i18n.reload=true
struts.ui.templateDir=template
struts.ui.templateSuffix=ftl
struts.configuration.xml.reload=ture
struts.ui.theme=simple
struts.velocity.configfile = velocity.properties
struts.url.http.port = 80
struts.url.https.port = 443
struts.url.includeParams = get
struts.dispatcher.parametersWorkaround = false
struts.freemarker.templatesCache=false
struts.freemarker.beanwrapperCache=false
struts.freemarker.wrapper.altMap=true
struts.xslt.nocache=false
struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml
struts.mapper.alwaysSelectFullNamespace=false

6、struts配置文件struts.xml(控制層)

<?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>
    <span style="white-space:pre">	</span><package name="default" extends="struts-default">
    <span style="white-space:pre">	</span><!-- index_開頭的action,調用action類中的*方法 -->
    <span style="white-space:pre">		</span><action name="index_*" class="userAction" method="{1}">
    <span style="white-space:pre">			</span><result name="success">/success.jsp</result>
    <span style="white-space:pre">			</span><result name="userResult">/userResult.jsp</result>
    <span style="white-space:pre">			</span><result name="successdelete">/success.jsp</result>
    <span style="white-space:pre">			</span><result name="querybyidRes">/userUpdate.jsp</result>
    <span style="white-space:pre">			</span><result name="successupdate">/success.jsp</result>
    <span style="white-space:pre">		</span></action>
    <span style="white-space:pre">	</span></package>
    </struts>


7、web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 配置Spring --> 
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  
  <!-- 配置Struts -->
   <filter>
		<filter-name>struts</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>struts</filter-name>
		<url-pattern>*.action</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>struts</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>
</web-app>

二、model模型層

實體類User.java

package com.user.model;

public class User {
	private int userid;
	private String username;
	private String password;
	
	public int getUserid() {
		return userid;
	}
	public String getUsername() {
		return username;
	}
	public String getPassword() {
		return password;
	}
	public void setUserid(int userid) {
		this.userid = userid;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	
}

三、Action控制層

userAction.java類

package com.user.action;

import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.user.model.User;
import com.user.service.UserService;

public class userAction extends ActionSupport{
	HttpServletRequest request;
	private User user;
	private UserService userService;
	int id;

	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 UserService getUserService() {
		return userService;
	}

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

	public String insertUser() throws Exception{
		userService.insertUser(user);
		return "success";
	}
	//查詢用戶
	public String queryUser() throws Exception{
		List<User> userlist=userService.queryUser(user);
		System.out.println("userAction--size--"+userlist.size());
		for(int i=0;i<userlist.size();i++) {
			  System.out.println("userAction--"+userlist.get(i).getUserid()+"-"+userlist.get(i).getUsername()+"-"+userlist.get(i).getPassword());
		  }
		ActionContext.getContext().getSession().put("userresult", userlist);
		System.out.println("*****");
		return "userResult";
	}
	//刪除用戶
	public String deleteUser() throws Exception{
		System.out.println("userid:"+id);
		userService.deleteUser(id);
		return "successdelete";
	}
	//查詢用戶by id
	public String queryUserById() throws Exception{
		System.out.println("userid:"+id);
		User user=userService.queryUserById(id);
		System.out.println("--userAction--"+user.getUserid()+"--"+user.getUsername()+"--"+user.getPassword());
		ActionContext.getContext().getSession().put("result", user);
		return "querybyidRes";
	}
	//修改用戶
	public String updateUser() throws Exception{
		userService.updateUser(user);
		return "successupdate";
	}
	
}

四、Service接口+實現(業務邏輯層)

1、Service接口

UserService.java類

package com.user.service;

import java.util.List;
import com.user.model.User;

public interface UserService {
	//添加用戶
	public void insertUser(User user) throws Exception;
	//查詢用戶
	public List<User> queryUser(User user) throws Exception;
	//查詢用戶by id
	public User queryUserById(int id) throws Exception;
	//刪除用戶
	public void deleteUser(int id) throws Exception;
	//修改用戶
	public void updateUser(User user) throws Exception;
}

2、Service接口實現

UserServiceImpl.java類

package com.user.service.impl;

import java.util.List;
import com.user.model.User;
import com.user.service.UserService;
import com.user.dao.UserDao;

public class UserServiceImpl implements UserService{
	private UserDao userdao=null;
	public UserDao getUserdao() {
		return userdao;
	}

	public void setUserdao(UserDao userdao) {
		this.userdao = userdao;
	}
	//添加用戶
	public void insertUser(User user) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("插入數據User開始--->UserService");
		userdao.insertUser(user);
		System.out.println("插入數據User結束--->UserService");
	}
	//查詢用戶
	public List<User> queryUser(User user) throws Exception{
		System.out.println("查詢數據User開始--->UserService");
		List<User> userlist=userdao.queryUser(user);
		System.out.println("UserService--size--"+userlist.size());
		for(int i=0;i<userlist.size();i++) {
			  System.out.println("UserService--"+userlist.get(i).getUserid()+"-"+userlist.get(i).getUsername()+"-"+userlist.get(i).getPassword());
		  }
		System.out.println("查詢數據User結束--->UserService");
		return userlist;
	}
	//刪除用戶
	public void deleteUser(int id) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("刪除數據User開始--->UserService");
		userdao.deleteUser(id);
		System.out.println("刪除數據User開始--->UserService");
	}
	//查詢用戶by id
	public User queryUserById(int id) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("查詢數據BY ID開始--->UserService"+"---"+id);
		User user=userdao.queryUserById(id);
		System.out.println("查詢數據BY ID結束--->UserService"+"---"+id);
		return user;
	}
	//修改用戶
	public void updateUser(User user) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("更新數據User開始--->UserService");
		userdao.updateUser(user);
		System.out.println("更新數據User開始--->UserService");
	}

}

五、DAO接口+實現(持久層)

1、DAO接口

UserDao.java類

package com.user.dao;
import java.util.List;
import com.user.model.User;;

public interface UserDao {
	//添加用戶
	public void insertUser(User user);
	//查詢用戶
	public List<User> queryUser(User user);
	//查詢用戶by id
	public User queryUserById(int id);
	//刪除用戶
	public void deleteUser(int id);
	//修改用戶
	public void updateUser(User user);
}

2、DAO接口實現

UserServiceImpl.java類

package com.user.dao.impl;

import java.util.List;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.user.dao.UserDao;
import com.user.model.User;

public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao{
	//添加用戶
	public void insertUser(User user ){
		System.out.println("插入數據User開始--->UserDao"+"---"+user.getUserid()+"-"+user.getUsername()+"-"+user.getPassword());
		this.getSqlMapClientTemplate().insert("insertUser",user);
		System.out.println("插入數據User結束--->UserDao");
	}
	//查詢用戶
	public List<User> queryUser(User user){
		System.out.println("查詢數據User開始--->UserDao"+"---"+user.getUserid()+"-"+user.getUsername()+"-"+user.getPassword());
		List<User> userlist=(List<User>)this.getSqlMapClientTemplate().queryForList("queryUser", user);
		System.out.println("查詢數據User結束--->UserDao");
		return userlist;
	}
	//刪除用戶
	public void deleteUser(int id) {
		System.out.println("刪除數據User開始--->UserDao"+"---"+id);
		this.getSqlMapClientTemplate().delete("deleteUser", id);
		System.out.println("刪除數據User結束--->UserDao"+"---"+id);
	}
	//查詢用戶by id
	public User queryUserById(int id) {
		System.out.println("查詢數據BY ID開始--->UserDao"+"---"+id);
		User user=(User)this.getSqlMapClientTemplate().queryForObject("queryUserById", id);
		System.out.println("查詢數據BY ID結束--->UserDao"+"---"+id);
		return user;
	}
	//修改用戶
	public void updateUser(User user) {
		System.out.println("更新數據User開始--->UserDao"+"---"+user.getUserid());
		this.getSqlMapClientTemplate().update("updateUser", user);
		System.out.println("更新數據User結束--->UserDao"+"---"+user.getUserid());
	}
}

六、JSP文件(表示層)

1、index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  
  <body>
    <a href="userAdd.jsp">添加用戶</a><br>
    <a href="query.jsp">查詢/管理用戶</a>
  </body>
</html>

2、query.jsp查詢頁面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  
  <body>
  <form action="index_queryUser.do" method="post">
    用戶ID:<input type="text" name="user.userid" id="userid">
    <input type="submit" value="查詢">
    </form>
  </body>
</html>

3、userAdd.jsp添加用戶頁面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
  </head>
  
  <body>
    <form action="index_insertUser.do" method="post">
    <table>
    	<tr>
    		<td>用戶ID:</td>
    		<td><input type="text" name="user.userid" id="userid"></td>
    	</tr>
    	<tr>
    		<td>用戶名:</td>
    		<td><input type="text" name="user.username" id="username"></td>
    	</tr>
    	<tr>
    		<td>密碼:</td>
    		<td><input type="text" name="user.password" id="password"></td>
    	</tr>
    	<tr>
    		<td><input type="submit" value="插入數據"></td>
    	</tr>
    </table>
    </form>
  </body>
</html>

4、userUpdate.jsp修改用戶頁面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.user.model.User" ;%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
  </head>
  
  <body>
  <%
  	User user=(User)session.getAttribute("result");
  %>
    <form action="index_updateUser.do" method="post">
    <table>
    	<tr>
    		<td>用戶ID:</td>
    		<td><input type="text" name="user.userid" id="userid" value="<%=user.getUserid() %>" readonly></td>
    	</tr>
    	<tr>
    		<td>用戶名:</td>
    		<td><input type="text" name="user.username" id="username" value="<%=user.getUsername() %>"></td>
    	</tr>
    	<tr>
    		<td>密碼:</td>
    		<td><input type="text" name="user.password" id="password" value="<%=user.getPassword() %>"></td>
    	</tr>
    	<tr>
    		<td><input type="submit" value="修改數據"></td>
    	</tr>
    </table>
    </form>
  </body>
</html>

5、userResult.jsp用戶列表

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.user.model.User" ;%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  </head>
  
  <body>
  <%
  List<User> userlist=(List<User>)session.getAttribute("userresult"); 
  System.out.println("userResult.jsp--size--"+userlist.size());
  for(int i=0;i<userlist.size();i++) {
	  System.out.println("userResult.jsp--"+userlist.get(i).getUserid()+"-"+userlist.get(i).getUsername()+"-"+userlist.get(i).getPassword());
  }
  %>
    <table border="1">
    	<tr>
    		<td>用戶ID</td>
    		<td>用戶名</td>
    		<td>密碼</td>
    		<td>修改</td>
    		<td>刪除</td>
    	</tr>
    	<%for(int i=0;i<userlist.size();i++) {%>
    	<tr>
    		<td><%=userlist.get(i).getUserid() %></td>
    		<td><%=userlist.get(i).getUsername() %></td>
    		<td><%=userlist.get(i).getPassword() %></td>
    		<td><a href="index_queryUserById.do?id=<%=userlist.get(i).getUserid() %>">修改</a></td>
    		<td><a href="index_deleteUser.do?id=<%=userlist.get(i).getUserid() %>">刪除</a></td>
    	</tr>
    	<%} %>
    </table>
  </body>
</html>

6、success.jsp操作成功頁面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  
  <body>
    操作成功!
  </body>
</html>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章