基于javaweb+mysql的在线商城购物商城美妆商城(前台、后台)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
前台:
首页展示商品信息,注册,登录,查询商品,看商品详情,添加商品至购物车,更新、删除购物车中商品信息,下订单、订单查看等操作
后台:登录,商品上架下架、商品信息修改、添加,订单查看,类型管理:商品类型新增删除以及修改查询等
前台:
后台:
技术框架
JavaBean MVC JSP SSM(Spring SpringMVC MyBatis) MySQL Bootstrap JavaScript
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
<if test="typeCode !=null && typeCode != '' ">
and type_code like CONCAT("",#{typeCode},"%")
</if>
<if test="title !=null && title != '' ">
and title like CONCAT("%",#{title},"%")
</if>
</select>
<if test="putawayDate != null">putaway_date = #{putawayDate},</if>
<if test="storage != null">storage = #{storage},</if>
<if test="image != null">image = #{image},</if>
<if test="description != null">description = #{description},</if>
<if test="typeCode != null">type_code = #{typeCode},</if>
<if test="discount != null">discount = #{discount},</if>
</trim>
<where> id = #{id}</where>
</update>
</mapper>
<?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">
<mapper namespace="com.demo.shop.mapper.OrderMapper">
//从session中获取用户信息
int userId = ((User)session.getAttribute("session_user")).getId();
return orderMapper.getOrdersByUserId(userId);
}
//修改订单状态
@Override
public void updateOrderPayOrderNo(String orderNo) {
// TODO Auto-generated method stub
orderMapper.updateOrderPayOrderNo(orderNo);
}
}
/**
*
*/
package com.demo.shop.controller;
import com.demo.shop.bean.Order;
//submitUrl: list.action?pageIndex={0}
jumpUrl = this.submitUrl.replace("{0}", String.valueOf(i));
pager.append("<a href='"+jumpUrl+"'>"+i+"</a>");
}
}
//拼装 ...
pager.append("...");
//拼装尾页
//submitUrl: list.action?pageIndex={0}
jumpUrl = this.submitUrl.replace("{0}", String.valueOf(totalPageNum));
pager.append("<a href='"+jumpUrl+"'>"+totalPageNum+"</a>");
//当前页码靠近尾页 1 ... 91 92 93 94 95 96 97 98 99 100
}else if(this.pageIndex + 8 >= totalPageNum){
jumpUrl = this.submitUrl.replace("{0}", String.valueOf(1));
/**
* @param pageIndex the pageIndex to set
*/
public void setPageIndex(int pageIndex) {
System.out.println("pageIndex:"+pageIndex);
this.pageIndex = pageIndex;
}
/**
* @return the pageSize
*/
public int getPageSize() {
return pageSize;
}
/**
* @param pageSize the pageSize to set
*/
public void setPageSize(int pageSize) {
},
"user.email" : {
validators : {
notEmpty : {
message : '邮箱不能为空'
},
emailAddress : {
message : '邮箱格式不正确'
}
}
},
"user.phone" : {
validators : {
notEmpty : {
message : '电话不能为空'
},
phone : {
message : '电话号码错误',
country : 'CN'
}
}
},
"user.password" : {
validators : {
notEmpty : {
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar" aria-expanded="false"
aria-controls="navbar">
<span class="sr-only">显示导航条</span> <span class="icon-bar"></span> <span
class="icon-bar"></span> <span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="${ctx}/article/index">美妆商城</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="${ctx}/article/index">首页</a></li>
<li><a href="${ctx}/shopCar/showShopCar.do">购物车</a></li>
<li><a href="${ctx}/order/showOrder.do">我的订单</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<c:choose>
<c:when test="${not empty session_user}">
<li><a href="#"> <span style='color: red;'></span>
</a></li>
<li><a href="#">欢迎[<font color="red">${session_user.name}</font>]访问!</a></li>
<li><a href="${ctx}/user/logout">退出</a></li>
<li><a href="${ctx}/register">免费注册</a></li>
/* (non-Javadoc)
* 进行更新商品类型操作
*/
@Override
public void updateArticleType(ArticleType type) {
// TODO Auto-generated method stub
articleTypeMapper.updateArticleType(type);
}
/* (non-Javadoc)
* 进行添加商品类型操作
*/
@Override
public void saveArticleType(ArticleType type, String parentCode) {
// TODO Auto-generated method stub
StringBuffer code = new StringBuffer();
</div>
</div>
<div class="control-group">
<label class="control-label">详细地址:</label>
<div class="controls">
<input type="text" class="input-large">
</div>
</div>
<div class="control-group">
<label class="control-label">联系电话:</label>
<div class="controls">
<input type="text" class="input-medium">
</div>
</div>
<div class="control-group">
<label class="control-label">邮箱:</label>
<div class="controls">
<input type="text" class="input-medium">
</div>
</div>
<div class="control-group">
<label class="control-label">地址别名:</label>
<div class="controls">
<input type="text" class="input-medium">
</div>
//指定订单的总金额
order.setAmount(totalPrice);
//保存订单信息 ,保存完订单信息之后,需要获取订单的id,因为需要将订单的id存放在订单详情中
orderMapper.saveOrder(order);
//获取订单主键的值
int orderId = order.getId();
for(OrderItem item : items) {
item.setOrderId(orderId);
//保存订单明细
orderItemMapper.saveItem(item);
}
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import com.demo.shop.bean.Article;
import com.demo.shop.bean.ArticleType;
import com.demo.manage.service.ManagerArticleServiceI;
import com.demo.manage.service.ManagerArticleTypeServiceI;
import com.demo.manage.util.pager.PageModel;
@Controller
@RequestMapping("/article_manager")
public class ManagerArticleController {
@Autowired
private ManagerArticleServiceI articleService;
@Autowired
private ManagerArticleTypeServiceI articleTypeService;
<li>购物流程</li>
<li>会员介绍</li>
<li>生活旅行/团购</li>
<li>常见问题</li>
<li>购物指南</li>
</ul>
</div>
<div class="yui3-u-1-6">
<h4>配送方式</h4>
<ul class="unstyled">
<li>上门自提</li>
<li>211限时达</li>
<li>配送服务查询</li>
<li>配送费收取标准</li>
<li>海外配送</li>
</ul>
</div>
<div class="yui3-u-1-6">
<h4>支付方式</h4>
<ul class="unstyled">
<script src="${pageContext.request.contextPath }/resources/jquery/jquery.min.js"></script>
<script src="${pageContext.request.contextPath }/resources/bootstrap/js/bootstrap.js"></script>
<script src="${pageContext.request.contextPath }/resources/js/taobao.js"></script>
<script type="text/javascript">
$(function(){
/* $("#secondType").val("${secondType}");
$("#addTypeCode").val("${typeCode}"); */
})
</script>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//校验账号是否存在
function validName(obj){
if(obj.value!=null && obj.value !=""){
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/user_manager/validName",
data: "loginName="+obj.value,
success: function(msg){
if(msg == "exist"){
alert("账号已存在,请重新输入!");
obj.value = "";
}
}
});
/**
* 获取当前时间戳,单位秒
* @return
*/
public static long getCurrentTimestamp() {
return System.currentTimeMillis()/1000;
}
/**
* 获取当前时间戳,单位毫秒
* @return
*/
public static long getCurrentTimestampMs() {
return System.currentTimeMillis();
}
limit #{pageModel.startNum} , #{pageModel.pageSize}
</select>
<!-- 查询商品总记录数 -->
<select id="getTotalNum" resultType="int">
select count(*) from ec_article where disabled = '0'
<if test="typeCode !=null && typeCode != '' ">
and type_code like CONCAT("",#{typeCode},"%")
</if>
<if test="title !=null && title != '' ">
and title like CONCAT("%",#{title},"%")
</if>
</select>
<insert id="saveArtice">
insert into ec_article(title, supplier, price, locality, putaway_date,
storage, image, description, type_code, create_date)
values(#{title}, #{supplier}, #{price}, #{locality},
#{putawayDate}, #{storage}, #{image},