mirage-sql / mirage

Mirage-SQL - the SQL Centric Database Access Library for Java
Apache License 2.0
59 stars 21 forks source link

Add Java 8 JSR 310 compatibility #47

Open aadrian opened 6 years ago

aadrian commented 6 years ago

Add Java 8 JSR 310 compatibility.

MasatoshiTada commented 6 years ago

Hi,

I used Mirage-SQL for the first time recently, but I really like it.

What do you think about Date and Time API (JSR 310)? It's not difficult because it's just adding some ValueTypes of java.time.LocalDate , java.time.LocalDateTime and so on.

Here's my sample codes. https://github.com/MasatoshiTada/mirage-sql-sample/blob/master/src/main/java/com/example/valuetype/LocalDateValueType.java https://github.com/MasatoshiTada/mirage-sql-sample/blob/master/src/main/java/com/example/entity/Employee.java#L9

However, I think there are two ways to achieve this (like below).

  1. Just adding new ValueTypes to mirage module.
  2. Creating new ValueTypes as separated module such as mirage-valuetypes-jsr310.

Which is better do you think?

If I can, I'd like to send PR about this matter.

takezoe commented 6 years ago

Just adding new ValueTypes to mirage module.

Looks good. What do you think? @aadrian

aadrian commented 6 years ago

@MasatoshiTada I think "way 1" is better.

Unfortunately not all JDBC drivers support JSR310 yet: most notably and incredibly: the Oracle DB one :( - so I think that dialect specific handling would also might be needed.

Currently we have no tests (integration) for each dialect :( . Something with https://github.com/flapdoodle-oss/de.flapdoodle.embed.process might be a good start.

MasatoshiTada commented 6 years ago

Thank you for your comments!

Unfortunately not all JDBC drivers support JSR310 yet

Does this mean "resultSet.getObject(columnName, LocalDate.class) throws Exception"? I think it is no problem if we write like below;

Date date = resultSet.getDate(columnName);
LocalDate localDate = date.toLocalDate();

MyBatis's TypeHandlers use this way. https://github.com/mybatis/typehandlers-jsr310/tree/master/src/main/java/org/apache/ibatis/type