java API

事务

  • 手动提交事务
@Autowired
    private PlatformTransactionManager transactionManager;// 引入 (平台)事务管理器,Spring 事务策略的核心。

    @Autowired
    private TransactionDefinition transactionDefinition;

    @RequestMapping("/transactionManager")
    public R transactionManager(){
        TransactionStatus transactionStatusSaveData1 = transactionManager.getTransaction(transactionDefinition);
        MemberEntity memberEntity = new MemberEntity();
        memberEntity.setUsername("transactionManager");
        try {
            memberService.save(memberEntity);
            int i = 1/0;
            transactionManager.commit(transactionStatusSaveData1);
        }catch (Exception e){
            e.printStackTrace();
            transactionManager.rollback(transactionStatusSaveData1 );
        }
        return R.ok();
    }

枚举

链接: 传送门

  • 定义一些字符串类型的常量,并且只在这个类中使用
    在这里插入图片描述
  • 现成代码
public enum ComputeModeEnum {

    /**
     * 增值服务费-前置费用计算方式枚举
     */
    COMPUTE_MODE1(1,"按费率"),
    COMPUTE_MODE2(2,"按费率区间"),
    COMPUTE_MODE3(3,"按金额"),
    COMPUTE_MODE4(4,"按金额区间");

    /**
     * 编码
     */
    private final Integer code;
    /**
     * 名称
     */
    private final String name;

    ComputeModeEnum(Integer code, String name) {
        this.code = code;
        this.name = name;
    }

    public Integer getCode() {
        return code;
    }

    public String getName() {
        return name;
    }

    /**
     * 根据编码获名称
     * @param code
     * @return String
     */
    public static String getNameByCode(Integer code){
        for (ComputeModeEnum value : ComputeModeEnum.values()) {
            if(value.getCode().equals(code)){
                return value.getName();
            }
        }
        return null;
    }

}

日期

☆、得到当天最小时间和第二天最大时间
在这里插入图片描述
☆、java8日期转换用DateTimeFormatter

  • 实体类日期注解
// 转换给前端需要的类型
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
// Spring框架本身所有,将前端传来的字符串类型的日期转为后台需要的时间类型结果
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

范型

参考文章

范型类

☆、当创建一个类时,类里面的参数类型不确定时,就可以使用范型类。
☆、泛型类中的参数可以随便写为任意标识,常见的如T、E、K、V等。

范型接口

参考文章
☆、当很多实现类的处理逻辑差不多,只是参数类型不一样,就可以使用范型接口。
☆、范型接口的参数是指在接口和实现类中可以使用的参数类型。

范型方法

☆、当返回值类型不确定时使用。
☆、public 与 返回值中间非常重要,只有声明了的方法才是泛型方法。
☆、泛型类中的使用了泛型的成员方法并不是泛型方法。
☆、示例:

    public <T> T t2(){
        T couponResult = (T) new CouponResult("123","123");
        return couponResult;
    }

占位符(通配符)

☆、List<?> list = findAllList(xxx);
1.?作对象的泛型来用。
2.为了保证类型安全,不允许对通配符类型进行类似add的操作。
☆、List<? extends Fruit> fruits
1.上限通配符,用来限制元素的类型的上限。
2.表示集合中的元素类型上限为Fruit类型,即只能是Fruit或者Fruit的子类。
☆、List<? super Apple> apples
1.下限通配符 ,用来限制元素的类型下限。
2.表示集合中的元素类型下限为Apple类型,即只能是Apple或Apple的父类。

spring

SpringUtils.getBean()

☆、springboot默认扫描启动类所在的包及其子包,有的场景扫描不到:模块嵌套,想要嵌套模块里面的service对象。
☆、ruoyi-vue里面有SpringUtils这个工具类。
☆、示例:

SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor);

ApplicationContext.getBeansOfType

设置上下文路径

server:
 servlet:
 context-path:/api/demo

spring.factories文件

在这里插入图片描述
在这里插入图片描述

其它

TypeReference

String jsonString = JSON.toJSONString(r.get("memberEntity"));
MemberResponseVo memberResponseVo = JSON.parseObject(jsonString, new TypeReference<MemberResponseVo>() {});

Map<String, List<Catalog2Vo>> listMap = JSON.parseObject(catalogJson, new TypeReference<Map<String, List<Catalog2Vo>>>() {});
SeckillSkuInfoVo skuInfo = r.getData("skuInfo", new TypeReference<SeckillSkuInfoVo>() {});

optional

一、作用
1.对象为null时做处理,简化if else代码。
2.类似于steam流的过滤处理。
二、参考博客
三、文档缺失方法补充

  • optional.isPresent():判断optional是否为空,如果空则返回false,否则返回true。
  • optional.orElseGet(Supplier other):如果optional不为空,则返回optional中的对象;如果为null,则使用Supplier函数生成默认值other。(拓展:optional.orElse(Supplier other) optional为空不为空都会执行)
  • optional.ifPresentOrElse(System.out::println, () -> System.out.println(“Null”));

对象嵌套

1.设计模式-责任链模式里面有对象嵌套新写法,当嵌套的对象是自己或者自己的子类时适合使用。在itstack-demo-design-13-02 ApiTest里面。
2.备忘录模式里面有一种思想,想在一个对象里面做拓展但是不想改变原有对象,可以新建一个类,把那个对象作为这个类的属性,用这个类里面做拓展。
在这里插入图片描述

JSR303校验集合

  • 在Controller上添加@Validated注解,方法上添加@Valid注解
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;

在这里插入图片描述

MapStruct

  • 使用的版本:1.5.1.Final
  • 类命名:FinanceCustAfterValueaddFeeConvertMapper
    使用指南
  • pom.xml文件配置注意点
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.3.RELEASE</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <annotationProcessorPaths>
                        <!--   使用lombok注意冲突,maven-compiler-plugin要3.6以上,lombok使用1.16.16版本以上,需要配置lombok的path   -->
                        <!--不加这个最后的拷贝对象没有值-->
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok-mapstruct-binding</artifactId>
                            <version>0.2.0</version>
                        </path>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>1.5.1.Final</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>1.18.18</version>
                        </path>
                    </annotationProcessorPaths>
                        <!--作用未知-->
<!--                    <showWarnings>true</showWarnings>-->
<!--                    <compilerArgs>-->
<!--                        <arg>-->
<!--                            -Amapstruct.suppressGeneratorTimestamp=true-->
<!--                        </arg>-->
<!--                        <arg>-->
<!--                            -Amapstruct.suppressGeneratorVersionInfoComment=true-->
<!--                        </arg>-->
<!--                    </compilerArgs>-->

                </configuration>
            </plugin>
        </plugins>
    </build>

Guava Cache本地缓存

    private static final Cache<String,SendTemplate> SEND_TEMPLATE_CACHE = CacheBuilder.newBuilder()
            .maximumSize(20).expireAfterAccess(30,TimeUnit.DAYS).build();

代码计时

  • StopWatch

Http请求

RestTemplate

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate getRestTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
        requestFactory.setConnectTimeout(5000);
        requestFactory.setReadTimeout(10000);
        restTemplate.setRequestFactory(requestFactory);

        List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
        if (messageConverters != null) {
            Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator();
            while (iterator.hasNext()) {
                HttpMessageConverter<?> httpMessageConverter = iterator.next();
                if (httpMessageConverter instanceof StringHttpMessageConverter) {
                    ((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName("UTF-8"));
                }
            }
        }
        return restTemplate;
    }
}

容易遗忘的知识点

线程

☆、线程睡眠

TimeUnit.SECONDS.sleep(1);

集合

☆、遍历
Iterator iterator = productList.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next().getName());
}
☆、获取map里面的key并弄成一个集合
Iterator iterator = configAttributeMap.keySet().iterator();
☆、声明一个map并且直接赋值

Map<String,String> m = new HashMap<String,String>(){{
            put("consigneeUserName", "谢飞机");
            put("consigneeUserPhone", "15200292123");
            put("consigneeUserAddress", "吉林省.长春市.双阳区.XX街道.檀溪苑小区.#18-2109");
        }};

mybatis plus相关

☆、可以在service实现类中使用baseMapper,因为所有的dao都继承了它。
☆、mybatis配置类上要加上@EnableTransactionManagement ,开启事务。
☆、dao类中的参数上要加上@Param注解,才能在xml文件中通过#{name}拿到。

void updateCategory(@Param("catId") Long catId, @Param("name") String name);
UPDATE `pms_category_brand_relation` SET catelog_name=#{name} WHERE catelog_id=#{catId}	

接收对象时可以不加,对应xml文件中的写法#{carrierUrl};接收对象时加,对应xml文件中的写法#{对象.carrierUrl}。
☆、IdWorker,根据时间生成一个全局唯一的长整形ID,支持分布式环境下的使用。idworker采用了Snowflake算法,并在此基础上增加了奇偶抖动功能,避免在低并发的环境下生成全是偶数的情况。

String orderSn = IdWorker.getTimeId(); //202112311138373651476759672152133634 

注解

☆、JsonInclude(JsonInclude.Include.NON_EMPTY) 标记在实体的字段上,如果这个字段是空的,就不会返回到前端了
☆、spring.factories文件
1.@EnableAutoConfiguration注解来注册项目包外的bean,spring.factories文件加载注册项目包外的bean。

mysql

1.一个service中有多条操作数据库的代码,要等程序全部执行完之后才能在数据库中看到,可以通过执行下面的sql,程序不执行玩就能看到:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
但是它对于当前的事务窗口生效,如果想要设置全局的,需要加上global字段(没试过)

BigDecimal

☆、保留两位小数,多出的向上进入

BigDecimal payAmount = orderEntity.getPayAmount().setScale(2, BigDecimal.ROUND_UP);

工具代码

  • 去除json里面的 \ 和{}外面的双引号
data = data.replaceAll("\\\\", "").replaceAll("\"\\{", "{").replaceAll("\\}\"", "}");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值