SSM框架整合--實現簡單的增刪改查(商品管理系統)

SSM框架整合步驟

1:搭建一個web工程,將所需的jar包放進去

2,創建數據庫,創建表

插入2條初始數據進去

INSERT INTO product VALUE(NULL,"手機",899,2);
INSERT INTO product VALUE(NULL,"電視",1299,5);

有了數據之後,將實體類創建出來

package com.jgl.model;

public class Product {
	
	private int id;  //商品編號
    private String pName;   //商品名稱
    private double pPrice;   //商品價格
    private int pNumber;   //商品數量
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	public String getpName() {
		return pName;
	}
	public void setpName(String pName) {
		this.pName = pName;
	}
	public double getpPrice() {
		return pPrice;
	}
	public void setpPrice(double pPrice) {
		this.pPrice = pPrice;
	}
	public int getpNumber() {
		return pNumber;
	}
	public void setpNumber(int pNumber) {
		this.pNumber = pNumber;
	}
	
	public Product() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Product(int id, String pName, double pPrice, int pNumber) {
		super();
		this.id = id;
		this.pName = pName;
		this.pPrice = pPrice;
		this.pNumber = pNumber;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", pName=" + pName + ", pPrice=" + pPrice + ", pNumber=" + pNumber + "]";
	}
	
}

我習慣從前端往後端的順序開發:

3,前端部分

3.1 先畫首頁index.jsp,放在WebContend下面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  

<html>  
<head>  
 
<title>首頁</title>  
</head>  
<body>  
    <h1>  
        <a href="${pageContext.request.contextPath}/product/getAllProduct">進入商品展示頁面</a>  
    </h1>  
</body>  
</html>  

3.2 在WEB-INF下面創建一個文件夾jsp,並在裏面畫3個頁面

allProduct.jsp代碼如下所示: 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>    

<html>  
  <head>  
  
    <title>商品列表</title>  
      
  </head>  
    
  <body>  
    <h6><a href="${pageContext.request.contextPath}/product/toAddProduct">添加商品</a></h6>  
    <table border="1">  
        <tbody>
        	<tr><td colspan="4" align="center"><h1>商品管理</h1></td></tr>  
            <tr>  
                <th>商品名稱</th>  
                <th>商品價格</th>  
                <th>商品數量</th>
                <th>操作</th>  
            </tr>  
            <c:if test="${!empty productList }">  
                <c:forEach items="${productList}" var="product">  
                    <tr>  
                        <td>${product.pName }</td>  
                        <td>¥${product.pPrice}</td>  
                        <td>${product.pNumber}</td> 
                        <td>  
                            <a href="${pageContext.request.contextPath}/product/getProduct?id=${product.id}">編輯</a>  
                            <a href="${pageContext.request.contextPath}/product/delProduct?id=${product.id}">刪除</a>  
                        </td>  
                    </tr>               
                </c:forEach>  
            </c:if>  
        </tbody>  
    </table>  
  </body>  
</html>  

addProduct.jsp代碼如下所示:  

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>    

<html>  
  <head>  
   
    <title>添加商品</title>  
  </head>  
    
  <body>  
    <h1>添加商品</h1>  
    <form action="${pageContext.request.contextPath}/product/addProduct" method="post">  
        <p>商品名稱:<input type="text" name="pName"></p>
        <p>商品價格:<input type="text" name="pPrice"></p>
        <p>商品數量:<input type="text" name="pNumber"></p>
        <input type="submit" value="添加">  
    </form>  
  </body>  
</html> 

editProduct.jsp代碼如下所示:  

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>    

<html>  
  <head>  
   
      
    <title>編輯商品</title>  

  </head>  
    
  <body>  
    <h1>編輯商品</h1>  
    <form action="${pageContext.request.contextPath}/product/updateProduct" method="post">  
        <input type="hidden" name="id" value="${product.id }"/>  
        <p>商品名稱:<input type="text" name="pName" value="${product.pName}"/></p> 
        <p>商品價格:<input type="text" name="pPrice" value="${product.pPrice}"/></p>   
   		<p>商品數量:<input type="text" name="pNumber" value="${product.pNumber}"></p>  
        <input type="submit" value="保存" />  
    </form>  
  </body>  
    
</html>  

 

4  後端部分 

4.1,表現層開發:創建一個包package com.jgl.controller,創建一個ProductController


package com.jgl.controller;  
  
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.jgl.model.Product;
import com.jgl.service.ProductService;  
 
@Controller  
@RequestMapping("/product")  
public class ProductController {
	
    @Autowired  
    private ProductService productService;  
    /**  
     * 獲取所有商品列表  
     * @param request  
     * @return  
     */  
    @RequestMapping("/getAllProduct")  
    public String getAllProduct(HttpServletRequest request,Model model){  
        List<Product> product = productService.findAll();  
        model.addAttribute("productList", product);  
        request.setAttribute("productList", product);  
        return "/allProduct";  
    }  
    /**  
     * 跳轉到添加商品界面  
     * @param request  
     * @return  
     */  
    @RequestMapping("/toAddProduct")  
    public String toAddProduct(){  
        return "/addProduct";  
    }  
    /**  
     * 添加商品並重定向到展示所有商品頁面  
     * @param product  
     * @param request  
     * @return  
     */  
    @RequestMapping("/addProduct")  
    public String addProduct(Product product,Model model){  
    	productService.save(product);  
        return "redirect:/product/getAllProduct";  
    }  
    /**  
     	*編輯商品 
     * @param product
     * @param request  
     * @return  
     */  
    @RequestMapping("/updateProduct")  
    public String updateProduct(Product product,HttpServletRequest request,Model model){  
        if(productService.update(product)){  
        	product = productService.findById(product.getId());  
            request.setAttribute("product", product);  
            model.addAttribute("product", product);  
            return "redirect:/product/getAllProduct";  
        }else{  
            return "/error";  
        }  
    }  
    /**  
     * 根據id查詢單個商品  
     * @param id  
     * @param request  
     * @return  
     */  
    @RequestMapping("/getProduct")  
    public String getProduct(int id,HttpServletRequest request,Model model){  
        request.setAttribute("product", productService.findById(id));  
        model.addAttribute("product", productService.findById(id));  
        return "/editProduct";  
    }  
    /**  
     * 刪除商品  
     * @param id  
     * @param request  
     * @param response  
     */  
    @RequestMapping("/delProduct")  
    public String deleteProduct(int id,HttpServletRequest request,HttpServletResponse response){  
    	productService.delete(id);  
        return "redirect:/product/getAllProduct";  
    }  
}

4.2 業務層開發 :先來2個包com.jgl.service; com.jgl.service.impl;

創建一個ProductService接口,ProductServiceImpl實現類

ProductService.java代碼如下

package com.jgl.service;

import java.util.List;

import com.jgl.model.Product;

public interface ProductService {
	
	void save(Product product);  
    boolean update(Product product);  
    boolean delete(int id);  
    Product findById(int id);  
    List<Product> findAll();  

}

 ProductServiceImpl.java代碼如下

package com.jgl.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jgl.mapper.ProductMapper;
import com.jgl.model.Product;
import com.jgl.service.ProductService;

@Service  
@Transactional
public class ProductServiceImpl implements ProductService{

	@Resource  
    private ProductMapper mapper;  
  
    /**  
     * 根據  id  刪除 數據  
     */  
    public boolean delete(int id) {  
        return mapper.delete(id);  
    }  
    /**  
     * 查詢User的全部數據  
     */  
    public List<Product> findAll() {  
        List<Product> findAllList = mapper.findAll();  
        return findAllList;  
    }  
    /**  
     * 根據 id 查詢 對應數據  
     */  
    public Product findById(int id) {  
        Product user = mapper.findById(id);  
        return user;  
    }  
    /**  
     * 新增數據  
     */  
    public void save(Product user) {  
        mapper.save(user);  
    }  
    /**  
     * 根據 id 修改對應數據  
     */  
    public boolean update(Product user) {  
        return mapper.update(user);  
    }  
	
	

}

4.3 數據訪問層開發 先來個包com.jgl.mapper;

創建ProductMapper.java,並在同一個包中創建ProductMapper.xml

ProductMapper.java代碼如下:

package com.jgl.mapper;

import java.util.List;

import com.jgl.model.Product;

public interface ProductMapper {

	void save(Product product);    
    boolean update(Product product);    
    boolean delete(int id);    
    Product findById(int id);    
    List<Product> findAll();    
}

ProductMapper.xml代碼如下: 

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"     
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">    
<!--     
    namespace:必須與對應的接口全類名一致  ProductMapper.java  
    id :必須與對應接口的某個對應的方法名一致即必須要和ProductMapper.java接口中的方法同名。  
 -->    
 <mapper namespace="com.jgl.mapper.ProductMapper">  
   
    <insert id="save" parameterType="Product">  
        insert into product(p_name,p_price,p_number) values(#{pName},#{pPrice},#{pNumber})  
    </insert>  
      
    <update id="update" parameterType="Product">    
        update product set p_name=#{pName},p_price=#{pPrice},p_number=#{pNumber} where p_id=#{id}    
    </update>   
      
    <delete id="delete" parameterType="int">    
        delete from product where p_id=#{id}    
    </delete>    
        
     <!-- mybsits_config中配置的alias類別名,也可直接配置resultType爲類路徑 -->      
    <select id="findById" parameterType="int" resultType="Product">    
        select p_id id,p_name pName,p_price pPrice,p_number pNumber from product where p_id=#{id}    
    </select>    
        
    <select id="findAll" resultType="Product">    
        select p_id id,p_name pName,p_price pPrice,p_number pNumber from product    
    </select>   
      
 </mapper>

5.所需的配置文件

log4j.properties代碼如下:

### set log levels ###   
log4j.rootLogger = info , Console , D  
#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n  
log4j.logger.java.sql.ResultSet=INFO  
log4j.logger.org.apache=INFO  
log4j.logger.java.sql.Connection=INFO  
log4j.logger.java.sql.Statement=INFO  
log4j.logger.java.sql.PreparedStatement=INFO  
#output2file  
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender   
log4j.appender.D.File = D\:/logs/log.log   
log4j.appender.D.Append = true   
log4j.appender.D.Threshold = INFO \#\# \u00E8\u00BE\u0093\u00E5\u0087\u00BAinfo\u00E7\u00BA\u00A7\u00E5\u0088\u00AB\u00E4\u00BB\u00A5\u00E4\u00B8\u008A\u00E7\u009A\u0084\u00E6\u0097\u00A5\u00E5\u00BF\u0097   
log4j.appender.D.layout = org.apache.log4j.PatternLayout   
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n   

mybatis-config.xml中代碼如下:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"   
"http://mybatis.org/dtd/mybatis-3-config.dtd">  
<configuration>  
  
    <!-- 實體類,簡稱 -設置別名 -->  
    <typeAliases>  
        <typeAlias alias="Product" type="com.jgl.model.Product" />  
    </typeAliases>  
    <!-- 實體接口映射資源 -->  
    <!--  
        說明:如果xxMapper.xml配置文件放在和xxMapper.java統一目錄下,mappers也可以省略,因爲org.mybatis.spring.mapper.MapperFactoryBean默認會去查找與xxMapper.java相同目錄和名稱的xxMapper.xml  
    -->  
 	<mappers>  
        <mapper resource="com/jgl/mapper/ProductMapper.xml" />  
    </mappers>
</configuration>

spring-common.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: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-4.0.xsd  
        http://www.springframework.org/schema/context  
        http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/tx  
        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">  
  
<!-- Mybatis和Spring的整合 -->  
    <!-- 1. 數據源 : DriverManagerDataSource -->  
    <bean id="dataSource"  
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
        <property name="url" value="jdbc:mysql://localhost:3306/ssm" />  
        <property name="username" value="root" />  
        <property name="password" value="" />  
    </bean>  
  
    <!--  
        2. mybatis的SqlSession的工廠: SqlSessionFactoryBean dataSource:引用數據源  
  
        MyBatis定義數據源,同意加載配置  
    -->  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource"></property>  
        <property name="configLocation" value="classpath:mybatis-config.xml" />   
    </bean>  
  
    <!--  
        3. mybatis自動掃描加載Sql映射文件/接口 : MapperScannerConfigurer sqlSessionFactory  
  
        basePackage:指定sql映射文件/接口所在的包(自動掃描)  
    -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <property name="basePackage" value="com.jgl.mapper"></property>  
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>  
    </bean>  
  
    <!--  
        4. 事務管理 : DataSourceTransactionManager dataSource:引用上面定義的數據源  
    -->  
    <bean id="txManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource"></property>  
    </bean>  
  
    <!-- 5. 使用聲明式事務  
         transaction-manager:引用上面定義的事務管理器  
     -->  
    <tx:annotation-driven transaction-manager="txManager" />  
  
</beans> 

spring-mvc.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:context="http://www.springframework.org/schema/context"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-4.0.xsd  
    http://www.springframework.org/schema/mvc  
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  
  
    <!-- 註解掃描包 -->  
    <context:component-scan base-package="com.jgl.controller" />  
    <context:component-scan base-package="com.jgl.service" />  
  
    <!-- 開啓註解 -->  
    <mvc:annotation-driven />  
  
    <!--  
        配置靜態資源,直接映射到對應的文件夾,不被DispatcherServlet處理,3.04新增功能,需要重新設置spring-mvc-3.0.xsd  
    -->  
    <mvc:resources mapping="/img/**" location="/img/" />  
    <mvc:resources mapping="/js/**" location="/js/" />  
    <mvc:resources mapping="/css/**" location="/css/" />  
    <mvc:resources mapping="/html/**" location="/html/" />  
  
  
  
    <!-- 定義跳轉的文件的前後綴 ,視圖模式配置-->  
    <bean id="viewResolver"  
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <!-- 這裏的配置我的理解是自動給後面action的方法return的字符串加上前綴和後綴,變成一個 可用的url地址 -->  
        <property name="prefix" value="/WEB-INF/jsp/" />  
        <property name="suffix" value=".jsp" />  
    </bean>  
</beans> 

效果如下: 

 

 

 

 

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