Dans l'article précédent "Accédez au h2db intégré de Spring Boot avec jdbcTemplate", j'ai écrit que "Il est également possible de sortir avec @ Value
". J'ai fait.
Ensuite, on m'a demandé de m'apprendre comment le faire, alors j'ai écrit cet article.
Par défaut, spring boot peut lire le fichier src / main / application.properties (.yml)
et le référencer avec @ Value
.
Cependant, il n'est pas souhaitable d'écrire du code SQL susceptible d'augmenter le nombre de définitions dans ce fichier de propriétés principal.
Donc, cette fois, je voudrais expliquer comment définir un fichier de propriétés dédié au SQL de jdbcTemplate.
Seuls les contenus liés à la découpe de SQL vers un fichier externe sont décrits.
Veuillez vous référer à Article précédent pour l'explication de jdbcTemplate.
Le but est simplement de spécifier le fichier avec l'annotation @ org.springframework.context.annotation.PropertySource
.
Le nom du champ ressemble à une constante car le code source précédent fonctionne tel quel.
FileInfoRepository.java
// ... omitted
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
// ... omitted
//★ Point
@PropertySource(value = "classpath:sql/FileInfoRepository.properties")
@Repository
public class FileInfoRepository {
private static final Logger LOGGER = LoggerFactory.getLogger(FileInfoRepository.class);
//★ Point
@Value("${FileInfoReppsitory.INSERT_SQL}")
String INSERT_SQL;
@Value("${FileInfoReppsitory.DELETE_BY_KEY_SQL}")
String DELETE_BY_KEY_SQL;
@Value("${FileInfoReppsitory.UPDATE_BY_KEY_SQL}")
String UPDATE_BY_KEY_SQL;
@Value("${FileInfoReppsitory.FIND_ONE_SQL}")
String FIND_ONE_SQL;
@Value("${FileInfoReppsitory.FIND_ALL_SQL}")
String FIND_ALL_SQL;
@Autowired
private NamedParameterJdbcTemplate jdbcTemplate;
// omitted
}
src/main/resources/sql/FileInfoRepository.properties
FileInfoReppsitory.INSERT_SQL=INSERT INTO file_info (file_id, file_type, file_name, file_path, content_type, content_length, registered_date) values (:fileId, :fileType, :fileName, :filePath, :contentType, :contentLength, :registeredDate)
FileInfoReppsitory.DELETE_BY_KEY_SQL=DELETE FROM file_info WHERE file_id = :fileId
FileInfoReppsitory.UPDATE_BY_KEY_SQL=UPDATE file_info SET file_type = :fileType, file_name = :fileName, file_path = :filePath, content_type = :contentType, content_length = :contentLength, registered_date = :registeredDate WHERE file_id = :fileId
FileInfoReppsitory.FIND_ONE_SQL=SELECT file_id, file_type, file_name, file_path, content_type, content_length, registered_date FROM file_info WHERE file_id = :fileId
FileInfoReppsitory.FIND_ALL_SQL=SELECT file_id, file_type, file_name, file_path, content_type, content_length, registered_date FROM file_info ORDER BY file_type, registered_date
**(Mise en garde) Puisqu'il s'agit d'un fichier de propriétés, il doit être décrit en une seule ligne. Veuillez noter que même un SQL long ne peut pas être interrompu au milieu. En passant, c'est difficile à voir car vous ne pouvez pas couper la ligne à la valeur où SQL est décrit lorsque vous la définissez sur yml. ** **
FileInfoReppsitory:
INSERT_SQL:
INSERT INTO file_info (file_id, file_type, file_name, file_path, content_type, content_length, registered_date) values (:fileId, :fileType, :fileName, :filePath, :contentType, :contentLength, :registeredDate)
Cette fois, j'ai expliqué comment définir un fichier de propriétés dédié au SQL de jdbcTemplate. Comme vous pouvez le voir sur les résultats, la lisibilité n'est pas bonne. Je pense que le mérite de jdbcTemplate est la simplicité qui est rapide et facile à utiliser, mais ce mérite est perdu. Au lieu de cela, le désagrément lié à l'écriture de SQL dans un fichier Java est éliminé. Lors de la conversion de SQL en fichier externe, il est préférable de prendre en compte les avantages et les inconvénients de chaque PJ.
Recommended Posts