当前位置: 首页 > news >正文

后端MVC三层架构,Mybatis ,雪花算法生成唯一id

一.MVC

MVC(Model View Controller),它是一种思想,他把软件系统分为 以下三部分:

Model(模型):用来处理程序中数据逻辑的部分(service,dao层)

View(视图):在应用程序中,专门和浏览器进行交互,展示数据的资源(前端)

Contreller(控制器):可以理解成是一个分发器,来决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后需要跳回到哪一个视图,也就是用来连接视图和模型的(收请求,返回响应)

这里的项目结构清晰明了,controller层接受到前端发来的请求,然后进行处理调用service层中的方法,进行执行业务逻辑(进行操作数据库的访问),最后返回controller层,进行返回对象状态(数据或则状态)

二.mybatis框架执行数据库操作(首先需要配置号mybatis的xml)

使用一个mapper映射,在接口中进行定义数据库中的执行方法,并通过注解进行操作数据库

1:需要将mapper配置文件进行储存到同一目录,并且名字要相同。

(mybatis中可以使用注解或者利用xml文件进行操作数据库)

2.在mapper映射文件中进行操作数据库(利用注解)

 三.雪花算法进行计算唯一uid

这里包装了一个工具类

package com.csdn.util;public class UIDGenerator {// Snowflake 算法参数private final static long twepoch = 1288834974657L;private final static long workerIdBits = 5L;private final static long datacenterIdBits = 5L;private final static long maxWorkerId = -1L ^ (-1L << workerIdBits);private final static long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);private final static long sequenceBits = 12L;private final static long workerIdShift = sequenceBits;private final static long datacenterIdShift = sequenceBits + workerIdBits;private final static long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;private final static long sequenceMask = -1L ^ (-1L << sequenceBits);private long workerId;private long datacenterId;private long sequence = 0L;private long lastTimestamp = -1L;// 单例模式,确保工具类只有一个实例private static UIDGenerator instance;private UIDGenerator(long workerId, long datacenterId) {if (workerId > maxWorkerId || workerId < 0) {throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));}if (datacenterId > maxDatacenterId || datacenterId < 0) {throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));}this.workerId = workerId;this.datacenterId = datacenterId;}// 获取唯一实例public static synchronized UIDGenerator getInstance() {if (instance == null) {// 在初始化时指定workerId和datacenterId,这里默认都设置为1instance = new UIDGenerator(1, 1);}return instance;}// 生成唯一IDprivate synchronized long nextId() {long timestamp = timeGen();if (timestamp < lastTimestamp) {throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));}if (lastTimestamp == timestamp) {sequence = (sequence + 1) & sequenceMask;if (sequence == 0) {timestamp = tilNextMillis(lastTimestamp);}} else {sequence = 0L;}lastTimestamp = timestamp;return ((timestamp - twepoch) << timestampLeftShift) |(datacenterId << datacenterIdShift) |(workerId << workerIdShift) |sequence;}private long tilNextMillis(long lastTimestamp) {long timestamp = timeGen();while (timestamp <= lastTimestamp) {timestamp = timeGen();}return timestamp;}private long timeGen() {return System.currentTimeMillis();}// 公共方法:生成并返回8位数字的唯一UIDpublic String generateUID() {long id = nextId();return String.format("%08d", id % 100000000);}
}


http://www.mrgr.cn/news/19043.html

相关文章:

  • 计算机毕业设计Spark+PyTorch知识图谱中药推荐系统 中药数据分析可视化大屏 中药爬虫 机器学习 中药预测系统 中药情感分析 大数据毕业设计
  • Hyper-v 安装 centOS
  • Python青少年简明教程:模块
  • 记一次某中学系统越权漏洞
  • 【深入了解Java常用类】
  • LeetCode:2708. 一个小组的最大实力值(动态规划 Java)
  • 算法day20|669. 修剪二叉搜索树、将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
  • MySQL 锁机制详解
  • 跟我一起学FPGA (二) 语法讲解
  • 八股训练营感想
  • 多表查询_关联查询
  • 【win11】win11取消开机密码
  • 嵌入式Linux:常见信号的默认行为
  • 在vue项目中,有两个tab页,在其中一个页面调用另一个页面的方法
  • AUTOSAR_EXP_ARAComAPI的3章节笔记
  • 如何从 Bak 文件中恢复 SQL数据库?(3种方法)
  • 学习记录——day42 多态
  • 浅谈 cookie 和 session
  • CMake构建学习笔记14-依赖库管理工具
  • 苍穹外卖项目前端DAY02