1、数据库实体映射类方法
Maven依赖<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.1</version>
</dependency>
//@GeneratedValue主键自增,用到上面依赖
@ApiModelProperty(value = "id", required = true)
@Id
@JsonSerialize(using = ToStringSerializer.class)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
2.Swagger全套,前后的对照接口模型
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.21</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.21</version>
</dependency>
@Api和@ApiOperation
控制层:
@Api(value = "任务执行面板按钮", tags = "任务执行面板按钮") public class TaskPanelButtonController { private TaskPanelButtonService taskPanelButtonService; /** * 取消 * * @param code 追溯码 * @return R */ @PostMapping("/disassociation") @ApiOperation("取消") public R disassociation(@RequestParam("code") String code, @RequestParam(required = false) Long taskId) { try { return taskPanelButtonService.disassociation(code, taskId); } catch (RuntimeException e) { log.error(ExceptionUtil.stacktrace(e)); return R.error().message(e.getMessage()); } catch (Exception e) { log.error(ExceptionUtil.stacktrace(e)); return R.error().message(I18nUtil.getBean("sys.message.error")); } }
@ApiModel 和@ApiModelProperty
实体类 @Entity @Table(name = "code_export_record") @Data @ApiModel(value = "追溯码导出记录") public class CodeExportRecord extends AuditBasics implements Serializable { private static final long serialVersionUID = 1L; /** * 主键 */ @ApiModelProperty(value = "主键") @Id @JsonSerialize(using = ToStringSerializer.class) @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
浏览器访问:http://localhost:8088/swagger-ui.html (其中8088为springboot启动服务端口)
3、Id 生成的不重复的源码
Long id = idService.getId();
IdService类
@Service public class IdService { private static IdGenerator idGrnerator = null; static { idGrnerator = new IdGenerator(1, 1); } public Long getId() { return idGrnerator.nextId(); } /** * 根据时间戳生成唯一id * 每秒最多一千个,单个web系统集群部署可以为每台机器加个标识 */ public static String getOnlyId() { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSSS"); String id = sdf.format(System.currentTimeMillis()); return id; } /** * 两个可以为空的字符串比较 */ public static Boolean contrast(String s1,String s2) { if(StrUtil.isBlank(s1)&&StrUtil.isBlank(s2)){ return true; } if(StrUtil.isBlank(s1)||StrUtil.isNotBlank(s2)){ return false; } if(StrUtil.isBlank(s2)||StrUtil.isNotBlank(s1)){ return false; } else{ return s1.equals(s2); } } }
IdGenerator类
package genuine.its.system.util; /** * * * @author wwj * @date 2021年4月23日 14:33:25 * */ public class IdGenerator { /** * 起始的时间戳 */ private final static long START_STMP = 1480166465631L; /** * 每一部分占用的位数 */ private final static long SEQUENCE_BIT = 12; //序列号占用的位数 private final static long MACHINE_BIT = 5; //机器标识占用的位数 private final static long DATACENTER_BIT = 5;//数据中心占用的位数 /** * 每一部分的最大值 */ private final static long MAX_DATACENTER_NUM = -1L ^ (-1L << DATACENTER_BIT); private final static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT); private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT); /** * 每一部分向左的位移 */ private final static long MACHINE_LEFT = SEQUENCE_BIT; private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT; private final static long TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT; private long datacenterId; //数据中心 private long machineId; //机器标识 private long sequence = 0L; //序列号 private long lastStmp = -1L;//上一次时间戳 public IdGenerator(long datacenterId, long machineId) { if (datacenterId > MAX_DATACENTER_NUM || datacenterId < 0) { throw new IllegalArgumentException("datacenterId can't be greater than MAX_DATACENTER_NUM or less than 0"); } if (machineId > MAX_MACHINE_NUM || machineId < 0) { throw new IllegalArgumentException("machineId can't be greater than MAX_MACHINE_NUM or less than 0"); } this.datacenterId = datacenterId; this.machineId = machineId; } /** * 产生下一个ID * * @return */ public synchronized long nextId() { long currStmp = getNewstmp(); if (currStmp < lastStmp) { throw new RuntimeException("Clock moved backwards. Refusing to generate id"); } if (currStmp == lastStmp) { //相同毫秒内,序列号自增 sequence = (sequence + 1) & MAX_SEQUENCE; //同一毫秒的序列数已经达到最大 if (sequence == 0L) { currStmp = getNextMill(); } } else { //不同毫秒内,序列号置为0 sequence = 0L; } lastStmp = currStmp; return (currStmp - START_STMP) << TIMESTMP_LEFT //时间戳部分 | datacenterId << DATACENTER_LEFT //数据中心部分 | machineId << MACHINE_LEFT //机器标识部分 | sequence; //序列号部分 } private long getNextMill() { long mill = getNewstmp(); while (mill <= lastStmp) { mill = getNewstmp(); } return mill; } private long getNewstmp() { return System.currentTimeMillis(); } }