基于Java+Jsp+SpringMVC漫威手办商城系统设计和实现

     阅读:24

🍅 作者简介:CSDN特邀作者✌、java领域优质创作者💪

🍅关注公众号【java李杨勇】  简历模板、学习资料、面试题库等都给你

🍅文末获取源码联系🍅

一、前言介绍:

         随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中用户手办周边商城方面的要求也在不断提高,而漫威系列手办周边商城得到广大用户的青睐,使得漫威系列手办周边商城的开发成为必需而且紧迫的事情。漫威系列手办周边商城主要是借助计算机,通过对漫威系列手办周边商城所需的信息管理,增加用户的选择,同时也方便对广大用户信息的及时查询、修改以及对用户信息的及时了解。手办周边商城用户带来了更多的便利,该系统通过和数据库管理系统软件协作来满足用户的需求。计算机技术在现代管理中的应用,使计算机成为人们应用现代技术的重要工具。能够有效的解决获取信息便捷化、全面化的问题,提高效率。 

二、功能设计:

       本漫威系列手办周边商城系统主要功能设计为实现管理员;个人中心、系统公告管理、用户管理、商品系列管理、商品信息管理、订单评价管理、论坛管理、系统管理、订单管理用户;个人中心、订单评价管理、我的收藏管理、订单管理,前台首页;首页、商品信息、论坛信息、我的、跳转到后台、购物车客服等信息管理功能。系统操作流程如下:

三、功能截图:

 普通用户登录注册:

 首页主要功能介绍:商品信息、论坛信息、我的、跳转到后台、购物车客服等信息管理功能

 商品详情:可加入购物车、修改数量、立即购买和收藏商品

商品详情可以配置图文介绍等

 商品评论交流模块

 添加了论坛帖子系列功能:普通用户可以发布、可以对帖子进行交流讨论等

 帖子详情数据查看、可以在底部评论

 在我的个人中心可以查看我的发布、我的订单、我的地址修改以及我的收藏模块和个人信息模块

 购物车模块:要选择收货地址信息等

 我的订单模块:

 我的收藏模块:

普通用户后台中心:

 订单评价:

 收藏管理:

 订单信息管理:

四、 后端主要功能:

修改密码:

 用户管理:

 

 商品系列管理:

 商品信息管理:

 商品详情修改:

 商品评价管理:

 论坛管理:

客服管理:

 首页轮播图管理:

 订单信息管理:

五、数据库设计:

表address (地址)

编号

名称

数据类型

长度

小数位

允许空值

主键

1

id

bigint

20

0

N

Y

2

addtime

timestamp

19

0

N

N

3

userid

bigint

20

0

N

N

4

address

varchar

200

0

N

N

5

name

varchar

200

0

N

N

6

phone

varchar

200

0

N

N

7

isdefault

varchar

200

0

N

N

表cart (购物车表)

编号

名称

数据类型

长度

小数位

允许空值

主键

1

id

bigint

20

0

N

Y

2

addtime

timestamp

19

0

N

N

3

tablename

varchar

200

0

Y

N

4

userid

bigint

20

0

N

N

5

goodid

bigint

20

0

N

N

6

goodname

varchar

200

0

Y

N

7

picture

varchar

200

0

Y

N

8

buynumber

int

10

0

N

N

9

price

float

13

0

Y

N

10

discountprice

float

13

0

Y

N

表chat (客服聊天表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

addtime

timestamp

19

0

N

N

创建时间

3

userid

bigint

20

0

N

N

用户id

4

adminid

bigint

20

0

Y

N

管理员id

5

ask

longtext

2147483647

0

Y

N

提问

6

reply

longtext

2147483647

0

Y

N

回复

7

isreply

int

10

0

Y

N

是否回复

表config (配置文件)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

name

varchar

100

0

N

N

配置参数名称

3

value

varchar

100

0

Y

N

配置参数值

表dingdanpingjia (订单评价)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

addtime

timestamp

19

0

N

N

创建时间

3

dingdanbianhao

varchar

200

0

N

N

订单编号

4

shangpinbianhao

varchar

200

0

Y

N

商品编号

5

shangpinmingcheng

varchar

200

0

N

N

商品名称

6

shangpinxilie

varchar

200

0

Y

N

商品系列

7

pingfen

varchar

200

0

Y

N

评分

8

pingjianeirong

longtext

2147483647

0

Y

N

评价内容

9

tianjiatupian

varchar

200

0

Y

N

添加图片

10

pingjiariqi

date

10

0

Y

N

评价日期

11

yonghuming

varchar

200

0

Y

N

用户名

12

lianxidianhua

varchar

200

0

Y

N

联系电话

13

sfsh

varchar

200

0

Y

N

是否审核

14

shhf

longtext

2147483647

0

Y

N

审核回复

表discussshangpinxinxi (商品信息评论表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

addtime

timestamp

19

0

N

N

创建时间

3

refid

bigint

20

0

N

N

关联表id

4

userid

bigint

20

0

N

N

用户id

5

content

longtext

2147483647

0

N

N

评论内容

6

reply

longtext

2147483647

0

Y

N

回复内容

表discussxitonggonggao (系统公告评论表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

addtime

timestamp

19

0

N

N

创建时间

3

refid

bigint

20

0

N

N

关联表id

4

userid

bigint

20

0

N

N

用户id

5

content

longtext

2147483647

0

N

N

评论内容

6

reply

longtext

2147483647

0

Y

N

回复内容

表forum (论坛表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

addtime

timestamp

19

0

N

N

创建时间

3

title

varchar

200

0

Y

N

帖子标题

4

content

longtext

2147483647

0

N

N

帖子内容

5

parentid

bigint

20

0

Y

N

父节点id

6

userid

bigint

20

0

N

N

用户id

7

username

varchar

200

0

Y

N

用户名

8

isdone

varchar

200

0

Y

N

状态

表orders (订单)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

addtime

timestamp

19

0

N

N

创建时间

3

orderid

varchar

200

0

N

N

订单编号

4

tablename

varchar

200

0

Y

N

商品表名

5

userid

bigint

20

0

N

N

用户id

6

goodid

bigint

20

0

N

N

商品id

7

goodname

varchar

200

0

Y

N

商品名称

8

picture

varchar

200

0

Y

N

商品图片

9

buynumber

int

10

0

N

N

购买数量

10

price

float

13

0

N

N

价格/积分

11

discountprice

float

13

0

Y

N

折扣价格

12

total

float

13

0

N

N

总价格/总积分

13

discounttotal

float

13

0

Y

N

折扣总价格

14

type

int

10

0

Y

N

支付类型

15

status

varchar

200

0

Y

N

状态

16

address

varchar

200

0

Y

N

地址

表shangpinxilie (商品系列)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

addtime

timestamp

19

0

N

N

创建时间

3

shangpinxilie

varchar

200

0

N

N

商品系列

表shangpinxinxi (商品信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

addtime

timestamp

19

0

N

N

创建时间

3

shangpinbianhao

varchar

200

0

Y

N

商品编号

4

shangpinmingcheng

varchar

200

0

N

N

商品名称

5

shangpinxilie

varchar

200

0

Y

N

商品系列

6

tupian

varchar

200

0

Y

N

图片

7

guige

varchar

200

0

Y

N

规格

8

shangpinxiangqing

longtext

2147483647

0

Y

N

商品详情

9

clicktime

datetime

19

0

Y

N

最近点击时间

10

clicknum

int

10

0

Y

N

点击次数

11

price

float

13

0

N

N

价格

表storeup (收藏表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

addtime

timestamp

19

0

N

N

创建时间

3

userid

bigint

20

0

N

N

用户id

4

refid

bigint

20

0

Y

N

收藏id

5

tablename

varchar

200

0

Y

N

表名

6

name

varchar

200

0

N

N

收藏名称

7

picture

varchar

200

0

N

N

收藏图片

表token (token表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

userid

bigint

20

0

N

N

用户id

3

username

varchar

100

0

N

N

用户名

4

tablename

varchar

100

0

Y

N

表名

5

role

varchar

100

0

Y

N

角色

6

token

varchar

200

0

N

N

密码

7

addtime

timestamp

19

0

N

N

新增时间

8

expiratedtime

timestamp

19

0

N

N

过期时间

表users (用户表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

username

varchar

100

0

N

N

用户名

3

password

varchar

100

0

N

N

密码

4

role

varchar

100

0

Y

N

角色

5

addtime

timestamp

19

0

N

N

新增时间

表xitonggonggao (系统公告)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

addtime

timestamp

19

0

N

N

创建时间

3

gonggaobiaoti

varchar

200

0

N

N

公告标题

4

gonggaoleixing

varchar

200

0

N

N

公告类型

5

tupian

varchar

200

0

Y

N

图片

6

neirong

longtext

2147483647

0

Y

N

内容

7

faburiqi

date

10

0

Y

N

发布日期

表yonghu (用户)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

主键

2

addtime

timestamp

19

0

N

N

创建时间

3

yonghuming

varchar

200

0

N

N

用户名

4

mima

varchar

200

0

N

N

密码

5

xingming

varchar

200

0

N

N

姓名

6

xingbie

varchar

200

0

Y

N

性别

7

touxiang

varchar

200

0

Y

N

头像

8

lianxidianhua

varchar

200

0

Y

N

联系电话

9

money

float

13

0

Y

N

余额

六、关键代码:


/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;

	/**
	 * 登录
	 */
	@IgnoreAuth
//	@PostMapping(value = "/login")
	@RequestMapping(value = "/login", method ={RequestMethod.GET,RequestMethod.POST} )
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

<?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:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 配置数据源 -->
    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="${jdbc_url}"/>
        <property name="username" value="${jdbc_username}"/>
        <property name="password" value="${jdbc_password}"/>

        <!-- 初始化连接大小 -->
        <property name="initialSize" value="0"/>
        <!-- 连接池最大使用连接数量 -->
        <property name="maxActive" value="20"/>
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="20"/>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="0"/>
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="60000"/>

        <property name="validationQuery" value="${validationQuery}"/>
        <property name="testOnBorrow" value="false"/>
        <property name="testOnReturn" value="false"/>
        <property name="testWhileIdle" value="true"/>

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000"/>
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="25200000"/>

        <!-- 打开removeAbandoned功能 -->
        <property name="removeAbandoned" value="true"/>
        <!-- 1800秒,也就是30分钟 -->
        <property name="removeAbandonedTimeout" value="1800"/>
        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="true"/>

        <!-- 监控数据库 -->
        <property name="filters" value="mergeStat"/>
    </bean>

    <!-- Spring整合Mybatis,更多查看文档:http://mp.baomidou.com -->
    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 自动扫描Mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
        <property name="typeAliasesPackage" value="com..model.*"/>
        <property name="typeEnumsPackage" value="com.model.enums"/>
        <property name="plugins">
            <array>
                <!-- 分页插件配置 -->
                <bean id="paginationInterceptor" class="com.baomidou.mybatisplus.plugins.PaginationInterceptor">
                </bean>
            </array>
        </property>
	    <!-- 全局配置注入 -->
	    <property name="globalConfig" ref="globalConfig" />
	</bean>
	<bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
	    <!--
			AUTO->`0`("数据库ID自增")
		 	INPUT->`1`(用户输入ID")
			ID_WORKER->`2`("全局唯一ID")
			UUID->`3`("全局唯一ID")
		-->
	    <property name="idType" value="2" />
		<!--
			MYSQL->`mysql`
			ORACLE->`oracle`
			DB2->`db2`
			H2->`h2`
			HSQL->`hsql`
			SQLITE->`sqlite`
			POSTGRE->`postgresql`
			SQLSERVER2005->`sqlserver2005`
			SQLSERVER->`sqlserver`
		-->
		<!-- Oracle需要添加该项 -->
	    <!-- <property name="dbType" value="oracle" /> -->
	    <!-- 全局表为下划线命名设置 true -->
	    <!-- <property name="dbColumnUnderline" value="true" /> -->
        <property name="metaObjectHandler">
            <bean class="com.config.MyMetaObjectHandler" />
        </property>
	</bean>

    <!-- MyBatis 动态扫描  -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.dao"/>
    </bean>

    <!-- 配置事务管理 -->
    <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 事务管理 属性 -->
    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="append*" propagation="REQUIRED"/>
            <tx:method name="save*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="modify*" propagation="REQUIRED"/>
            <tx:method name="edit*" propagation="REQUIRED"/>
            <tx:method name="insert*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="remove*" propagation="REQUIRED"/>
            <tx:method name="repair" propagation="REQUIRED"/>

            <tx:method name="get*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="find*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="load*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="search*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="datagrid*" propagation="REQUIRED" read-only="true"/>

            <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

    <!-- 配置切面 -->
    <aop:config>
        <aop:pointcut id="transactionPointcut" expression="execution(* com.service..*.*(..))"/>
        <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice"/>
    </aop:config>

</beans>

七、论文报告: 

八、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻

打卡 文章 更新 200/  365天

 精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

Java项目精品实战案例《100套》

web前端期末大作业网页实战《100套》