实战 Java 第12天:开发商品点赞接口

  • 前言
  • 一、新建praise点赞表
  • 二、新建Praise实体类
  • 三、新建 PraiseMapper 接口
  • 四、新建PraiseMapper.xml文件
  • 五、新建 PraiseService 接口类
  • 六、新建 PraiseController 类并添加业务逻辑
  • 七、测试接口是否成功
  • 八、总结

前言

用户可以对自己喜欢的商品点赞,今天将开发商品点赞接口。

一、新建praise点赞表

  1. 建表语句如下:
CREATE TABLE `praise` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',`product_id` int(11) DEFAULT NULL COMMENT '商品编号',`user_id` int(11) DEFAULT NULL COMMENT '点赞用户编号',`status` tinyint(2) DEFAULT '1' COMMENT '点赞状态 1-点赞 2-取消赞',`praise_time` datetime DEFAULT NULL COMMENT '点赞时间/取消点赞时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='点赞表';

二、新建Praise实体类

  • 新建Praise实体类
package com.dingding.entity;import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;@Table(name = "praise")
public class Praise {@Idprivate Integer id;private Integer productId;private Integer userId;private Integer status;private Date praiseTime;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getProductId() {return productId;}public void setProductId(Integer productId) {this.productId = productId;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public Integer getStatus() {return status;}public void setStatus(Integer status) {this.status = status;}public Date getPraiseTime() {return praiseTime;}public void setPraiseTime(Date praiseTime) {this.praiseTime = praiseTime;}
}

三、新建 PraiseMapper 接口

新建PraiseMapper接口,并继承tk.mybatis.mapper.common.Mapper接口。

package com.dingding.mapper;import com.dingding.entity.Praise;
import tk.mybatis.mapper.common.Mapper;public interface PraiseMapper extends Mapper<Praise> {}

四、新建PraiseMapper.xml文件

新建PraiseMapper.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">
<mapper namespace="com.dingding.mapper.PraiseMapper"><resultMap id="BaseResultMap" type="com.dingding.entity.Praise"><result column="id" jdbcType="INTEGER" property="id" /><result column="product_id" jdbcType="INTEGER" property="productId" /><result column="user_id" jdbcType="INTEGER" property="userId" /><result column="status" jdbcType="INTEGER" property="status" /><result column="praise_time" jdbcType="TIMESTAMP" property="praiseTime" /></resultMap>
</mapper>

五、新建 PraiseService 接口类

  • 新建 PraiseService 接口类,并添加save接口,实现点赞功能。
package com.dingding.service;import com.dingding.entity.Praise;public interface PraiseService {int save(Praise praise);
}
  • 新建 PraiseServiceImpl 类并添加实现。
package com.dingding.service.impl;import com.dingding.entity.Praise;
import com.dingding.mapper.PraiseMapper;
import com.dingding.service.PraiseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;import java.util.List;@Service
public class PraiseServiceImpl implements PraiseService {@Autowiredprivate PraiseMapper praiseMapper;@Overridepublic int save(Praise praise) {// 先查询是否有点赞记录Example example = new Example(Praise.class);example.createCriteria().andEqualTo("productId", praise.getProductId()).andEqualTo("userId", praise.getUserId());List<Praise> praiseList = praiseMapper.selectByExample(example);if (praiseList != null && praiseList.size() > 0) {// 存在点赞记录,修改操作Praise old = praiseList.get(0);// 新建修改对象目的是为了减少update不必要的字段,与后面调用的updateByPrimaryKeySelective方法对应Praise update = new Praise();update.setStatus(praise.getStatus());update.setPraiseTime(praise.getPraiseTime());update.setId(old.getId());// 通用修改方法,根据主键修改,只修改有值的字段return praiseMapper.updateByPrimaryKeySelective(update);} else {// 不存在点赞记录// mybatis 通用插入// insert 与 insertSelective 区别在于 insertSelective 会忽略 praise 对象中的值为null的属性return praiseMapper.insertSelective(praise);}}
}

六、新建 PraiseController 类并添加业务逻辑

package com.dingding.controller;import com.dingding.entity.Praise;
import com.dingding.entity.Response;
import com.dingding.service.PraiseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;
import java.util.Map;@RestController
public class PraiseController {@Autowiredprivate PraiseService praiseService;@RequestMapping(value = "praise", method = RequestMethod.POST)public Response praise(@RequestBody Map<String, Object> params) {int productId = (int) params.get("productId");int userId = (int) params.get("userId");int status = (int) params.get("status");Praise praise = new Praise();praise.setProductId(productId);praise.setUserId(userId);praise.setPraiseTime(new Date());praise.setStatus(status);int count = praiseService.save(praise);if (count > 0) {return new Response(true,"操作成功",1);} else {return new Response(true,"操作失败",-1);}}
}

七、测试接口是否成功

  1. 使用 postman 验证接口。
  • 验证点赞接口
    1)选择请求方式为 POST, 在地址栏中输入 http://localhost:8080/praise,选择body并继续选择json格式请求参数,输入请求参数,然后发送请求,正常返回操作结果。
  1. 对比数据库数据,数据正常,当productId、userId不变时,重复调用接口只会修改status、praise_time字段值,验证ok。

八、总结

点赞接口沿用了之前提到了mybatis example通用操作,本接口使用了通用查询、修改、插入等操作,在调用updateByPrimaryKeySelective或updateByPrimaryKey方法时,需要给实体类id字段加上@Id注解,不然mybatis不能识别主键字段,修改会不生效。还要注意,同一个用户对同一商品操作点赞,不要重复入库数据。可以异常提示,也可以覆盖修改数据库记录。

实战 Java 第12天:开发商品点赞接口相关推荐

  1. 实战 Java 第10天:商品分页查询

    实战 Java 第10天:商品分页查询 前言 一.添加pagehelper相关依赖 二.在 ProductService 类中添加接口 三.在 ProductMapper 类中添加接口 四.增加 sq ...

  2. 亿级流量电商详情页系统实战-46.基于双层嵌套command开发商品服务接口的多级降级机制

    1.介绍 先降一级,尝试用一个备用方案去执行,如果备用方案失败了,再用最后下一个备用方案去执行 command嵌套command 尝试从备用服务器接口去拉取结果 特别要注意的是,在做多级降级的时候,要 ...

  3. 【java】调用百度开发平台ai接口,完成人脸识别(人脸搜索、人脸对比、人脸检测等)功能--------超详细,适合小白

    基本流程理解: 我们要使用百度提供的接口去实现某些功能,大致流程如下: 1.注册百度开放平台帐号: 浏览器打开http://ai.baidu.com/,进入百度ai的页面,点击右上角的控制台按钮进行登 ...

  4. Java微信公众平台开发之群发接口(高级群发)

    再次吐槽下,微信素材管理和群发这块文档对Java很不友好,此文需要结合我前文和官方文档. 测试号调试群发只需看是否群发消息是否能组装成功,不需要看结果如何(反正不会发送成功的),因为微信还没开放这个功 ...

  5. 实战 Java 第5天:开发商品查询(模糊查询与条件查询)接口

    实战 Java 第5天:开发商品查询接口 前言 一.在 ProductService 类中添加接口 二.在 ProductMapper 类中添加接口 三.增加 sql 语句 四.在 ProductCo ...

  6. Java Web系统经常使用的第三方接口

    1.    Web Service 接口 1.1 接口方式说明和长处 在笔者的开发生涯中,当作为接口提供商给第三方提供接口时,以及作为client去调用第三方提供的接口时,大部分时候都是使用 Web ...

  7. 实战 Java 第8天:开发商品详情查询接口

    实战 Java 第8天:开发商品详情查询接口 前言 一.在 ProductService 类中添加接口 二.在 ProductMapper 类中添加接口 三.增加 sql 语句 四.在 Product ...

  8. 视频教程-JAVA WEB开发实战-Java

    JAVA WEB开发实战 主要研究方向为J2EE..net .数据库 .前端.Android,曾经服务过大型上市国企IT部门,软件企业联合创始人,对软件研发管理.市场营销有自己独特思想体系! 张晨光 ...

  9. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

最新文章

  1. 在Vista操作系统中通过manifest文件使VC应用程序获得管理员权限
  2. 关于intent-filter的误区
  3. AI 到底是怎么「想」的?
  4. 前端学习(625):数据类型导读
  5. jQuery框架学习第八天:ASP.NET jQuery实施方案
  6. Spark读取Hbase报错NoSuchMethodError: org.apache.hadoop.conf.Configuration.getPassword(Ljava/lang/String;
  7. html5液体效果,HTML5/CSS3/SVG实现的液体掉落(滑落)动画
  8. 心理学专业学要学计算机吗,心理学专业学什么 都有哪些课程
  9. linux 命令行域名的解析(DNS) —— dig、host
  10. 实用免费的SNMP网管工具-sugarnmsTool
  11. 汽车电子测试-软件测试
  12. IDEA编辑器常用快捷键
  13. android svn上传代码,Android应用开发之项目上传svn(Android Studio)
  14. 如何设置局域网共享打印机及问题解决
  15. 一个过不了情关的男人!!
  16. 解决Laravel5.5版本框架缺少vender目录报错问题
  17. app installation failed 的问题的解决过程
  18. revit模型怎么在手机上看_e建筑手机版下载-e建筑(轻松查看CAD图纸和BIM模型)1.2.4 官方苹果版-东坡下载...
  19. 1077: 空心菱形
  20. 斐讯k2php环境,斐讯K2T SDK编译环境

热门文章

  1. 错误 CS8107 C# 7.0 中不支持功能“xxxxxx”。请使用 7.1 或更高的语言版本。
  2. 网易云获取带有时间轴的歌词
  3. flutter 输入自动转大写,只能输入大写或数字;
  4. 最大公约最小公倍数算法
  5. Unity VR专栏(一)手柄控制
  6. 怎么去除WORD的背景颜色
  7. 100多个新媒体人实用网站
  8. 不同的丘脑皮层网络动力学与慢性腰痛的病理生理学有关
  9. C++怎么操作EXCEL
  10. Java常见面试题_理论+实践