首次使用JNPF开发功能

在IDEA上开发本系统需要的插件

mybatis插件,mybatis-plus插件、lombok插件

springboot注解代码解读

Controller层注解

Service层注解

相当于在每个方法上都加了@Transactional

或者在单独方法上添加事务注解,会覆盖类上的事务注解

  • 错误使用
  1. 默认配置下,spring 只有在抛出的异常为运行时 unchecked 异常时才回滚该事务,也就是抛出的异常为RuntimeException 的子类(Errors也会导致事务回滚),而抛出 checked 异常则不会导致事务回滚 。可通过 @Transactional rollbackFor进行配置。
  2. 接口中A、B两个方法,A无@Transactional标签,B有,上层通过A间接调用B,此时事务不生效。
  3. 多线程下事务管理因为线程不属于 spring 托管,故线程不能够默认使用 spring 的事务,也不能获取spring 注入的 bean 。在被 spring 声明式事务管理的方法内开启多线程,多线程内的方法不被事务控制。一个使用了@Transactional 的方法,如果方法内包含多线程的使用,方法内部出现异常,不会回滚线程中调用方法的事务。
  • 更多参考@Transactional 详解

@Transactional 详解_愿我如星君如月 ... 夜夜流光相皎洁 ...-CSDN博客_@transactional

数据源配置

创建一个配置类

配置类中在类上添加注解,在类中一般包含@bean注解的方法,示例如下:

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        StringRedisSerializer serializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer<Object> jackson = new Jackson2JsonRedisSerializer<>(Object.class);
        template.setValueSerializer(jackson);
        template.setHashValueSerializer(jackson);
        template.setKeySerializer(serializer);
        template.setHashKeySerializer(serializer);
        return template;
    }
}

创建一个环境变量配置文件

spring:
  datasource: mysql
  mysql:
    type: com.alibaba.druid.pool.xa.DruidXADataSource
    druid:
      system:
        dbname: jnpf_test
        url: jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=UTC
        username: mysql
        password: xxx
        driver-class-name: com.mysql.cj.jdbc.Driver

@Data
@Component
public class DataSourceUtil {

    //数据库类型
    @Value("${spring.datasource}")
    private String dataSource;

    //=====================================mysql
    //驱动包
    @Value("${spring.mysql.druid.system.driver-class-name}")
    private String mysqlDriverClassName;
    //库名
    @Value("${spring.mysql.druid.system.dbname}")
    private String mysqlDbName;
    //数据连接字符串
    @Value("${spring.mysql.druid.system.url}")
    private String mysqlUrl;
    //账号
    @Value("${spring.mysql.druid.system.username}")
    private String mysqlUserName;
    //密码
    @Value("${spring.mysql.druid.system.password}")
    private String mysqlPassword;
}

实体类规范

创建一个枚举类

枚举类

/**
 * 日志等级
 *
 * @author JNPF开发平台组
 * @version V3.0.0
 * @copyright 引迈信息技术有限公司
 * @date 2019年9月26日 上午9:18
 */
public enum LogLevelEnum implements AbstractBaseExceptionEnum {

    Error(0,"错误"),
    Success(1,"成功"),
    Warning(2,"警告");

    private int code;
    private String message;

    LogLevelEnum(int code, String message){
        this.code = code;
        this.message = message;
    }

    @Override
    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    @Override
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * 根据状态code获取枚举名称
     * @return
     */
    public static String getMessageByCode(Integer code) {
        for (LogLevelEnum status : LogLevelEnum.values()) {
            if (status.getCode().equals(code)) {
                return status.message;
            }
        }
        return null;
    }

    /**
     * 根据状态code获取枚举值
     * @return
     */
    public static LogLevelEnum getByCode(Integer code) {
        for (LogLevelEnum status : LogLevelEnum.values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        return null;
    }
}

枚举类应用

示例

LogSortEnum.Error.getCode();
LogSortEnum.Error.getMessage();

后端返回数据规范

最后修改:2020 年 11 月 19 日 04 : 06 PM