En ce qui concerne Lightsleep, j'ai publié un article d'introduction sur Qiita, veuillez donc voir ci-dessous.
Présentation de Lightsleep, une bibliothèque de mappage O / R qui fonctionne uniquement avec les pilotes Java Runtime et JDBCLightsleep dispose d'un mécanisme de conversion flexible du type de données, qui est utilisé en interne. Il n'est pas essentiel de connaître les détails de l'utilisation de Lightsleep, mais il est utile de savoir quel type de conversion sera effectué.
Il est principalement utilisé dans les deux endroits suivants.
Où convertir les valeurs de propriété des objets entité en chaînes littérales pour générer du SQL Par exemple
"Yukari's apples"
➔ 'Yukari''s apples'
2017/2/12
(java.sql.Date) ➔ DATE'2017-02-17'
Où définir la valeur obtenue à partir de DB dans l'objet entité Par exemple --BigDecimal ➔ Integer (le type de colonne est NUMBER (9) / Oracle) --Long ➔ java.sql.Date (le type de colonne est BIGINT)
Le 2 ci-dessus est le but initial de la conversion de type de données, de sorte qu'il puisse être stocké même si la valeur à stocker et le type de la variable pour le stocker sont différents.
1 utilise ce mécanisme pour générer des chaînes littérales SQL. Étant donné que le contenu de la conversion est différent d'une chaîne de caractères normale, le type de données de destination de la conversion est la classe SqlString. En ayant une mappe de conversion de type de données pour chaque gestionnaire de base de données, il est possible de générer du SQL spécifique au SGBD.
org.lightsleep.helper.TypeConverter est une classe qui effectue une conversion de type de données. Lorsque vous utilisez Lightsleep, je ne pense pas qu'il soit courant d'utiliser directement cette classe, mais je vais l'expliquer brièvement.
Cette classe a deux constructeurs:
TypeConverter(Class<ST> sourceType, Class<DT> destinType, Function<ST, DT> function)
<MT> TypeConverter(TypeConverter<ST, MT> typeConverter1, TypeConverter<MT, DT> typeConverter2)
Les arguments du constructeur 1 sont le type de données source (sourceType), le type de données de destination (destinType) et l'objet fonction (fonction) pour effectuer la conversion. La fonction est décrite par une expression lambda.
java:Long->java.sql.Date
new TypeConverter<>(Long.class, Date.class, object -> new Date(object))
Les arguments du constructeur 2 sont deux autres objets TypeConverter.
java:java.util.Date->Integer
new TypeConverter<>(
TypeConverter.get(typeConverterMap, java.util.Date.class, Long.class),
TypeConverter.get(typeConverterMap, Long.class, Integer.class)
)
La méthode static TypeConverter.get
dans l'exemple ci-dessus est une méthode pour obtenir l'objet TypeConverter enregistré dans la carte. L'objet Function de cet objet TypeConverter sera typeConverter1.function.andThen (typeConverter2.function) `(fonction composite).
Étant donné que l'objet TypeConverter a une clé générée à partir du type de données source de conversion et du type de données de destination de conversion, utilisez la méthode static TypeConverter # put
au lieu de Map # put
lors de l'enregistrement de la carte.
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)
)
);
Le processus de conversion du type de données est effectué par la méthode static TypeConverter # convert
. Cette méthode exécute le processus de conversion selon la procédure suivante.
Toutefois, si l'objet source de l'argument est nul ou peut être converti en type de données de destination, l'objet source est renvoyé tel quel sans traitement de conversion.
Dans 2, static TypeConverter # get
est utilisé, mais si le type de données source spécifié et la combinaison de type de données de destination ne peuvent pas être trouvés, le type de données source est introuvable dans l'interface ou la superclasse de ce type. Je vais essayer.
S'il est trouvé, vous pouvez utiliser sa fonction de conversion, créez donc une clé à partir du type de données trouvé et du type de données de destination et enregistrez-la dans la carte afin de pouvoir simplement rechercher l'objet TypeConverter lors du processus de conversion suivant.
Si aucun objet TypeConverter convertible n'est finalement trouvé, une exception ConvertException est levée.
L'objet TypeConverter est stocké dans une variable de type Map <String, TypeConverter <?,? >>
Dans les classes suivantes.
1 a une carte de variables statiques et 2 une carte de variables d'instance. La classe Standard et ses sous-classes sont des classes singleton et il n'y a qu'un seul objet par classe, il y a donc une mappe de conversion de type de données par classe ainsi que 1.
Deux sont couramment utilisés dans le processus de conversion de type de données, et celui d'entre eux est déterminé en spécifiant la propriété Database de lightsleep.propeties.
La mappe de conversion de type de données de cette classe contient les objets TypeConverter suivants qui effectuent des conversions de type de données courantes indépendantes du mappage O / R.
Type de données source de conversion th> | Type de données de destination de conversion th> | Contenu de la conversion th> tr> | |||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Byte td> | Boolean td> | 0 ➔ false 1 ➔ true Dans les autres cas, lancez ConvertException td> tr> | |||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Caractère td> | '0' ➔ faux '1' ➔ vrai Lancer une exception ConvertException dans les autres cas td> tr> | ||||||||||||||||||||||||||||||||||||||||
Chaîne td> | "0" ➔ false "1" ➔ true Lancer une exception ConvertException dans les autres cas td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Byte | false ➔ 0 true ➔ 1 | |||||||||||||||||||||||||||||||||||||||
Court td> | Lancer une exception ConvertException si hors de portée td> tr> | ||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
Chaîne td> | Lance une exception ConvertException si non numérique ou hors plage td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Short | false ➔ 0 true ➔ 1 | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Entier td> | Lance une exception ConvertException si hors de portée td> tr> | ||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
Chaîne td> | Lance une exception ConvertException si non numérique ou hors plage td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Integer | false ➔ 0 true ➔ 1 | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Long td> | Lancer une exception ConvertException si hors de portée td> tr> | ||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
Chaîne td> | Lance une exception ConvertException si non numérique ou hors plage td> tr> | ||||||||||||||||||||||||||||||||||||||||
java.util.Date td> | Lance une exception ConvertException si hors de portée td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Long | false ➔ 0 true ➔ 1 | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Float td> | Lancer une exception ConvertException si hors de portée td> tr> | ||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
Chaîne td> | Lance une exception ConvertException si non numérique ou hors plage td> tr> | ||||||||||||||||||||||||||||||||||||||||
java.util.Date td> | Obtenir une valeur longue td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Float | false ➔ 0.0F true ➔ 1.0F | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
Chaîne td> | Lance une exception ConvertException pour les valeurs non numériques td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Double | false ➔ 0.0D true ➔ 1.0D | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
Chaîne td> | Lance une exception ConvertException pour les valeurs non numériques td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | BigDecimal | false ➔ BigDecimal.ZERO true ➔ BigDecimal.ONE | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Integer | |||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
Character | |||||||||||||||||||||||||||||||||||||||||
Chaîne td> | Lance une exception ConvertException pour les valeurs non numériques td> tr> | ||||||||||||||||||||||||||||||||||||||||
Boolean | Character | false ➔ '0' true ➔ '1' | |||||||||||||||||||||||||||||||||||||||
Byte | |||||||||||||||||||||||||||||||||||||||||
Short | |||||||||||||||||||||||||||||||||||||||||
Entier td> | Lance une exception ConvertException si hors de portée td> tr> | ||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
Float | |||||||||||||||||||||||||||||||||||||||||
Double | |||||||||||||||||||||||||||||||||||||||||
BigDecimal | |||||||||||||||||||||||||||||||||||||||||
String td> | Lance une exception ConvertException si la longueur de la chaîne est différente de 1 td> tr> | ||||||||||||||||||||||||||||||||||||||||
BigDecimal td> | String td> | Convertir avec toPlainString () td> tr> | |||||||||||||||||||||||||||||||||||||||
java.uitl.Date | "yyyy-MM-dd" | ||||||||||||||||||||||||||||||||||||||||
java.sql.Date | |||||||||||||||||||||||||||||||||||||||||
Time | "HH:mm:ss" | ||||||||||||||||||||||||||||||||||||||||
Timestamp | "yyyy-MM-dd HH:mm:ss.SSS" | ||||||||||||||||||||||||||||||||||||||||
Objet td> | Convertir avec toString () td> tr> | ||||||||||||||||||||||||||||||||||||||||
Integer | java.util.Date | ||||||||||||||||||||||||||||||||||||||||
Long | |||||||||||||||||||||||||||||||||||||||||
BigDecimal td> | Lance une exception ConvertException si la conversion en Long est hors de portée td> tr> | ||||||||||||||||||||||||||||||||||||||||
Chaîne td> | "aaaa-MM-jj" code> ➔ Chaîne |
La mappe de conversion de type de données de cette classe ajoute un objet TypeConverter spécifique aux mappages O / R suivants à tous les objets TypeConverter de la classe TypeConverter.
Type de données source de conversion th> | Type de données de destination de conversion th> | Contenu de la conversion th> tr> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Clob td> | Chaîne td> | Lance une exception ConvertException si la longueur dépasse Integer.MAX_VALUE code> |
La mappe de conversion de type de données pour cette classe ajoute un objet TypeConverter spécifique à MySQL à chaque objet TypeConverter de la classe Standard.
Type de données source de conversion th> | Type de données de destination de conversion th> | Contenu de la conversion th> tr> |
---|---|---|
Boolean | SqlString | false ➔ 0 true ➔ 1 |
String td> | '...' code> |
La mappe de conversion de type de données pour cette classe ajoute un objet TypeConverter spécifique à Oracle Database à chaque objet TypeConverter de la classe Standard.
Type de données source de conversion th> | Type de données de destination de conversion th> | Contenu de la conversion th> tr> | |||||
---|---|---|---|---|---|---|---|
Boolean | SqlString | false ➔ 0 true ➔ 1 | |||||
String | '...' Le caractère de contrôle est '...'||CHR(n)||'...' Conversion enSi long ? (Paramètres SQL) | ||||||
Time | TO_TIMESTAMP('1970-01-01 HH:mm:ss','YYYY-MM-DD HH24:MI:SS.FF3') | ||||||
octet [] td> | ? Code> (paramètre SQL) i> td> tr>
|
La mappe de conversion de type de données de cette classe ajoute un objet TypeConverter spécifique à PostgreSQL à tous les objets TypeConverter de la classe Standard.
Type de données source de conversion th> | Type de données de destination de conversion th> | Contenu de la conversion th> tr> | ||
---|---|---|---|---|
String td> | SqlString td> | '...' code> |
La mappe de conversion de type de données pour cette classe ajoute un objet TypeConverter spécifique à SQLite à chaque objet TypeConverter de la classe Standard.
Type de données source de conversion th> | Type de données de destination de conversion th> | Contenu de la conversion 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' | |
octet [] td> | ? Code> (paramètre SQL) i> td> tr>
|
La mappe de conversion de type de données pour cette classe ajoute un objet TypeConverter spécifique à Microsoft SQL Server à chaque objet TypeConverter de la classe Standard.
Type de données source de conversion th> | Type de données de destination de conversion th> | Contenu de la conversion 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