Loading... 首次使用JNPF开发功能 ## 在IDEA上开发本系统需要的插件 mybatis插件,mybatis-plus插件、lombok插件 ## springboot注解代码解读 ## **Controller层注解**  ## **Service层注解**  相当于在每个方法上都加了@Transactional 或者在单独方法上添加事务注解,会覆盖类上的事务注解 - 错误使用 1. 默认配置下,spring 只有在抛出的异常为运行时 unchecked 异常时才回滚该事务,也就是抛出的异常为RuntimeException 的子类(Errors也会导致事务回滚),而抛出 checked 异常则不会导致事务回滚 。可通过 @Transactional rollbackFor进行配置。 1. 接口中A、B两个方法,A无@Transactional标签,B有,上层通过A间接调用B,此时事务不生效。 1. 多线程下事务管理因为线程不属于 spring 托管,故线程不能够默认使用 spring 的事务,也不能获取spring 注入的 bean 。在被 spring 声明式事务管理的方法内开启多线程,多线程内的方法不被事务控制。一个使用了@Transactional 的方法,如果方法内包含多线程的使用,方法内部出现异常,不会回滚线程中调用方法的事务。 - 更多参考@Transactional 详解 [@Transactional 详解_愿我如星君如月 ... 夜夜流光相皎洁 ...-CSDN博客_@transactional](https://blog.csdn.net/jiangyu1013/article/details/84397366) ## 数据源配置  ## 创建一个配置类 配置类中在类上添加注解,在类中一般包含@bean注解的方法,示例如下: ```java @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; } } ``` ## 创建一个环境变量配置文件 ```yaml 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 ``` ```java @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; } ``` ## 实体类规范  ## 创建一个枚举类 ### 枚举类 ```java /** * 日志等级 * * @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; } } ``` ### 枚举类应用 示例 ```text LogSortEnum.Error.getCode(); LogSortEnum.Error.getMessage(); ``` ## 后端返回数据规范 最后修改:2020 年 11 月 19 日 04 : 06 PM © 允许规范转载