spring boot——关于一个Mysql主键的问题
问题是这样的:
我现在有一个被@Entity标记的类TimeLine,其中id为主键。
TimeLineController中有一个接收post请求的add()方法,这个方法会接受客户端传来的一个表单,表单中的数据是TimeLine的各个属性。
第一种情况,我的表单中带有id这个属性,这样写入数据库中的一条timeline,id并不是我表单传来的id,感觉像是数据库自己分配的。
第二种情况,我我的表单中没有id这个属性,这会返回一个错误。
TimeLine.java
import javax.persistence.*; @Entity
@Table(name = "timeline")
public class TimeLine { @Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String cotent;
@Column(nullable = false)
private long authorId; public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getCotent() {
return cotent;
} public void setCotent(String cotent) {
this.cotent = cotent;
} public long getAuthorId() {
return authorId;
} public void setAuthorId(long authorId) {
this.authorId = authorId;
}
}
TimeLineRepository.java
import com.springboot.first.entity.TimeLine;
import org.springframework.data.jpa.repository.JpaRepository; public interface TimeLineRepository extends JpaRepository<TimeLine, Long> {
TimeLine findById(long id);
}
TimeLineServiceImpl.java
import com.springboot.first.entity.TimeLine;
import com.springboot.first.netUtil.Response;
import com.springboot.first.netUtil.ResponseCode;
import com.springboot.first.netUtil.ResponseTools;
import com.springboot.first.repository.TimeLineRepository;
import com.springboot.first.service.TimeLineService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.HashMap;
import java.util.List; @Service
public class TimeLineServiceImpl implements TimeLineService { @Autowired
private TimeLineRepository timeLineRepository; @Override
public Response getTimeLineList() {
try {
List<TimeLine> list = timeLineRepository.findAll();
HashMap<String, Object> data = new HashMap<>();
data.put("content", list);
return ResponseTools.response(ResponseCode.SUCCESS,
"", data);
} catch (Exception e) {
return ResponseTools.response(ResponseCode.
Exception_ERROR, e.getMessage(), null);
}
} @Override
public Response selectTimeLineById(long id) {
if(id == 0){
return ResponseTools.response(ResponseCode.PARAM_ERROR,
"", null);
}try{
TimeLine timeLine = timeLineRepository.findById(id);
HashMap<String, Object> data = new HashMap<>();
data.put("content", timeLine);
return ResponseTools.response(ResponseCode.SUCCESS,
"success", data);
}catch (Exception e){
return ResponseTools.response(ResponseCode.
Exception_ERROR, e.getMessage(), null);
}
} @Override
public Response save(TimeLine timeLine) {
if (null == timeLine) {
return ResponseTools.response(ResponseCode.PARAM_ERROR,
"", null);
}
try {
timeLineRepository.save(timeLine);
return ResponseTools.response(ResponseCode.SUCCESS,
"success", null);
} catch (Exception e) {
return ResponseTools.response(ResponseCode.
Exception_ERROR, e.getMessage(), null);
}
} @Override
public Response delete(Long id) {
if(null == id){
return ResponseTools.response(ResponseCode.PARAM_ERROR,
"", null);
}
try{
timeLineRepository.deleteById(id);
return ResponseTools.response(ResponseCode.SUCCESS,
"success", null);
}catch (Exception e){
return ResponseTools.response(ResponseCode.
Exception_ERROR, e.getMessage(), null);
} }
}
TimeLineController.java
import com.springboot.first.entity.TimeLine;
import com.springboot.first.netUtil.Response;
import com.springboot.first.service.TimeLineService;
import org.springframework.web.bind.annotation.*; import javax.annotation.Resource;
import java.util.HashMap; @RestController
@RequestMapping("/timeLine")
public class TimeLineController { @Resource
private TimeLineService timeLineService; @RequestMapping("/list")
public Response getTimeLineList(){
return timeLineService.getTimeLineList();
} @RequestMapping("/get/{id}")
public Response selectTimeLineById(@PathVariable("id") Long id){
return timeLineService.selectTimeLineById(id);
} @RequestMapping(value = "/add", method = RequestMethod.POST)
public Response add(@RequestBody HashMap<String, Object> reqMap){
TimeLine timeLine = new TimeLine();
timeLine.setAuthorId(Long.valueOf((Integer)reqMap.get("authorId")));
timeLine.setCotent((String)reqMap.get("content"));
// timeLine.setId(Long.valueOf((Integer)reqMap.get("id")));
timeLine.setTitle((String)reqMap.get("title"));
return timeLineService.save(timeLine);
} @RequestMapping(value = "/edit", method = RequestMethod.POST)
public Response edit(@RequestBody HashMap<String, Object> reqMap){
TimeLine timeLine = new TimeLine();
timeLine.setAuthorId((Long)reqMap.get("authorId"));
timeLine.setCotent((String)reqMap.get("content"));
timeLine.setId((Long)reqMap.get("id"));
timeLine.setTitle((String)reqMap.get("title"));
return timeLineService.save(timeLine);
} @RequestMapping("/delete/{id}")
public Response delete(@PathVariable Long id){
return timeLineService.delete(id);
}
}
第二种情况页面返回的错误:

解决方法:dao换成了使用原始sql...
spring boot——关于一个Mysql主键的问题的更多相关文章
- Spring boot JPA 用自定义主键策略 生成自定义主键ID
最近学习Spring boot JPA 学习过程解决的一些问题写成随笔,大家一起成长.这次遇到自定义主键的问题 package javax.persistence; public enum Gener ...
- MySQL主键设计
[TOC] 在项目过程中遇到一个看似极为基础的问题,但是在深入思考后还是引出了不少问题,觉得有必要把这一学习过程进行记录. MySQL主键设计原则 MySQL主键应当是对用户没有意义的. MySQL主 ...
- spring cloud教程之使用spring boot创建一个应用
<7天学会spring cloud>第一天,熟悉spring boot,并使用spring boot创建一个应用. Spring Boot是Spring团队推出的新框架,它所使用的核心技术 ...
- (45). Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】
大家在开发的时候,会喜欢jdbcTemplate操作数据库,有喜欢JPA操作数据库的,有喜欢MyBatis操作数据库的,对于这些我个人觉得哪个使用顺手就使用哪个就好了,并没有一定要使用哪个,个人在实际 ...
- MYSQL主键自动增加的配置及auto_increment注意事项
文章一 原文地址: http://ej38.com/showinfo/mysql-202971.html 文章二: 点击转入第二篇文章 在数据库应用,我们经常要用到唯一编号.在MySQL中可通过字 ...
- 获得自动增长的MySQL主键
下面的脚本教您如何获得自动增长的MySQL主键,如果您对MySQL主键方面感兴趣的话,不妨一看,相信对您学习MySQL主键方面会有所启迪. import java.sql.Connection; im ...
- Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别
原文:Mysql主键索引.唯一索引.普通索引.全文索引.组合索引的区别 Mysql索引概念: 说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不 ...
- mysql主键设置成auto_increment时,进行并发性能測试出现主键反复Duplicate entry 'xxx' for key 'PRIMARY'
mysql主键设置成auto_increment时,进行并发性能測试出现主键反复Duplicate entry 'xxx' for key 'PRIMARY' 解决方法: 在my.cnf的[mysql ...
- 如何基于Spring Boot搭建一个完整的项目
前言 使用Spring Boot做后台项目开发也快半年了,由于之前有过基于Spring开发的项目经验,相比之下觉得Spring Boot就是天堂,开箱即用来形容是绝不为过的.在没有接触Spring B ...
随机推荐
- 如何使CPU占用率为50%
在Linux下,CPU的状态分为系统态,用户态和空闲态,分别指系统内核执行时间,处于用户态的时间和空闲系统进程执行的时间.三者之和就是CPU的总时间. CPU的利用率就是非空闲进程占用时间的比例. 1 ...
- 项目一:第八天 1、前台系统导入 实现客户注册 发验证码,邮件 springdata-redis存储数据 3、实现客户登陆
1 前台系统客户注册功能 页面:signup.html 1.1 验证手机号是否注册(邮箱同样) 1. 使用Jquery-validate插件进行相关校验,使用校验规则 <input type=& ...
- 杭电acm 1038题
本题比较简单,但是需要掌握几个小技巧,先上代码 /************************************* 杭电ACM 1038题,已AC ********************* ...
- 利用General框架进行三层架构开发
三层架构是企业信息管理系统中一种比较流行的架构方式,如大家所知,三层架构将信息系统分为数据访问层(DAL).业务逻辑层(BLL).界面表示层(UI)三部分,三层架构的好处是根据系统中代码所处的层次将系 ...
- 1.6 opencv视频操作基础
利用opencv中的VideoCapture类,来对视频进行读取显示,以及调用摄像头. VideoCapture是opencv 2.X中新增的一个类,对应于之前C语言版本的CvCapture结构体.它 ...
- java线程安全的元素
集合类: Vector Stack HashTable enumeration 字符串: StringBuffer
- Netty服务端的业务流程分析
Netty的服务端怎么和java NIO联系起来的,一直很好奇这块内容,这里跟下代码,下篇文章看下Channel相关的知识. finalChannelFuture initAndRegister(){ ...
- MyEclipse 基本使用(三)
视频地址如下 https://pan.baidu.com/s/1boxK4LT#list/path=%2F%E5%8A%A8%E5%8A%9B%E8%8A%82%E7%82%B9%E8%A7%86%E ...
- Redis实现用户关注功能
最近项目要涉及到粉丝关注问题,权衡再三还是使用Redis实现比较方便,使用Redis的有序集合可以做到根据关注的时间有序的取出列表,假设我的ID是me,别人的ID是other. 1. 添加关注 添加关 ...
- 无废话MVC入门教程笔记
自学mvc,看了园子里李林峰写的李林峰写的无废话MVC入门教程笔记,现在有的平时忽略的或是不太清楚的点记下来 1,Html.DropDownList //服务端写法 @{ //下拉列表的值 List& ...