From bc0fca20dc521bb87ed2cd740159f7134bea884e Mon Sep 17 00:00:00 2001 From: SimonSun Date: Sun, 5 Aug 2018 12:19:33 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=AE=BE=E7=BD=AEmybatis-plus=20key-genera?= =?UTF-8?q?tor=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-pg.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application-pg.yml b/src/main/resources/application-pg.yml index d3495af..d1f55c9 100644 --- a/src/main/resources/application-pg.yml +++ b/src/main/resources/application-pg.yml @@ -34,7 +34,7 @@ mybatis-plus: #数据库大写下划线转换 #capital-mode: true # Sequence序列接口实现类配置 - key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator + key-generator: com.baomidou.mybatisplus.incrementer.PostgreKeyGenerator #逻辑删除配置(下面3个配置) logic-delete-value: 1 logic-not-delete-value: 0 -- Gitee From e72266aaa06d8d94525f67527554c2b8dbb98659 Mon Sep 17 00:00:00 2001 From: SimonSun Date: Mon, 6 Aug 2018 21:13:23 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=88=86=E5=B8=83=E5=BC=8F=E5=94=AF?= =?UTF-8?q?=E4=B8=80ID=EF=BC=9B=E4=BD=BF=E7=94=A8=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=99=A8=E7=94=9F=E6=88=90=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/simon/common/code/CodeGenerator.java | 30 +-- .../com/simon/common/config/RedisConfig.java | 2 - .../com/simon/common/config/Swagger2.java | 7 +- .../simon/common/service/BasicService.java | 1 + .../common/utils/snowflake/Sequence.java | 162 +++++++++++++ .../common/utils/snowflake/SequenceId.java | 155 +++++++++++++ .../common/utils/snowflake/SnowFlake.java | 104 +++++++++ .../common/utils/snowflake/SnowFlakeId.java | 185 +++++++++++++++ .../common/utils/snowflake/SystemClock.java | 68 ++++++ .../simon/controller/NewsInfoController.java | 14 +- .../simon/controller/QrCodeController.java | 2 +- .../java/com/simon/mapper/LogLoginMapper.java | 5 +- .../java/com/simon/mapper/NewsTagMapper.java | 6 +- .../java/com/simon/mapper/QrCodeMapper.java | 6 +- .../com/simon/mapper/ResetPwdInfoMapper.java | 6 +- .../java/com/simon/mapper/VeriCodeMapper.java | 6 +- src/main/java/com/simon/model/Authority.java | 4 - src/main/java/com/simon/model/LogLogin.java | 58 +++-- src/main/java/com/simon/model/NewsInfo.java | 102 ++++++--- src/main/java/com/simon/model/NewsTag.java | 50 ++-- src/main/java/com/simon/model/OauthUser.java | 215 ++++++++++++++++-- src/main/java/com/simon/model/QrCode.java | 74 +++--- .../java/com/simon/model/ResetPwdInfo.java | 86 ++++--- src/main/java/com/simon/model/VeriCode.java | 68 ++++-- .../simon/repository/NewsTagRepository.java | 9 + .../repository/ResetPwdInfoRepository.java | 9 + .../com/simon/service/NewsInfoService.java | 18 +- .../com/simon/service/NewsTagService.java | 12 + .../simon/service/ResetPwdInfoService.java | 12 + .../com/simon/service/VeriCodeService.java | 3 +- .../serviceImpl/NewsInfoServiceImpl.java | 67 +++++- .../simon/serviceImpl/NewsTagServiceImpl.java | 88 +++++++ .../serviceImpl/ResetPwdInfoServiceImpl.java | 88 +++++++ .../serviceImpl/VeriCodeServiceImpl.java | 68 ++++++ src/main/resources/application-mysql.yml | 2 +- src/main/resources/application-pg.yml | 2 +- src/main/resources/application.properties | 1 + src/main/resources/mapping/NewsInfoMapper.xml | 6 +- .../resources/templates/code/service-impl.ftl | 9 +- 39 files changed, 1563 insertions(+), 247 deletions(-) create mode 100644 src/main/java/com/simon/common/utils/snowflake/Sequence.java create mode 100644 src/main/java/com/simon/common/utils/snowflake/SequenceId.java create mode 100644 src/main/java/com/simon/common/utils/snowflake/SnowFlake.java create mode 100644 src/main/java/com/simon/common/utils/snowflake/SnowFlakeId.java create mode 100644 src/main/java/com/simon/common/utils/snowflake/SystemClock.java create mode 100644 src/main/java/com/simon/repository/NewsTagRepository.java create mode 100644 src/main/java/com/simon/repository/ResetPwdInfoRepository.java create mode 100644 src/main/java/com/simon/service/NewsTagService.java create mode 100644 src/main/java/com/simon/service/ResetPwdInfoService.java create mode 100644 src/main/java/com/simon/serviceImpl/NewsTagServiceImpl.java create mode 100644 src/main/java/com/simon/serviceImpl/ResetPwdInfoServiceImpl.java diff --git a/src/main/java/com/simon/common/code/CodeGenerator.java b/src/main/java/com/simon/common/code/CodeGenerator.java index b8f74af..f9085b4 100644 --- a/src/main/java/com/simon/common/code/CodeGenerator.java +++ b/src/main/java/com/simon/common/code/CodeGenerator.java @@ -55,7 +55,14 @@ public class CodeGenerator { //genCode("users", "news_info"); //genCodeByCustomModelName("输入表名","输入自定义Model名称"); - genCodeByCustomModelName("users","User"); + /*genCodeByCustomModelName("news_info","NewsInfo"); + genCodeByCustomModelName("users", "OauthUser"); + genCodeByCustomModelName("veri_code", "VeriCode"); + genCodeByCustomModelName("reset_pwd_info", "ResetPwdInfo"); + genCodeByCustomModelName("qr_code", "QrCode"); + genCodeByCustomModelName("log_login", "LogLogin"); + genCodeByCustomModelName("news_tag", "NewsTag");*/ + } /** @@ -75,16 +82,16 @@ public class CodeGenerator { * @param tableName 数据表名称 * @param modelName 自定义的 Model 名称 */ - public static void genCodeByCustomModelName(String tableName, String modelName) { + private static void genCodeByCustomModelName(String tableName, String modelName) { genModelAndMapper(tableName, modelName); genRepository(tableName, modelName); genService(tableName, modelName); - genController(tableName, modelName); + //genController(tableName, modelName); } - public static void genModelAndMapper(String tableName, String modelName) { + private static void genModelAndMapper(String tableName, String modelName) { Context context = new Context(ModelType.FLAT); context.setId("Potato"); context.setTargetRuntime("MyBatis3Simple"); @@ -134,7 +141,7 @@ public class CodeGenerator { boolean overwrite = true; DefaultShellCallback callback = new DefaultShellCallback(overwrite); - warnings = new ArrayList(); + warnings = new ArrayList<>(); generator = new MyBatisGenerator(config, callback, warnings); generator.generate(null); } catch (Exception e) { @@ -150,7 +157,7 @@ public class CodeGenerator { System.out.println(modelName + "Mapper.xml 生成成功"); } - public static void genRepository(String tableName, String modelName) { + private static void genRepository(String tableName, String modelName) { try { freemarker.template.Configuration cfg = getConfiguration(); @@ -175,7 +182,7 @@ public class CodeGenerator { } } - public static void genService(String tableName, String modelName) { + private static void genService(String tableName, String modelName) { try { freemarker.template.Configuration cfg = getConfiguration(); @@ -207,7 +214,7 @@ public class CodeGenerator { } } - public static void genController(String tableName, String modelName) { + private static void genController(String tableName, String modelName) { try { freemarker.template.Configuration cfg = getConfiguration(); @@ -217,7 +224,7 @@ public class CodeGenerator { String modelNameUpperCamel = StringUtils.isEmpty(modelName) ? tableNameConvertUpperCamel(tableName) : modelName; data.put("baseRequestMapping", modelNameConvertMappingPath(modelNameUpperCamel)); data.put("modelNameUpperCamel", modelNameUpperCamel); - data.put("modelNameLowerCamel", CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, modelNameUpperCamel)); + data.put("modelNameLowerCamel", modelNameConvertLowerCamel(modelNameUpperCamel)); data.put("basePackage", BASE_PACKAGE); File file = new File(PROJECT_PATH + JAVA_PATH + PACKAGE_PATH_CONTROLLER + modelNameUpperCamel + "Controller.java"); @@ -266,10 +273,7 @@ public class CodeGenerator { } private static String modelNameConvertLowerCamel(String modelName){ - if(Character.isLowerCase(modelName.charAt(0))) - return modelName; - else - return (new StringBuilder()).append(Character.toLowerCase(modelName.charAt(0))).append(modelName.substring(1)).toString(); + return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, modelName); } } \ No newline at end of file diff --git a/src/main/java/com/simon/common/config/RedisConfig.java b/src/main/java/com/simon/common/config/RedisConfig.java index 839aeb9..fd140de 100644 --- a/src/main/java/com/simon/common/config/RedisConfig.java +++ b/src/main/java/com/simon/common/config/RedisConfig.java @@ -9,11 +9,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.CacheErrorHandler; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; diff --git a/src/main/java/com/simon/common/config/Swagger2.java b/src/main/java/com/simon/common/config/Swagger2.java index 33ecb94..ae54eba 100644 --- a/src/main/java/com/simon/common/config/Swagger2.java +++ b/src/main/java/com/simon/common/config/Swagger2.java @@ -21,6 +21,9 @@ import java.util.List; @Configuration @EnableSwagger2 public class Swagger2 { + @Value("${swagger2.base-package}") + private String basePackage; + @Value("${swagger2.title}") private String title; @@ -55,8 +58,8 @@ public class Swagger2 { .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors - .basePackage("com.simon.controller")) - .paths(PathSelectors.regex("^(?!auth).*$")) + .basePackage(basePackage)) + .paths(PathSelectors.regex("^(?!oauth).*$")) .build() .securitySchemes(securitySchemes()) .securityContexts(securityContexts()); diff --git a/src/main/java/com/simon/common/service/BasicService.java b/src/main/java/com/simon/common/service/BasicService.java index 45fe078..986298f 100644 --- a/src/main/java/com/simon/common/service/BasicService.java +++ b/src/main/java/com/simon/common/service/BasicService.java @@ -15,6 +15,7 @@ import java.util.List; public interface BasicService { T save(T model); + List save(List modelList); PageInfo findAll(int pageNo); Page findAll(Pageable pageable); List findAll(); diff --git a/src/main/java/com/simon/common/utils/snowflake/Sequence.java b/src/main/java/com/simon/common/utils/snowflake/Sequence.java new file mode 100644 index 0000000..5430f4f --- /dev/null +++ b/src/main/java/com/simon/common/utils/snowflake/Sequence.java @@ -0,0 +1,162 @@ +package com.simon.common.utils.snowflake; + +import com.baomidou.mybatisplus.toolkit.SystemClock; + +/** + * 基于Twitter的Snowflake算法实现分布式高效有序ID生产黑科技(sequence) + * + *
+ * SnowFlake的结构如下(每部分用-分开):
+ *
+ * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
+ *
+ * 1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0
+ *
+ * 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截) + * 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69
+ *
+ * 10位的数据机器位,可以部署在1024个节点,包括5位datacenterId和5位workerId
+ *
+ * 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号
+ *
+ *
+ * 加起来刚好64位,为一个Long型。
+ * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。 + * + * @author lry + */ +public class Sequence { + + /** 起始时间戳,用于用当前时间戳减去这个时间戳,算出偏移量 **/ + private final long startTime = 1519740777809L; + + /** workerId占用的位数5(表示只允许workId的范围为:0-1023)**/ + private final long workerIdBits = 5L; + /** dataCenterId占用的位数:5 **/ + private final long dataCenterIdBits = 5L; + /** 序列号占用的位数:12(表示只允许workId的范围为:0-4095)**/ + private final long sequenceBits = 12L; + + /** workerId可以使用的最大数值:31 **/ + private final long maxWorkerId = -1L ^ (-1L << workerIdBits); + /** dataCenterId可以使用的最大数值:31 **/ + private final long maxDataCenterId = -1L ^ (-1L << dataCenterIdBits); + + private final long workerIdShift = sequenceBits; + private final long dataCenterIdShift = sequenceBits + workerIdBits; + private final long timestampLeftShift = sequenceBits + workerIdBits + dataCenterIdBits; + + /** 用mask防止溢出:位与运算保证计算的结果范围始终是 0-4095 **/ + private final long sequenceMask = -1L ^ (-1L << sequenceBits); + + private long workerId; + private long dataCenterId; + private long sequence = 0L; + private long lastTimestamp = -1L; + private boolean isClock = false; + + /** + * 基于Snowflake创建分布式ID生成器 + *

+ * 注:sequence + * + * @param workerId 工作机器ID,数据范围为0~31 + * @param dataCenterId 数据中心ID,数据范围为0~31 + */ + public Sequence(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 void setClock(boolean clock) { + isClock = clock; + } + + /** + * 获取ID + * + * @return + */ + public synchronized Long nextId() { + long timestamp = this.timeGen(); + + // 闰秒:如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常 + if (timestamp < lastTimestamp) { + long offset = lastTimestamp - timestamp; + if (offset <= 5) { + try { + this.wait(offset << 1); + timestamp = this.timeGen(); + if (timestamp < lastTimestamp) { + throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", offset)); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } else { + throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", offset)); + } + } + + // 解决跨毫秒生成ID序列号始终为偶数的缺陷:如果是同一时间生成的,则进行毫秒内序列 + if (lastTimestamp == timestamp) { + // 通过位与运算保证计算的结果范围始终是 0-4095 + sequence = (sequence + 1) & sequenceMask; + if (sequence == 0) { + timestamp = this.tilNextMillis(lastTimestamp); + } + } else { + // 时间戳改变,毫秒内序列重置 + sequence = 0L; + } + + lastTimestamp = timestamp; + + /* + * 1.左移运算是为了将数值移动到对应的段(41、5、5,12那段因为本来就在最右,因此不用左移) + * 2.然后对每个左移后的值(la、lb、lc、sequence)做位或运算,是为了把各个短的数据合并起来,合并成一个二进制数 + * 3.最后转换成10进制,就是最终生成的id + */ + return ((timestamp - startTime) << timestampLeftShift) | + (dataCenterId << dataCenterIdShift) | + (workerId << workerIdShift) | + sequence; + } + + /** + * 保证返回的毫秒数在参数之后(阻塞到下一个毫秒,直到获得新的时间戳) + * + * @param lastTimestamp + * @return + */ + private long tilNextMillis(long lastTimestamp) { + long timestamp = this.timeGen(); + while (timestamp <= lastTimestamp) { + timestamp = this.timeGen(); + } + + return timestamp; + } + + /** + * 获得系统当前毫秒数 + * + * @return timestamp + */ + private long timeGen() { + if (isClock) { + // 解决高并发下获取时间戳的性能问题 + return SystemClock.now(); + } else { + return System.currentTimeMillis(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/simon/common/utils/snowflake/SequenceId.java b/src/main/java/com/simon/common/utils/snowflake/SequenceId.java new file mode 100644 index 0000000..a060777 --- /dev/null +++ b/src/main/java/com/simon/common/utils/snowflake/SequenceId.java @@ -0,0 +1,155 @@ +package com.simon.common.utils.snowflake; + +import com.baomidou.mybatisplus.toolkit.SystemClock; +import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.id.IdentifierGenerator; + +import java.io.Serializable; + +/** + * @author simon + * @create 2018-08-06 2:48 + **/ + +public class SequenceId implements IdentifierGenerator { + /** 起始时间戳,用于用当前时间戳减去这个时间戳,算出偏移量 **/ + private final long startTime = 1519740777809L; + + /** workerId占用的位数5(表示只允许workId的范围为:0-1023)**/ + private final long workerIdBits = 5L; + /** dataCenterId占用的位数:5 **/ + private final long dataCenterIdBits = 5L; + /** 序列号占用的位数:12(表示只允许workId的范围为:0-4095)**/ + private final long sequenceBits = 12L; + + /** workerId可以使用的最大数值:31 **/ + private final long maxWorkerId = -1L ^ (-1L << workerIdBits); + /** dataCenterId可以使用的最大数值:31 **/ + private final long maxDataCenterId = -1L ^ (-1L << dataCenterIdBits); + + private final long workerIdShift = sequenceBits; + private final long dataCenterIdShift = sequenceBits + workerIdBits; + private final long timestampLeftShift = sequenceBits + workerIdBits + dataCenterIdBits; + + /** 用mask防止溢出:位与运算保证计算的结果范围始终是 0-4095 **/ + private final long sequenceMask = -1L ^ (-1L << sequenceBits); + + private long workerId; + private long dataCenterId; + private long sequence = 0L; + private long lastTimestamp = -1L; + private boolean isClock = false; + + public SequenceId() { + } + + /** + * 基于Snowflake创建分布式ID生成器 + *

+ * 注:sequence + * + * @param workerId 工作机器ID,数据范围为0~31 + * @param dataCenterId 数据中心ID,数据范围为0~31 + */ + public SequenceId(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 void setClock(boolean clock) { + isClock = clock; + } + + /** + * 获取ID + * + * @return + */ + public synchronized Long nextId() { + long timestamp = this.timeGen(); + + // 闰秒:如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常 + if (timestamp < lastTimestamp) { + long offset = lastTimestamp - timestamp; + if (offset <= 5) { + try { + this.wait(offset << 1); + timestamp = this.timeGen(); + if (timestamp < lastTimestamp) { + throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", offset)); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } else { + throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", offset)); + } + } + + // 解决跨毫秒生成ID序列号始终为偶数的缺陷:如果是同一时间生成的,则进行毫秒内序列 + if (lastTimestamp == timestamp) { + // 通过位与运算保证计算的结果范围始终是 0-4095 + sequence = (sequence + 1) & sequenceMask; + if (sequence == 0) { + timestamp = this.tilNextMillis(lastTimestamp); + } + } else { + // 时间戳改变,毫秒内序列重置 + sequence = 0L; + } + + lastTimestamp = timestamp; + + /* + * 1.左移运算是为了将数值移动到对应的段(41、5、5,12那段因为本来就在最右,因此不用左移) + * 2.然后对每个左移后的值(la、lb、lc、sequence)做位或运算,是为了把各个短的数据合并起来,合并成一个二进制数 + * 3.最后转换成10进制,就是最终生成的id + */ + return ((timestamp - startTime) << timestampLeftShift) | + (dataCenterId << dataCenterIdShift) | + (workerId << workerIdShift) | + sequence; + } + + /** + * 保证返回的毫秒数在参数之后(阻塞到下一个毫秒,直到获得新的时间戳) + * + * @param lastTimestamp + * @return + */ + private long tilNextMillis(long lastTimestamp) { + long timestamp = this.timeGen(); + while (timestamp <= lastTimestamp) { + timestamp = this.timeGen(); + } + + return timestamp; + } + + /** + * 获得系统当前毫秒数 + * + * @return timestamp + */ + private long timeGen() { + if (isClock) { + // 解决高并发下获取时间戳的性能问题 + return SystemClock.now(); + } else { + return System.currentTimeMillis(); + } + } + + @Override + public Serializable generate(SessionImplementor sessionImplementor, Object o) throws HibernateException { + return nextId(); + } +} diff --git a/src/main/java/com/simon/common/utils/snowflake/SnowFlake.java b/src/main/java/com/simon/common/utils/snowflake/SnowFlake.java new file mode 100644 index 0000000..10019e3 --- /dev/null +++ b/src/main/java/com/simon/common/utils/snowflake/SnowFlake.java @@ -0,0 +1,104 @@ +package com.simon.common.utils.snowflake; + +/** + * twitter的snowflake算法 -- java实现 + * + * @author beyond + * @date 2016/11/26 + */ +public class SnowFlake { + + /** + * 起始的时间戳 + */ + private final static long START_STMP = 1533491178000L; + + /** + * 每一部分占用的位数 + */ + 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 SnowFlake(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(); + } + + public static void main(String[] args) { + SnowFlake snowFlake = new SnowFlake(2, 3); + + for (int i = 0; i < (1 << 12); i++) { + System.out.println(snowFlake.nextId()); + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/simon/common/utils/snowflake/SnowFlakeId.java b/src/main/java/com/simon/common/utils/snowflake/SnowFlakeId.java new file mode 100644 index 0000000..c0dfa2e --- /dev/null +++ b/src/main/java/com/simon/common/utils/snowflake/SnowFlakeId.java @@ -0,0 +1,185 @@ +package com.simon.common.utils.snowflake; + +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.id.IdentifierGenerator; + +import java.io.Serializable; + +/** + * Twitter_Snowflake
+ * SnowFlake的结构如下(每部分用-分开):
+ * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
+ * 1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0
+ * 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截) + * 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69
+ * 10位的数据机器位,可以部署在1024个节点,包括5位datacenterId和5位workerId
+ * 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号
+ * 加起来刚好64位,为一个Long型。
+ * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。 + * @author : felixu + * @createTime : 2017/11/28. + */ +public class SnowFlakeId implements IdentifierGenerator{ + + // ==============================Fields=========================================== + /** + * 开始时间截 (2018-08-06) + */ + private static final long TWEPOCH = 1533491178000L; + + /** + * 机器id所占的位数 + */ + private static final long WORKER_ID_BITS = 5L; + + /** + * 数据标识id所占的位数 + */ + private static final long DATA_CENTER_ID_BITS = 5L; + + /** + * 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) + */ + private static final long MAX_WORKER_ID = -1L ^ (-1L << WORKER_ID_BITS); + + /** + * 支持的最大数据标识id,结果是31 + */ + private static final long MAX_DATA_CENTER_ID = -1L ^ (-1L << DATA_CENTER_ID_BITS); + + /** + * 序列在id中占的位数 + */ + private static final long SEQUENCE_BITS = 12L; + + /** + * 机器ID向左移12位 + */ + private static final long WORKER_ID_SHIFT = SEQUENCE_BITS; + + /** + * 数据标识id向左移17位(12+5) + */ + private static final long DATA_CENTER_ID_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS; + + /** + * 时间截向左移22位(5+5+12) + */ + private static final long TIMESTAMP_LEFT_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS + DATA_CENTER_ID_BITS; + + /** + * 生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095) + */ + private static final long SEQUENCE_MASK = -1L ^ (-1L << SEQUENCE_BITS); + + /** + * 工作机器ID(0~31) + */ + private static long workerId; + + /** + * 数据中心ID(0~31) + */ + private static long datacenterId; + + /** + * 毫秒内序列(0~4095) + */ + private static long sequence = 0L; + + /** + * 上次生成ID的时间截 + */ + private static long lastTimestamp = -1L; + + //==============================Constructors===================================== + + public SnowFlakeId() { + } + + /** + * 构造函数 + * + * @param workerId 工作ID (0~31) + * @param datacenterId 数据中心ID (0~31) + */ + private SnowFlakeId(long workerId, long datacenterId) { + if (workerId > MAX_WORKER_ID || workerId < 0) { + throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", MAX_WORKER_ID)); + } + if (datacenterId > MAX_DATA_CENTER_ID || datacenterId < 0) { + throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", MAX_DATA_CENTER_ID)); + } + SnowFlakeId.workerId = workerId; + SnowFlakeId.datacenterId = datacenterId; + } + + // ==============================Methods========================================== + + /** + * 获得下一个ID (该方法是线程安全的) + * + * @return SnowFlakeId + */ + public static synchronized long getId() { + System.out.println(workerId + "," + datacenterId); + long timestamp = timeGen(); + + //如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常 + 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) & SEQUENCE_MASK; + //毫秒内序列溢出 + if (sequence == 0) { + //阻塞到下一个毫秒,获得新的时间戳 + timestamp = tilNextMillis(lastTimestamp); + } + } + //时间戳改变,毫秒内序列重置 + else { + sequence = 0L; + } + + //上次生成ID的时间截 + lastTimestamp = timestamp; + + //移位并通过或运算拼到一起组成64位的ID + return ((timestamp - TWEPOCH) << TIMESTAMP_LEFT_SHIFT) + | (datacenterId << DATA_CENTER_ID_SHIFT) + | (workerId << WORKER_ID_SHIFT) + | sequence; + } + + /** + * 阻塞到下一个毫秒,直到获得新的时间戳 + * + * @param lastTimestamp 上次生成ID的时间截 + * @return 当前时间戳 + */ + protected static long tilNextMillis(long lastTimestamp) { + long timestamp = timeGen(); + while (timestamp <= lastTimestamp) { + timestamp = timeGen(); + } + return timestamp; + } + + /** + * 返回以毫秒为单位的当前时间 + * + * @return 当前时间(毫秒) + */ + protected static long timeGen() { + return System.currentTimeMillis(); + } + + @Override + public Serializable generate(SessionImplementor s, Object obj) { + return getId(); + } +} \ No newline at end of file diff --git a/src/main/java/com/simon/common/utils/snowflake/SystemClock.java b/src/main/java/com/simon/common/utils/snowflake/SystemClock.java new file mode 100644 index 0000000..609eaff --- /dev/null +++ b/src/main/java/com/simon/common/utils/snowflake/SystemClock.java @@ -0,0 +1,68 @@ +package com.simon.common.utils.snowflake; + +import java.sql.Timestamp; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +/** + * 高并发场景下System.currentTimeMillis()的性能问题的优化 + *

+ * System.currentTimeMillis()的调用比new一个普通对象要耗时的多(具体耗时高出多少我还没测试过,有人说是100倍左右)

+ * System.currentTimeMillis()之所以慢是因为去跟系统打了一次交道

+ * 后台定时更新时钟,JVM退出时,线程自动回收

+ * 10亿:43410,206,210.72815533980582%

+ * 1亿:4699,29,162.0344827586207%

+ * 1000万:480,12,40.0%

+ * 100万:50,10,5.0%

+ * @author lry + */ +public class SystemClock { + + private final long period; + private final AtomicLong now; + + private SystemClock(long period) { + this.period = period; + this.now = new AtomicLong(System.currentTimeMillis()); + scheduleClockUpdating(); + } + + private static class InstanceHolder { + public static final SystemClock INSTANCE = new SystemClock(1); + } + + private static SystemClock instance() { + return InstanceHolder.INSTANCE; + } + + private void scheduleClockUpdating() { + ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() { + public Thread newThread(Runnable runnable) { + Thread thread = new Thread(runnable, "System Clock"); + thread.setDaemon(true); + return thread; + } + }); + scheduler.scheduleAtFixedRate(new Runnable() { + public void run() { + now.set(System.currentTimeMillis()); + } + }, period, period, TimeUnit.MILLISECONDS); + } + + private long currentTimeMillis() { + return now.get(); + } + + public static long now() { + return instance().currentTimeMillis(); + } + + public static String nowDate() { + return new Timestamp(instance().currentTimeMillis()).toString(); + } + +} \ No newline at end of file diff --git a/src/main/java/com/simon/controller/NewsInfoController.java b/src/main/java/com/simon/controller/NewsInfoController.java index 79d4917..c93d335 100644 --- a/src/main/java/com/simon/controller/NewsInfoController.java +++ b/src/main/java/com/simon/controller/NewsInfoController.java @@ -1,12 +1,10 @@ package com.simon.controller; import com.simon.common.domain.ResultMsg; +import com.simon.model.NewsInfo; import com.simon.service.NewsInfoService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * 新闻 @@ -22,6 +20,12 @@ public class NewsInfoController { @GetMapping("") public ResultMsg getAll(@RequestParam int pageNo){ - return ResultMsg.success(200, "", newsInfoService.getAll(pageNo)); + return ResultMsg.success(200, "", newsInfoService.findAll(pageNo)); + } + + @PostMapping("") + public ResultMsg post(@RequestBody NewsInfo newsInfo){ + newsInfoService.save(newsInfo); + return ResultMsg.success(200, "新增成功"); } } diff --git a/src/main/java/com/simon/controller/QrCodeController.java b/src/main/java/com/simon/controller/QrCodeController.java index c836115..e911ab2 100644 --- a/src/main/java/com/simon/controller/QrCodeController.java +++ b/src/main/java/com/simon/controller/QrCodeController.java @@ -34,7 +34,7 @@ public class QrCodeController { if (null != qrCode){ qrCode.setUsername(username); qrCode.setToken(access_token); - qrCode.setOk(true); + qrCode.setIsOk(true); qrCodeRepository.save(qrCode); return ResultMsg.success(200, "扫码成功"); }else{ diff --git a/src/main/java/com/simon/mapper/LogLoginMapper.java b/src/main/java/com/simon/mapper/LogLoginMapper.java index fd833c3..8ef3419 100644 --- a/src/main/java/com/simon/mapper/LogLoginMapper.java +++ b/src/main/java/com/simon/mapper/LogLoginMapper.java @@ -1,7 +1,10 @@ package com.simon.mapper; +import com.simon.common.mapper.MyMapper; import com.simon.model.LogLogin; +import org.springframework.stereotype.Repository; -public interface LogLoginMapper { +@Repository +public interface LogLoginMapper extends MyMapper { LogLogin selectByPrimaryKey(Long id); } \ No newline at end of file diff --git a/src/main/java/com/simon/mapper/NewsTagMapper.java b/src/main/java/com/simon/mapper/NewsTagMapper.java index bf3d937..1e87206 100644 --- a/src/main/java/com/simon/mapper/NewsTagMapper.java +++ b/src/main/java/com/simon/mapper/NewsTagMapper.java @@ -1,7 +1,9 @@ package com.simon.mapper; +import com.simon.common.mapper.MyMapper; import com.simon.model.NewsTag; +import org.springframework.stereotype.Repository; -public interface NewsTagMapper { - NewsTag selectByPrimaryKey(Long id); +@Repository +public interface NewsTagMapper extends MyMapper { } \ No newline at end of file diff --git a/src/main/java/com/simon/mapper/QrCodeMapper.java b/src/main/java/com/simon/mapper/QrCodeMapper.java index 7573f0d..efaf6ce 100644 --- a/src/main/java/com/simon/mapper/QrCodeMapper.java +++ b/src/main/java/com/simon/mapper/QrCodeMapper.java @@ -1,7 +1,9 @@ package com.simon.mapper; +import com.simon.common.mapper.MyMapper; import com.simon.model.QrCode; +import org.springframework.stereotype.Repository; -public interface QrCodeMapper { - QrCode selectByPrimaryKey(Long id); +@Repository +public interface QrCodeMapper extends MyMapper { } \ No newline at end of file diff --git a/src/main/java/com/simon/mapper/ResetPwdInfoMapper.java b/src/main/java/com/simon/mapper/ResetPwdInfoMapper.java index c514c8c..e8258df 100644 --- a/src/main/java/com/simon/mapper/ResetPwdInfoMapper.java +++ b/src/main/java/com/simon/mapper/ResetPwdInfoMapper.java @@ -1,7 +1,9 @@ package com.simon.mapper; +import com.simon.common.mapper.MyMapper; import com.simon.model.ResetPwdInfo; +import org.springframework.stereotype.Repository; -public interface ResetPwdInfoMapper { - ResetPwdInfo selectByPrimaryKey(Long id); +@Repository +public interface ResetPwdInfoMapper extends MyMapper { } \ No newline at end of file diff --git a/src/main/java/com/simon/mapper/VeriCodeMapper.java b/src/main/java/com/simon/mapper/VeriCodeMapper.java index 8a699c5..48c7b43 100644 --- a/src/main/java/com/simon/mapper/VeriCodeMapper.java +++ b/src/main/java/com/simon/mapper/VeriCodeMapper.java @@ -1,7 +1,9 @@ package com.simon.mapper; +import com.simon.common.mapper.MyMapper; import com.simon.model.VeriCode; +import org.springframework.stereotype.Repository; -public interface VeriCodeMapper { - VeriCode selectByPrimaryKey(Integer id); +@Repository +public interface VeriCodeMapper extends MyMapper { } \ No newline at end of file diff --git a/src/main/java/com/simon/model/Authority.java b/src/main/java/com/simon/model/Authority.java index 309b706..26e9a16 100644 --- a/src/main/java/com/simon/model/Authority.java +++ b/src/main/java/com/simon/model/Authority.java @@ -1,7 +1,5 @@ package com.simon.model; -import lombok.EqualsAndHashCode; -import lombok.ToString; import org.springframework.security.core.GrantedAuthority; import javax.persistence.Entity; @@ -9,8 +7,6 @@ import javax.persistence.Id; import javax.persistence.Table; import java.io.Serializable; -@EqualsAndHashCode -@ToString @Table(name = "authorities") @Entity public class Authority implements GrantedAuthority, Serializable { diff --git a/src/main/java/com/simon/model/LogLogin.java b/src/main/java/com/simon/model/LogLogin.java index 425ba58..4a05f1c 100644 --- a/src/main/java/com/simon/model/LogLogin.java +++ b/src/main/java/com/simon/model/LogLogin.java @@ -1,26 +1,25 @@ package com.simon.model; -import lombok.EqualsAndHashCode; -import lombok.ToString; +import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.io.Serializable; import java.util.Date; -/** - * @author simon - * @create 2018-07-25 22:17 - **/ -@EqualsAndHashCode -@ToString @Entity @Table(name = "log_login") public class LogLogin implements Serializable { - private static final long serialVersionUID = -4527200937557834187L; + private static final long serialVersionUID = -1797278390731325076L; + @Id + @GeneratedValue(generator = "sequenceId") + @GenericGenerator(name = "sequenceId", strategy = "com.simon.common.utils.snowflake.SequenceId") + private Long id; - private long id; + @Column(name = "create_time") private Date createTime; + private String ip; + private String username; public LogLogin() { @@ -32,44 +31,59 @@ public class LogLogin implements Serializable { this.username = username; } - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") - public long getId() { + /** + * @return id + */ + public Long getId() { return id; } - public void setId(long id) { + /** + * @param id + */ + public void setId(Long id) { this.id = id; } - @Basic - @Column(name = "create_time") + /** + * @return create_time + */ public Date getCreateTime() { return createTime; } + /** + * @param createTime + */ public void setCreateTime(Date createTime) { this.createTime = createTime; } - @Basic - @Column(name = "ip") + /** + * @return ip + */ public String getIp() { return ip; } + /** + * @param ip + */ public void setIp(String ip) { this.ip = ip; } - @Basic - @Column(name = "username") + /** + * @return username + */ public String getUsername() { return username; } + /** + * @param username + */ public void setUsername(String username) { this.username = username; } -} +} \ No newline at end of file diff --git a/src/main/java/com/simon/model/NewsInfo.java b/src/main/java/com/simon/model/NewsInfo.java index 74a79c1..dd98264 100644 --- a/src/main/java/com/simon/model/NewsInfo.java +++ b/src/main/java/com/simon/model/NewsInfo.java @@ -1,110 +1,146 @@ package com.simon.model; - -import lombok.EqualsAndHashCode; -import lombok.ToString; +import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.io.Serializable; -import java.sql.Timestamp; - -/** - * @author simon - * @create 2018-07-24 0:01 - **/ -@EqualsAndHashCode -@ToString +import java.util.Date; + @Entity @Table(name = "news_info") public class NewsInfo implements Serializable { - private static final long serialVersionUID = 2260208401573792959L; + private static final long serialVersionUID = 3237531145721255719L; + @Id + @GeneratedValue(generator = "sequenceId") + @GenericGenerator(name = "sequenceId", strategy = "com.simon.common.utils.snowflake.SequenceId") private Long id; + private String title; + + @Column(name = "user_id") private Long userId; + private Integer status; + private String content; + + @Column(name = "image_url") private String imageUrl; - private Timestamp publishDate; + + @Column(name = "publish_date") + private Date publishDate; + private String tags; - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") + /** + * @return id + */ public Long getId() { return id; } + /** + * @param id + */ public void setId(Long id) { this.id = id; } - @Basic - @Column(name = "title") + /** + * @return title + */ public String getTitle() { return title; } + /** + * @param title + */ public void setTitle(String title) { this.title = title; } - @Basic - @Column(name = "user_id") + /** + * @return user_id + */ public Long getUserId() { return userId; } + /** + * @param userId + */ public void setUserId(Long userId) { this.userId = userId; } - @Basic - @Column(name = "status") + /** + * @return status + */ public Integer getStatus() { return status; } + /** + * @param status + */ public void setStatus(Integer status) { this.status = status; } - @Basic - @Column(name = "content") + /** + * @return content + */ public String getContent() { return content; } + /** + * @param content + */ public void setContent(String content) { this.content = content; } - @Basic - @Column(name = "image_url") + /** + * @return image_url + */ public String getImageUrl() { return imageUrl; } + /** + * @param imageUrl + */ public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; } - @Basic - @Column(name = "publish_date") - public Timestamp getPublishDate() { + /** + * @return publish_date + */ + public Date getPublishDate() { return publishDate; } - public void setPublishDate(Timestamp publishDate) { + /** + * @param publishDate + */ + public void setPublishDate(Date publishDate) { this.publishDate = publishDate; } - @Basic - @Column(name = "tags") + /** + * @return tags + */ public String getTags() { return tags; } + /** + * @param tags + */ public void setTags(String tags) { this.tags = tags; } -} +} \ No newline at end of file diff --git a/src/main/java/com/simon/model/NewsTag.java b/src/main/java/com/simon/model/NewsTag.java index b69e9f2..69a8dcf 100644 --- a/src/main/java/com/simon/model/NewsTag.java +++ b/src/main/java/com/simon/model/NewsTag.java @@ -1,52 +1,64 @@ package com.simon.model; -import lombok.EqualsAndHashCode; -import lombok.ToString; +import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.io.Serializable; -/** - * @author simon - * @create 2018-07-25 22:17 - **/ -@EqualsAndHashCode -@ToString @Entity @Table(name = "news_tag") public class NewsTag implements Serializable { - private static final long serialVersionUID = -1622210657684111480L; - private long id; + private static final long serialVersionUID = -6089611811346962418L; + @Id + @GeneratedValue(generator = "sequenceId") + @GenericGenerator(name = "sequenceId", strategy = "com.simon.common.utils.snowflake.SequenceId") + private Long id; + + @Column(name = "news_info_id") private Long newsInfoId; + + @Column(name = "tag_id") private Long tagId; - @Id - @Column(name = "id") - public long getId() { + /** + * @return id + */ + public Long getId() { return id; } - public void setId(long id) { + /** + * @param id + */ + public void setId(Long id) { this.id = id; } - @Basic - @Column(name = "news_info_id") + /** + * @return news_info_id + */ public Long getNewsInfoId() { return newsInfoId; } + /** + * @param newsInfoId + */ public void setNewsInfoId(Long newsInfoId) { this.newsInfoId = newsInfoId; } - @Basic - @Column(name = "tag_id") + /** + * @return tag_id + */ public Long getTagId() { return tagId; } + /** + * @param tagId + */ public void setTagId(Long tagId) { this.tagId = tagId; } -} +} \ No newline at end of file diff --git a/src/main/java/com/simon/model/OauthUser.java b/src/main/java/com/simon/model/OauthUser.java index 9c08192..58550e7 100644 --- a/src/main/java/com/simon/model/OauthUser.java +++ b/src/main/java/com/simon/model/OauthUser.java @@ -1,56 +1,225 @@ package com.simon.model; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.*; +import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.io.Serializable; -@ApiModel(value = "OauthUser", description = "用户") -@Data -@Table(name = "users") @Entity +@Table(name = "users") public class OauthUser implements Serializable { - private static final long serialVersionUID = 697626476195753325L; - + private static final long serialVersionUID = 7928736608744438474L; @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GeneratedValue(generator = "sequenceId") + @GenericGenerator(name = "sequenceId", strategy = "com.simon.common.utils.snowflake.SequenceId") private Long id; - @ApiModelProperty(value = "用户名") private String username; - @ApiModelProperty(value = "密码") private String password; - @ApiModelProperty(value = "是否有效") private Boolean enabled; - @ApiModelProperty(value = "邮箱") private String email; - @ApiModelProperty(value = "手机号") private String phone; - @ApiModelProperty(value = "年龄") + private String address; + private Integer age; - @ApiModelProperty(value = "生日") private String birth; - @ApiModelProperty(value = "地址") - private String address; - - @ApiModelProperty(value = "头像") + @Column(name = "head_photo") private String headPhoto; - @ApiModelProperty(value = "个人简介") + @Column(name = "person_brief") private String personBrief; - @ApiModelProperty(value = "性别") private Boolean sex; - @ApiModelProperty(value = "邀请码") + @Column(name = "visit_card") private String visitCard; + + /** + * @return id + */ + public Long getId() { + return id; + } + + /** + * @param id + */ + public void setId(Long id) { + this.id = id; + } + + /** + * @return username + */ + public String getUsername() { + return username; + } + + /** + * @param username + */ + public void setUsername(String username) { + this.username = username; + } + + /** + * @return password + */ + public String getPassword() { + return password; + } + + /** + * @param password + */ + public void setPassword(String password) { + this.password = password; + } + + /** + * @return enabled + */ + public Boolean getEnabled() { + return enabled; + } + + /** + * @param enabled + */ + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + + /** + * @return email + */ + public String getEmail() { + return email; + } + + /** + * @param email + */ + public void setEmail(String email) { + this.email = email; + } + + /** + * @return phone + */ + public String getPhone() { + return phone; + } + + /** + * @param phone + */ + public void setPhone(String phone) { + this.phone = phone; + } + + /** + * @return address + */ + public String getAddress() { + return address; + } + + /** + * @param address + */ + public void setAddress(String address) { + this.address = address; + } + + /** + * @return age + */ + public Integer getAge() { + return age; + } + + /** + * @param age + */ + public void setAge(Integer age) { + this.age = age; + } + + /** + * @return birth + */ + public String getBirth() { + return birth; + } + + /** + * @param birth + */ + public void setBirth(String birth) { + this.birth = birth; + } + + /** + * @return head_photo + */ + public String getHeadPhoto() { + return headPhoto; + } + + /** + * @param headPhoto + */ + public void setHeadPhoto(String headPhoto) { + this.headPhoto = headPhoto; + } + + /** + * @return person_brief + */ + public String getPersonBrief() { + return personBrief; + } + + /** + * @param personBrief + */ + public void setPersonBrief(String personBrief) { + this.personBrief = personBrief; + } + + /** + * @return sex + */ + public Boolean getSex() { + return sex; + } + + /** + * @param sex + */ + public void setSex(Boolean sex) { + this.sex = sex; + } + + /** + * @return visit_card + */ + public String getVisitCard() { + return visitCard; + } + + /** + * @param visitCard + */ + public void setVisitCard(String visitCard) { + this.visitCard = visitCard; + } } \ No newline at end of file diff --git a/src/main/java/com/simon/model/QrCode.java b/src/main/java/com/simon/model/QrCode.java index eb0b152..e702d51 100644 --- a/src/main/java/com/simon/model/QrCode.java +++ b/src/main/java/com/simon/model/QrCode.java @@ -1,75 +1,95 @@ package com.simon.model; -import lombok.EqualsAndHashCode; -import lombok.ToString; +import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.io.Serializable; -/** - * @author simon - * @create 2018-07-25 22:17 - **/ - -@EqualsAndHashCode -@ToString @Entity @Table(name = "qr_code") public class QrCode implements Serializable { - private static final long serialVersionUID = -3433674612562240900L; - private long id; + private static final long serialVersionUID = 893695741308186957L; + @Id + @GeneratedValue(generator = "sequenceId") + @GenericGenerator(name = "sequenceId", strategy = "com.simon.common.utils.snowflake.SequenceId") + private Long id; + + @Column(name = "is_ok") private Boolean isOk; + private String sid; + private String token; + private String username; - @Id - @Column(name = "id") - public long getId() { + /** + * @return id + */ + public Long getId() { return id; } - public void setId(long id) { + /** + * @param id + */ + public void setId(Long id) { this.id = id; } - @Basic - @Column(name = "is_ok") - public Boolean getOk() { + /** + * @return is_ok + */ + public Boolean getIsOk() { return isOk; } - public void setOk(Boolean ok) { - isOk = ok; + /** + * @param isOk + */ + public void setIsOk(Boolean isOk) { + this.isOk = isOk; } - @Basic - @Column(name = "sid") + /** + * @return sid + */ public String getSid() { return sid; } + /** + * @param sid + */ public void setSid(String sid) { this.sid = sid; } - @Basic - @Column(name = "token") + /** + * @return token + */ public String getToken() { return token; } + /** + * @param token + */ public void setToken(String token) { this.token = token; } - @Basic - @Column(name = "username") + /** + * @return username + */ public String getUsername() { return username; } + /** + * @param username + */ public void setUsername(String username) { this.username = username; } -} +} \ No newline at end of file diff --git a/src/main/java/com/simon/model/ResetPwdInfo.java b/src/main/java/com/simon/model/ResetPwdInfo.java index 22295a9..1c05d25 100644 --- a/src/main/java/com/simon/model/ResetPwdInfo.java +++ b/src/main/java/com/simon/model/ResetPwdInfo.java @@ -1,76 +1,98 @@ package com.simon.model; -import lombok.EqualsAndHashCode; -import lombok.ToString; +import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.io.Serializable; -import java.sql.Timestamp; +import java.util.Date; -/** - * @author simon - * @create 2018-07-25 22:17 - **/ - -@EqualsAndHashCode -@ToString @Entity -@Table(name = "reset_password_info") +@Table(name = "reset_pwd_info") public class ResetPwdInfo implements Serializable { - private static final long serialVersionUID = -4603483163651853056L; - private long id; - private Timestamp expiresIn; + private static final long serialVersionUID = 980999113275832311L; + @Id + @GeneratedValue(generator = "sequenceId") + @GenericGenerator(name = "sequenceId", strategy = "com.simon.common.utils.snowflake.SequenceId") + private Long id; + + @Column(name = "expires_in") + private Date expiresIn; + + @Column(name = "secret_key") private String secretKey; + + @Column(name = "user_id") private Long userId; - private boolean valid; - @Id - @Column(name = "id") - public long getId() { + private Boolean valid; + + /** + * @return id + */ + public Long getId() { return id; } - public void setId(long id) { + /** + * @param id + */ + public void setId(Long id) { this.id = id; } - @Basic - @Column(name = "expires_in") - public Timestamp getExpiresIn() { + /** + * @return expires_in + */ + public Date getExpiresIn() { return expiresIn; } - public void setExpiresIn(Timestamp expiresIn) { + /** + * @param expiresIn + */ + public void setExpiresIn(Date expiresIn) { this.expiresIn = expiresIn; } - @Basic - @Column(name = "secret_key") + /** + * @return secret_key + */ public String getSecretKey() { return secretKey; } + /** + * @param secretKey + */ public void setSecretKey(String secretKey) { this.secretKey = secretKey; } - @Basic - @Column(name = "user_id") + /** + * @return user_id + */ public Long getUserId() { return userId; } + /** + * @param userId + */ public void setUserId(Long userId) { this.userId = userId; } - @Basic - @Column(name = "valid") - public boolean isValid() { + /** + * @return valid + */ + public Boolean getValid() { return valid; } - public void setValid(boolean valid) { + /** + * @param valid + */ + public void setValid(Boolean valid) { this.valid = valid; } -} +} \ No newline at end of file diff --git a/src/main/java/com/simon/model/VeriCode.java b/src/main/java/com/simon/model/VeriCode.java index 32f29af..a01e603 100644 --- a/src/main/java/com/simon/model/VeriCode.java +++ b/src/main/java/com/simon/model/VeriCode.java @@ -1,75 +1,95 @@ package com.simon.model; -import lombok.EqualsAndHashCode; -import lombok.ToString; +import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.io.Serializable; -/** - * @author simon - * @create 2018-07-25 22:17 - **/ - -@EqualsAndHashCode -@ToString @Entity @Table(name = "veri_code") public class VeriCode implements Serializable { - private static final long serialVersionUID = -7844171612339151339L; - private long id; + private static final long serialVersionUID = -4954084806431911715L; + @Id + @GeneratedValue(generator = "sequenceId") + @GenericGenerator(name = "sequenceId", strategy = "com.simon.common.utils.snowflake.SequenceId") + private Long id; + private Integer code; + + @Column(name = "create_time") private Long createTime; + private Integer expires; + private String phone; - @Id - @Column(name = "id") - public long getId() { + /** + * @return id + */ + public Long getId() { return id; } - public void setId(long id) { + /** + * @param id + */ + public void setId(Long id) { this.id = id; } - @Basic - @Column(name = "code") + /** + * @return code + */ public Integer getCode() { return code; } + /** + * @param code + */ public void setCode(Integer code) { this.code = code; } - @Basic - @Column(name = "create_time") + /** + * @return create_time + */ public Long getCreateTime() { return createTime; } + /** + * @param createTime + */ public void setCreateTime(Long createTime) { this.createTime = createTime; } - @Basic - @Column(name = "expires") + /** + * @return expires + */ public Integer getExpires() { return expires; } + /** + * @param expires + */ public void setExpires(Integer expires) { this.expires = expires; } - @Basic - @Column(name = "phone") + /** + * @return phone + */ public String getPhone() { return phone; } + /** + * @param phone + */ public void setPhone(String phone) { this.phone = phone; } -} +} \ No newline at end of file diff --git a/src/main/java/com/simon/repository/NewsTagRepository.java b/src/main/java/com/simon/repository/NewsTagRepository.java new file mode 100644 index 0000000..f9d7661 --- /dev/null +++ b/src/main/java/com/simon/repository/NewsTagRepository.java @@ -0,0 +1,9 @@ +package com.simon.repository; + +import com.simon.model.NewsTag; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface NewsTagRepository extends JpaRepository { +} diff --git a/src/main/java/com/simon/repository/ResetPwdInfoRepository.java b/src/main/java/com/simon/repository/ResetPwdInfoRepository.java new file mode 100644 index 0000000..a8a3188 --- /dev/null +++ b/src/main/java/com/simon/repository/ResetPwdInfoRepository.java @@ -0,0 +1,9 @@ +package com.simon.repository; + +import com.simon.model.ResetPwdInfo; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ResetPwdInfoRepository extends JpaRepository { +} diff --git a/src/main/java/com/simon/service/NewsInfoService.java b/src/main/java/com/simon/service/NewsInfoService.java index 1fbc3c3..9b4d0c9 100644 --- a/src/main/java/com/simon/service/NewsInfoService.java +++ b/src/main/java/com/simon/service/NewsInfoService.java @@ -1,18 +1,12 @@ package com.simon.service; -import com.github.pagehelper.PageInfo; +import com.simon.common.service.BasicService; import com.simon.model.NewsInfo; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; /** - * 新闻 - * - * @author simon - * @create 2018-07-24 0:23 - **/ +* @author SimonSun +* @create 2018-08-05 18:00:13 +**/ +public interface NewsInfoService extends BasicService { -public interface NewsInfoService { - PageInfo getAll(int pageNo); - Page getAll(Pageable pageable); -} +} \ No newline at end of file diff --git a/src/main/java/com/simon/service/NewsTagService.java b/src/main/java/com/simon/service/NewsTagService.java new file mode 100644 index 0000000..0b01eeb --- /dev/null +++ b/src/main/java/com/simon/service/NewsTagService.java @@ -0,0 +1,12 @@ +package com.simon.service; + +import com.simon.common.service.BasicService; +import com.simon.model.NewsTag; + +/** +* @author SimonSun +* @create 2018-08-06 20:56:26 +**/ +public interface NewsTagService extends BasicService { + +} \ No newline at end of file diff --git a/src/main/java/com/simon/service/ResetPwdInfoService.java b/src/main/java/com/simon/service/ResetPwdInfoService.java new file mode 100644 index 0000000..26239cf --- /dev/null +++ b/src/main/java/com/simon/service/ResetPwdInfoService.java @@ -0,0 +1,12 @@ +package com.simon.service; + +import com.simon.common.service.BasicService; +import com.simon.model.ResetPwdInfo; + +/** +* @author SimonSun +* @create 2018-08-06 20:56:26 +**/ +public interface ResetPwdInfoService extends BasicService { + +} \ No newline at end of file diff --git a/src/main/java/com/simon/service/VeriCodeService.java b/src/main/java/com/simon/service/VeriCodeService.java index 8d02f16..c255fc9 100644 --- a/src/main/java/com/simon/service/VeriCodeService.java +++ b/src/main/java/com/simon/service/VeriCodeService.java @@ -1,5 +1,6 @@ package com.simon.service; +import com.simon.common.service.BasicService; import com.simon.model.VeriCode; /** @@ -9,7 +10,7 @@ import com.simon.model.VeriCode; * @create 2018-07-31 15:24 **/ -public interface VeriCodeService { +public interface VeriCodeService extends BasicService { VeriCode findByPhone(String phone); VeriCode findByPhoneAndCode(String phone, Integer code); } diff --git a/src/main/java/com/simon/serviceImpl/NewsInfoServiceImpl.java b/src/main/java/com/simon/serviceImpl/NewsInfoServiceImpl.java index 120559f..f5c7c56 100644 --- a/src/main/java/com/simon/serviceImpl/NewsInfoServiceImpl.java +++ b/src/main/java/com/simon/serviceImpl/NewsInfoServiceImpl.java @@ -1,27 +1,27 @@ + package com.simon.serviceImpl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.simon.common.config.AppConfig; import com.simon.mapper.NewsInfoMapper; import com.simon.model.NewsInfo; import com.simon.repository.NewsInfoRepository; import com.simon.service.NewsInfoService; -import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; /** - * 新闻 - * - * @author simon - * @create 2018-07-24 0:24 - **/ -@Slf4j +* @author SimonSun +* @create 2018-08-06 20:56:26 +**/ @Service +@Transactional public class NewsInfoServiceImpl implements NewsInfoService { @Autowired private NewsInfoMapper newsInfoMapper; @@ -30,14 +30,59 @@ public class NewsInfoServiceImpl implements NewsInfoService { private NewsInfoRepository newsInfoRepository; @Override - public PageInfo getAll(int pageNo) { - PageHelper.startPage(pageNo, 2); + public NewsInfo save(NewsInfo newsInfo){ + return newsInfoRepository.save(newsInfo); + } + + @Override + public List save(List newsInfoList) { + return newsInfoRepository.save(newsInfoList); + } + + @Override + public PageInfo findAll(int pageNo){ + PageHelper.startPage(pageNo, AppConfig.DEFAULT_PAGE_SIZE); List list = newsInfoMapper.selectAll(); return new PageInfo<>(list); } @Override - public Page getAll(Pageable pageable) { + public Page findAll(Pageable pageable){ return newsInfoRepository.findAll(pageable); } -} + + @Override + public List findAll(){ + return newsInfoRepository.findAll(); + } + + @Override + public void delete(Long id){ + newsInfoRepository.delete(id); + } + + @Override + public int deleteByIds(String ids){ + return newsInfoMapper.deleteByIds(ids); + } + + @Override + public NewsInfo findById(Long id){ + return newsInfoRepository.findOne(id); + } + + @Override + public int insertList(List list){ + return newsInfoMapper.insertList(list); + } + + @Override + public int insert(NewsInfo newsInfo){ + return newsInfoMapper.insert(newsInfo); + } + + @Override + public int insertSelective(NewsInfo newsInfo){ + return newsInfoMapper.insertSelective(newsInfo); + } +} \ No newline at end of file diff --git a/src/main/java/com/simon/serviceImpl/NewsTagServiceImpl.java b/src/main/java/com/simon/serviceImpl/NewsTagServiceImpl.java new file mode 100644 index 0000000..39e020a --- /dev/null +++ b/src/main/java/com/simon/serviceImpl/NewsTagServiceImpl.java @@ -0,0 +1,88 @@ + +package com.simon.serviceImpl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.simon.common.config.AppConfig; +import com.simon.mapper.NewsTagMapper; +import com.simon.model.NewsTag; +import com.simon.repository.NewsTagRepository; +import com.simon.service.NewsTagService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** +* @author SimonSun +* @create 2018-08-06 20:56:26 +**/ +@Service +@Transactional +public class NewsTagServiceImpl implements NewsTagService { + @Autowired + private NewsTagMapper newsTagMapper; + + @Autowired + private NewsTagRepository newsTagRepository; + + @Override + public NewsTag save(NewsTag newsTag){ + return newsTagRepository.save(newsTag); + } + + @Override + public List save(List newsTagList) { + return newsTagRepository.save(newsTagList); + } + + @Override + public PageInfo findAll(int pageNo){ + PageHelper.startPage(pageNo, AppConfig.DEFAULT_PAGE_SIZE); + List list = newsTagMapper.selectAll(); + return new PageInfo<>(list); + } + + @Override + public Page findAll(Pageable pageable){ + return newsTagRepository.findAll(pageable); + } + + @Override + public List findAll(){ + return newsTagRepository.findAll(); + } + + @Override + public void delete(Long id){ + newsTagRepository.delete(id); + } + + @Override + public int deleteByIds(String ids){ + return newsTagMapper.deleteByIds(ids); + } + + @Override + public NewsTag findById(Long id){ + return newsTagRepository.findOne(id); + } + + @Override + public int insertList(List list){ + return newsTagMapper.insertList(list); + } + + @Override + public int insert(NewsTag newsTag){ + return newsTagMapper.insert(newsTag); + } + + @Override + public int insertSelective(NewsTag newsTag){ + return newsTagMapper.insertSelective(newsTag); + } +} \ No newline at end of file diff --git a/src/main/java/com/simon/serviceImpl/ResetPwdInfoServiceImpl.java b/src/main/java/com/simon/serviceImpl/ResetPwdInfoServiceImpl.java new file mode 100644 index 0000000..7d8effa --- /dev/null +++ b/src/main/java/com/simon/serviceImpl/ResetPwdInfoServiceImpl.java @@ -0,0 +1,88 @@ + +package com.simon.serviceImpl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.simon.common.config.AppConfig; +import com.simon.mapper.ResetPwdInfoMapper; +import com.simon.model.ResetPwdInfo; +import com.simon.repository.ResetPwdInfoRepository; +import com.simon.service.ResetPwdInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** +* @author SimonSun +* @create 2018-08-06 20:56:26 +**/ +@Service +@Transactional +public class ResetPwdInfoServiceImpl implements ResetPwdInfoService { + @Autowired + private ResetPwdInfoMapper resetPwdInfoMapper; + + @Autowired + private ResetPwdInfoRepository resetPwdInfoRepository; + + @Override + public ResetPwdInfo save(ResetPwdInfo resetPwdInfo){ + return resetPwdInfoRepository.save(resetPwdInfo); + } + + @Override + public List save(List resetPwdInfoList) { + return resetPwdInfoRepository.save(resetPwdInfoList); + } + + @Override + public PageInfo findAll(int pageNo){ + PageHelper.startPage(pageNo, AppConfig.DEFAULT_PAGE_SIZE); + List list = resetPwdInfoMapper.selectAll(); + return new PageInfo<>(list); + } + + @Override + public Page findAll(Pageable pageable){ + return resetPwdInfoRepository.findAll(pageable); + } + + @Override + public List findAll(){ + return resetPwdInfoRepository.findAll(); + } + + @Override + public void delete(Long id){ + resetPwdInfoRepository.delete(id); + } + + @Override + public int deleteByIds(String ids){ + return resetPwdInfoMapper.deleteByIds(ids); + } + + @Override + public ResetPwdInfo findById(Long id){ + return resetPwdInfoRepository.findOne(id); + } + + @Override + public int insertList(List list){ + return resetPwdInfoMapper.insertList(list); + } + + @Override + public int insert(ResetPwdInfo resetPwdInfo){ + return resetPwdInfoMapper.insert(resetPwdInfo); + } + + @Override + public int insertSelective(ResetPwdInfo resetPwdInfo){ + return resetPwdInfoMapper.insertSelective(resetPwdInfo); + } +} \ No newline at end of file diff --git a/src/main/java/com/simon/serviceImpl/VeriCodeServiceImpl.java b/src/main/java/com/simon/serviceImpl/VeriCodeServiceImpl.java index 90cfa44..d790999 100644 --- a/src/main/java/com/simon/serviceImpl/VeriCodeServiceImpl.java +++ b/src/main/java/com/simon/serviceImpl/VeriCodeServiceImpl.java @@ -1,12 +1,20 @@ package com.simon.serviceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.simon.common.config.AppConfig; +import com.simon.mapper.VeriCodeMapper; import com.simon.model.VeriCode; import com.simon.repository.VeriCodeRepository; import com.simon.service.VeriCodeService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import java.util.List; + /** * 验证码 * @@ -17,9 +25,69 @@ import org.springframework.stereotype.Service; @Slf4j @Service public class VeriCodeServiceImpl implements VeriCodeService { + @Autowired + private VeriCodeMapper veriCodeMapper; + @Autowired private VeriCodeRepository veriCodeRepository; + @Override + public VeriCode save(VeriCode veriCode){ + return veriCodeRepository.save(veriCode); + } + + @Override + public List save(List veriCodeList) { + return veriCodeRepository.save(veriCodeList); + } + + @Override + public PageInfo findAll(int pageNo){ + PageHelper.startPage(pageNo, AppConfig.DEFAULT_PAGE_SIZE); + List list = veriCodeMapper.selectAll(); + return new PageInfo<>(list); + } + + @Override + public Page findAll(Pageable pageable){ + return veriCodeRepository.findAll(pageable); + } + + @Override + public List findAll(){ + return veriCodeRepository.findAll(); + } + + @Override + public void delete(Long id){ + veriCodeRepository.delete(id); + } + + @Override + public int deleteByIds(String ids){ + return veriCodeMapper.deleteByIds(ids); + } + + @Override + public VeriCode findById(Long id){ + return veriCodeRepository.findOne(id); + } + + @Override + public int insertList(List list){ + return veriCodeMapper.insertList(list); + } + + @Override + public int insert(VeriCode veriCode){ + return veriCodeMapper.insert(veriCode); + } + + @Override + public int insertSelective(VeriCode veriCode){ + return veriCodeMapper.insertSelective(veriCode); + } + @Override public VeriCode findByPhone(String phone) { return veriCodeRepository.findByPhone(phone); diff --git a/src/main/resources/application-mysql.yml b/src/main/resources/application-mysql.yml index 11d65c0..fd77996 100644 --- a/src/main/resources/application-mysql.yml +++ b/src/main/resources/application-mysql.yml @@ -22,7 +22,7 @@ mybatis-plus: type-aliases-package: com.simon.model global-config: #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; - id-type: 0 + id-type: 2 #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断" field-strategy: 2 #驼峰下划线转换 diff --git a/src/main/resources/application-pg.yml b/src/main/resources/application-pg.yml index d1f55c9..7741c71 100644 --- a/src/main/resources/application-pg.yml +++ b/src/main/resources/application-pg.yml @@ -22,7 +22,7 @@ mybatis-plus: type-aliases-package: com.simon.model global-config: #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; - id-type: 0 + id-type: 2 #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断" field-strategy: 2 #驼峰下划线转换 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 86e0f93..c6bee5d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,4 +1,5 @@ # swagger2 +swagger2.base-package=com.simon.controller swagger2.title=restful api documentation swagger2.description=api service for app swagger2.terms-of-service-url=NO terms of service diff --git a/src/main/resources/mapping/NewsInfoMapper.xml b/src/main/resources/mapping/NewsInfoMapper.xml index 9b3ad9c..cd95ec0 100644 --- a/src/main/resources/mapping/NewsInfoMapper.xml +++ b/src/main/resources/mapping/NewsInfoMapper.xml @@ -2,6 +2,9 @@ + @@ -11,7 +14,4 @@ - - id, title, user_id, status, content, image_url, publish_date, tags - \ No newline at end of file diff --git a/src/main/resources/templates/code/service-impl.ftl b/src/main/resources/templates/code/service-impl.ftl index 887abed..7e3b0b6 100644 --- a/src/main/resources/templates/code/service-impl.ftl +++ b/src/main/resources/templates/code/service-impl.ftl @@ -35,10 +35,15 @@ public class ${modelNameUpperCamel}ServiceImpl implements ${modelNameUpperCamel} return ${modelNameLowerCamel}Repository.save(${modelNameLowerCamel}); } + @Override + public List<${modelNameUpperCamel}> save(List<${modelNameUpperCamel}> ${modelNameLowerCamel}List) { + return ${modelNameLowerCamel}Repository.save(${modelNameLowerCamel}List); + } + @Override public PageInfo<${modelNameUpperCamel}> findAll(int pageNo){ - PageHelper.startPage(pageNo, AppConfig.DEFAULT_PAGE_SIZE); - List<${modelNameUpperCamel}> list = ${modelNameLowerCamel}Mapper.selectAll(); + PageHelper.startPage(pageNo, AppConfig.DEFAULT_PAGE_SIZE); + List<${modelNameUpperCamel}> list = ${modelNameLowerCamel}Mapper.selectAll(); return new PageInfo<>(list); } -- Gitee