栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

后端小项目——简单商品管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

后端小项目——简单商品管理

前言

本次后端项目是学校课程的一个作业,但是也基本涵盖了后端开发的整个流程,所以记录一下。

一、环境及工具

SpringBoot 2.5.5
JDK1.8
IntelliJ IDEA 2021.2.2 (Ultimate Edition)
Postman
MySql
Navicat Premium
Python 3.7
VSCode

二、项目需求

模拟电子商务网站用户登录、添加商品、修改商品信息、批量删除商品、查询商品信息的功能,用户和商品信息存储在数据库中。

  1. 用户登录:学号和密码作为登录成功的信息,登录成功以JASON格式返回用户信息,登录失败返回登录失败信息。
  2. 添加商品:若用户已登录过,则允许接收添加商品的RESTful请求,商品信息以JASON格式传送,属性不限,商品信息添加至数据库中,返回添加成功信息;否则请求不执行。
    3.修改商品:若用户已登录过,则允许接收修改商品信息的RESTful请求,请求中传送需要修改的商品信息,商品信息以JASON格式传送,属性不限,根据传送的商品信息修改数据库中相应的数据,返回修改成功信息;否则请求不执行。
  3. 批量删除商品:若用户已登录过,则允许接收删除商品信息的RESTful请求,请求中传送要删除的所有商品的id值,删除数据库中相应的数据,返回删除成功信息;否则请求不执行。
  4. 查询商品:若用户已登录过,则允许接收查询商品信息的RESTful请求,请求中传送要查询的商品名称(name)以及在分页显示中需要提供的页码(pages)和一页最多显示记录条数(limits),在数据库中查询商品名包含name的商品中的第(pages-1)limits+1到pageslimits条记录,如果查询到,以JASON格式返回查询到的所有商品信息,属性不限,否则返回查询失败信息。若用户未登陆过,则请求不执行。
三、搭建数据库

首先,在premium创建名为Commerce的数据库,创建用户表和商品表以及各字段,注意各个字段的类型,刚创建的时候因为学号设置的是int,直接超出MySql int类型的范围,所以改用了bigint.
为了有足够的数据,用Python批量加入数据(个人不太熟悉SQL的语法)。

import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="commerce")
print(db)

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

sql_user="insert into user(user_id,pwd) value(%s,%s)"
sql_goods="insert into goods(goods_id,goods_name,price,message) value(%s,%s,%s,%s)"
# 使用 execute()  方法执行 SQL 查询
goods_id=1001
user=[]
goods=[]
for user_id in range(2018329621202,2018329621301):
    user.append((user_id,"123456"))
    goods.append((goods_id,"商品名",goods_id,"商品"+str(goods_id)))
    goods_id+=1
cursor.executemany(sql_user,user)
cursor.executemany(sql_goods,goods)
db.commit()
# 关闭数据库连接
db.close()


致此,数据库的工作完成。

四、SpringBoot基本的配置

参考上一篇博客:SpringBoot入门

五、拦截器的使用

为了达到拦截未登录用户各种操作的需求,要用到拦截器,要了解拦截器工作的原理,必须先熟悉cookie和session。
cookie和session详解
首先创建拦截器,实现HandlerInterceptor接口,重载三个方法。

接下来,通过类来配置拦截器,记得加注解@Configuration.

六、JDBC的使用 1.添加依赖

    mysql
    mysql-connector-java


    org.springframework.boot
    spring-boot-starter-jdbc

2.写入配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/Commerce?serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
server:
  port: 8083
3.测试
@RequestMapping(path = "/jdbc")
    public String connect(@RequestParam(value = "user_id") String user_id) {
        String sql = String.format("select * from user where user_id=%s", user_id);
        List> userList = jdbcTemplate.queryForList(sql);
        return userList.toString();
    }

七、各个功能的实现 1.登录验证

在这里要设置session,正常前后端开发谁验证谁设置。

 @PostMapping(path = "/login")
    public String login(@RequestParam(value = "user_id") String user_id, @RequestParam(value = "pwd") String pwd, HttpServletRequest request) {
        String sql = String.format("select * from user where user_id=%s", user_id);
        List> userList = jdbcTemplate.queryForList(sql);
        if (pwd.equals(userList.get(0).get("pwd"))) {
            request.getSession().setAttribute("user_id", user_id);
            return JSON.toJSONString(new User(user_id, pwd, "登录成功!"));
        } else {
            System.out.println(JSON.toJSONString(new User(null, null, "登录失败!")));
            return JSON.toJSONString(new User(null, null, "登录失败!"));
        }
    }

2.添加商品
@RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    public String add(@RequestBody JSONObject jsonParam) {

        String id = jsonParam.get("goods_id").toString();
        String name = jsonParam.get("goods_name").toString();
        String price = jsonParam.get("goods_price").toString();
        String message = jsonParam.get("goods_message").toString();
        System.out.println(jsonParam);
        String sql = String.format("insert into goods (goods_id,goods_name,price,message) values ( %s, '%s', %s, '%s')", id, name, price, message);
        System.out.println(sql);
        jdbcTemplate.execute(sql);

        // 将获取的json数据封装一层,然后在给返回
        JSONObject result = new JSONObject();
        result.put("message", "添加成功");
        result.put("method", "json");
        result.put("data", jsonParam);
        return result.toString();
    }

3.修改商品
 @RequestMapping(value = "/change", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    public String change(@RequestBody JSONObject jsonParam) {
        String id = jsonParam.get("goods_id").toString();
        String name = jsonParam.get("goods_name").toString();
        String price = jsonParam.get("goods_price").toString();
        String message = jsonParam.get("goods_message").toString();
        String sql = String.format("update goods set goods_name='%s',price=%s,message='%s' where goods_id = %s ", name, price, message, id);
        System.out.println(sql);
        jdbcTemplate.execute(sql);

        // 将获取的json数据封装一层,然后在给返回
        JSONObject result = new JSONObject();
        result.put("msg", "ok");
        result.put("message", "修改成功");
        result.put("data", jsonParam);
        return result.toString();
    }

4.批量删除
@RequestMapping(value = "/delete", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    public String delete(@RequestBody JSONObject jsonObject) {

        ArrayList ids = (ArrayList) jsonObject.get("ids");
        for (int i = 0; i < ids.size(); i++) {
            System.out.println(ids.get(i));
            String sql = String.format("delete from goods where goods_id=%s", ids.get(i));
            jdbcTemplate.execute(sql);
        }

        JSONObject result = new JSONObject();
        result.put("msg", "ok");
        result.put("message", "删除成功");
        return result.toString();
    }

5.查询商品
@PostMapping(path = "/query")
    public String query(@RequestParam(value = "name") String goods_name,@RequestParam(value = "pages") int pages,@RequestParam(value = "limits") int limits) {

        String sql=String.format("select * from goods where goods_name='%s'",goods_name);
        List list = jdbcTemplate.queryForList(sql);
        return JSON.toJSONString(list.subList((pages-1)*limits,pages*limits));
    }


致此,各个功能都已实现。

八、总结

这个项目是一个很小的项目,但是在实现的过程中也遇到了许多问题,主要有以下几个问题:
        1.Java连接数据库执行sql语句时,对于所有的非数值类型都要加上单引号!!!
        2.对于session理解不深入,导致耽搁了挺久。
        3.Java后端的注解一定不要忘了加!也别搞混淆,比如RequestBody和ResponseBody.
另外,本次项目中还用到了阿里的一个fastjson包。

 
	com.alibaba
	fastjson
	1.2.47

后端新手上路,如有不足,请多指教.

项目源码

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/349034.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号