Finology 大数据金融

通过大数据以量化金融

安装插件

在 IntelliJ IDEA 中使用 Mybatis 可以安装 Free Mybatis Plugin 插件。

这个时候可以很方便在 Mapper DAO 文件和 xml 文件中切换。

在 DAO 中写 @Param 注解

1
2
3
4
5
6
@Mapper
public interface UserMapper {

User getById(@Param("id") Integer id);

}

这样在 xml 文件中,这个id才会有智能提示。会提示id = #{id} 而非 id = #{param}

插入记录后获取主键id

在使用 mysql 的自增主键时,要插入成功后,才能知道主键的值。如果要在插入后,获取id的值,需要在 insert 标签里面添加两个属性。

1
2
3
<insert id="insertSelective" useGeneratedKeys="true" keyProperty="id">
INSERT INTO table...
</insert>

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of gy.finolo.Outer$Inner (although at least one Creator exists): can only instantiate non-static inner class by using default, no-argument constructor

fasterxml无法实例化非静态内部类。把内部类改为 static 的静态类就可以了。

1
2
3
4
5
6
7
8
9
10
@Data
public class Outer {

private Inner inner;

@Data
public static class Inner {

}
}

现在尽量使用新的API,把Date换成LocalDateTime。

使用LocalDateTime时,我们可以通过如下方法把LocalDateTime转换为Unix Timestamp。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
System.out.println(System.currentTimeMillis());
System.out.println(now.toEpochSecond(ZoneOffset.of("+8")));
System.out.println(now.toInstant(ZoneOffset.of("+8")).toEpochMilli());
System.out.println(now.toInstant(ZoneOffset.UTC).toEpochMilli());
System.out.println(now.plusDays(1).toInstant(ZoneOffset.of("+8")).toEpochMilli());
}

2021-03-10T13:45:39.411
1615355139422
1615355139
1615355139411
1615383939411
1615441539411

LocalDateTime格式化为指定格式:

1
2
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd hh:mm:ss");
String timeStr = LocalDateTime.now().atZone(ZoneOffset.of("+8")).format(formatter);

举个例子,假如我要显示当前时间往后推4小时后,UTC的时间表示。

1
2
3
LocalDateTime now = LocalDateTime.now();
ZonedDateTime zonedDateTime = now.plusHours(4).atZone(ZoneOffset.ofHours(8));
String future = zonedDateTime.withZoneSameInstant(ZoneOffset.UTC).format(DateTimeFormatter.ofPattern("YYYY-MM-dd hh:mm:ss"));
0%