本次后端项目是学校课程的一个作业,但是也基本涵盖了后端开发的整个流程,所以记录一下。
一、环境及工具SpringBoot 2.5.5
JDK1.8
IntelliJ IDEA 2021.2.2 (Ultimate Edition)
Postman
MySql
Navicat Premium
Python 3.7
VSCode
模拟电子商务网站用户登录、添加商品、修改商品信息、批量删除商品、查询商品信息的功能,用户和商品信息存储在数据库中。
- 用户登录:学号和密码作为登录成功的信息,登录成功以JASON格式返回用户信息,登录失败返回登录失败信息。
- 添加商品:若用户已登录过,则允许接收添加商品的RESTful请求,商品信息以JASON格式传送,属性不限,商品信息添加至数据库中,返回添加成功信息;否则请求不执行。
3.修改商品:若用户已登录过,则允许接收修改商品信息的RESTful请求,请求中传送需要修改的商品信息,商品信息以JASON格式传送,属性不限,根据传送的商品信息修改数据库中相应的数据,返回修改成功信息;否则请求不执行。 - 批量删除商品:若用户已登录过,则允许接收删除商品信息的RESTful请求,请求中传送要删除的所有商品的id值,删除数据库中相应的数据,返回删除成功信息;否则请求不执行。
- 查询商品:若用户已登录过,则允许接收查询商品信息的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入门
五、拦截器的使用为了达到拦截未登录用户各种操作的需求,要用到拦截器,要了解拦截器工作的原理,必须先熟悉cookie和session。
cookie和session详解
首先创建拦截器,实现HandlerInterceptor接口,重载三个方法。
接下来,通过类来配置拦截器,记得加注解@Configuration.
2.写入配置mysql mysql-connector-java org.springframework.boot spring-boot-starter-jdbc
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
七、各个功能的实现
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
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
后端新手上路,如有不足,请多指教.
项目源码



