Regarding Lightsleep, I posted an introductory article on Qiita, so please see below.
Introducing Lightsleep, an O / R mapping library that works only with Java Runtime and JDBC driversLightsleep has a mechanism for flexible data type conversion, which is used internally. It is not essential to know the details of using Lightsleep, but it is helpful to know what kind of conversion will be done.
It is mainly used in the following two places.
Where to convert property values of entity objects to literal strings to generate SQL For example
"Yukari's apples"
➔ 'Yukari''s apples'
2017/2/12
(java.sql.Date) ➔ DATE'2017-02-17'
Where to set the value obtained from DB to entity object For example --BigDecimal ➔ Integer (column type is NUMBER (9) / Oracle) --Long ➔ java.sql.Date (column type is BIGINT)
The above 2 is the original purpose of data type conversion, so that it can be stored even if the value to be stored and the type of the variable to store it are different.
1 uses this mechanism to generate SQL literal strings. Since the conversion content is different from the normal character string, the conversion destination data type is SqlString class. By having a data type conversion map for each database handler, it is possible to generate DBMS-specific SQL.
org.lightsleep.helper.TypeConverter is a class that performs data type conversion. When using Lightsleep, I don't think it's common to use this class directly, but I'll explain it briefly.
This class has two constructors:
TypeConverter(Class<ST> sourceType, Class<DT> destinType, Function<ST, DT> function)
<MT> TypeConverter(TypeConverter<ST, MT> typeConverter1, TypeConverter<MT, DT> typeConverter2)
The arguments of constructor 1 are the data type (sourceType) of the conversion source, the data type (destinType) of the conversion destination, and the Function object (function) that performs the conversion. function is described by a lambda expression.
java:Long->java.sql.Date
new TypeConverter<>(Long.class, Date.class, object -> new Date(object))
The arguments for constructor 2 are two other TypeConverter objects.
java:java.util.Date->Integer
new TypeConverter<>(
TypeConverter.get(typeConverterMap, java.util.Date.class, Long.class),
TypeConverter.get(typeConverterMap, Long.class, Integer.class)
)
The static TypeConverter.get
method in the above example is a method to get the TypeConverter object registered in the map. The Function object of this TypeConverter object will be typeConverter1.function.andThen (typeConverter2.function) `(composite function).
Since the TypeConverter object has a key generated from the conversion source data type and the conversion destination data type, use the static TypeConverter # put
method instead of Map # put
when registering the map.
java:Long->java.sql.Date
TypeConverter.put(typeConverterMap,
new TypeConverter<>(Long.class, Date.class, object -> new Date(object))
);
java:java.util.Date->Integer
TypeConverter.put(typeConverterMap,
new TypeConverter<>(
TypeConverter.get(typeConverterMap, java.util.Date.class, Long.class),
TypeConverter.get(typeConverterMap, Long.class, Integer.class)
)
);
Data type conversion processing is performed by the static TypeConverter # convert
method. This method performs the conversion process according to the following procedure.
However, if the conversion source object of the argument is null or castable to the conversion destination data type, the conversion source object is returned as it is without conversion processing.
In 2, static TypeConverter # get
is used, but if the specified source data type and destination data type combination cannot be found, then the source data type cannot be found in the interface or superclass of that type. I will try it.
If found, you can use that conversion function, so create a key from the found data type and the destination data type and register it in the map so that you can simply search for the TypeConverter object in the next conversion process.
If no convertible TypeConverter object is finally found, a ConvertException is thrown.
The TypeConverter object is stored in a variable of type Map <String, TypeConverter <?,? >>
In the following classes.
1 has a map of static variables and 2 has a map of instance variables. The Standard class and its subclasses are singleton classes and there is only one object per class, so there is one data type conversion map per class as well as 1.
Two are commonly used in the data type conversion process, and which one is used is determined by specifying the Database property in lightsleep.propeties.
This class of data type conversion maps contains the following TypeConverter objects that perform common data type conversions that are independent of O / R mappings.
Conversion source data type th> | Conversion destination data type th> | Conversion content th> tr> | |||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Byte td> | Boolean td> | 0 ➔ false 1 ➔ true In other cases, throw ConvertException td> tr> | |||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character td> | '0' ➔ false '1' ➔ true Throw ConvertException in other cases td> tr> | ||||||||||||||||||||||||||||||||||||||||
String td> | "0" ➔ false "1" ➔ true Throw ConvertException in other cases td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Byte | false ➔ 0 true ➔ 1 | |||||||||||||||||||||||||||||||||||||||
Short td> | Throw ConvertException if out of range td> tr> | ||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
String td> | Throw ConvertException if non-numeric or out of range td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Short | false ➔ 0 true ➔ 1 | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Integer td> | Throw ConvertException if out of range td> tr> | ||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
String td> | Throw ConvertException if non-numeric or out of range td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Integer | false ➔ 0 true ➔ 1 | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Long td> | Throw ConvertException if out of range td> tr> | ||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
String td> | Throw ConvertException if non-numeric or out of range td> tr> | ||||||||||||||||||||||||||||||||||||||||
java.util.Date td> | Throw ConvertException if out of range td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Long | false ➔ 0 true ➔ 1 | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Float td> | Throw ConvertException if out of range td> tr> | ||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
String td> | Throw ConvertException if non-numeric or out of range td> tr> | ||||||||||||||||||||||||||||||||||||||||
java.util.Date td> | Get long value td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Float | false ➔ 0.0F true ➔ 1.0F | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
String td> | Throw ConvertException for non-numeric values td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Double | false ➔ 0.0D true ➔ 1.0D | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
String td> | Throw ConvertException for non-numeric values td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | BigDecimal | false ➔ BigDecimal.ZERO true ➔ BigDecimal.ONE | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
String td> | Throw ConvertException for non-numeric values td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Character | false ➔ '0' true ➔ '1' | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Integer td> | Throw ConvertException if out of range td> tr> | ||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
String td> | Throw ConvertException if String length is other than 1 td> tr> | ||||||||||||||||||||||||||||||||||||||||
BigDecimal td> | String td> | Convert with toPlainString () td> tr> | |||||||||||||||||||||||||||||||||||||||
java.uitl.Date | "yyyy-MM-dd" | ||||||||||||||||||||||||||||||||||||||||
java.sql.Date | |||||||||||||||||||||||||||||||||||||||||
Time | "HH:mm:ss" | ||||||||||||||||||||||||||||||||||||||||
Timestamp | "yyyy-MM-dd HH:mm:ss.SSS" | ||||||||||||||||||||||||||||||||||||||||
Object td> | Convert with toString () td> tr> | ||||||||||||||||||||||||||||||||||||||||
Integer | java.util.Date | ||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
BigDecimal td> | Throw ConvertException if conversion to Long is out of range td> tr> | ||||||||||||||||||||||||||||||||||||||||
String td> | "yyyy-MM-dd" code> ➔ String |
The data type conversion map of this class adds a TypeConverter object specific to the following O / R mappings to all TypeConverter objects of the TypeConverter class.
Conversion source data type th> | Conversion destination data type th> | Conversion content th> tr> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Clob td> | String td> | Throw ConvertException if length exceeds Integer.MAX_VALUE code> |
The data type conversion map for this class adds a MySQL-specific TypeConverter object to every TypeConverter object that the Standard class has.
Conversion source data type th> | Conversion destination data type th> | Conversion content th> tr> |
---|---|---|
Boolean | SqlString | false ➔ 0 true ➔ 1 |
String td> | '...' code> |
The data type conversion map for this class adds an Oracle Database-specific TypeConverter object to every TypeConverter object that the Standard class has.
Conversion source data type th> | Conversion destination data type th> | Conversion content th> tr> | |||||
---|---|---|---|---|---|---|---|
Boolean | SqlString | false ➔ 0 true ➔ 1 | |||||
String | '...' The control character is '...'||CHR(n)||'...' Conversion toIf long ? (SQL parameters) | ||||||
Time | TO_TIMESTAMP('1970-01-01 HH:mm:ss','YYYY-MM-DD HH24:MI:SS.FF3') | ||||||
byte [] td> | ? code> (SQL parameter) i> td> tr>
|
The data type conversion map for this class adds a PostgreSQL-specific TypeConverter object to every TypeConverter object that the Standard class has.
Conversion source data type th> | Conversion destination data type th> | Conversion content th> tr> | ||
---|---|---|---|---|
String td> | SqlString td> | '...' code> |
The data type conversion map for this class adds a SQLite-specific TypeConverter object to every TypeConverter object that the Standard class has.
Conversion source data type th> | Conversion destination data type th> | Conversion content th> tr> |
---|---|---|
Boolean | SqlString | false ➔ 0 true ➔ 1 |
java.util.Date | 'yyyy-MM-dd' | |
java.sql.Date | ||
Time | 'HH:mm:ss' | |
Timestamp | 'yyyy-MM-dd HH:mm:ss.SSS' | |
byte [] td> | ? code> (SQL parameter) i> td> tr>
|
The data type conversion map for this class adds a Microsoft SQL Server-specific TypeConverter object to every TypeConverter object that the Standard class has.
Conversion source data type th> | Conversion destination data type th> | Conversion content th> tr> | |
---|---|---|---|
Boolean | SqlString | false ➔ 0 true ➔ 1 | |
java.sql.Date | CAST('yyyy:MM:dd' AS DATE) | ||
Time | CAST('HH:mm:ss' AS DATE) | ||
Timestamp | CAST('yyyy-MM-dd HH:mm:ss.SSS' AS DATETIME2) | ||
String td> | '...' code> |
Recommended Posts