Lorsque vous essayez de créer une application qui se connecte à une base de données, cela est souvent gênant en termes de construction d'environnement. Même si vous essayez le mappeur O / R pendant un certain temps, vous pouvez installer le serveur de base de données localement, créer une table et entrer des données. Récemment, il semble qu'il soit possible de créer facilement un environnement en utilisant une technologie de conteneur telle que Docker, mais si vous souhaitez distribuer des exemples d'applications à des fins éducatives, etc., créez l'environnement aussi facilement que possible et exécutez-le dès que possible. Le seuil sera un peu plus élevé.
Si possible, je veux un environnement qui soit facile à distribuer dans une petite capacité et qui puisse être exécuté immédiatement ... ** Apache Derby ** semble résoudre un tel problème.
Apache Derby est un RDB léger entièrement composé de Java. Il peut être facilement exécuté avec seulement un accès aux fichiers ou à la mémoire, et est très approprié pour l'éducation et la distribution d'exemples d'application.
Il s'agit d'un outil d'aide au développement RDB et a les deux fonctions suivantes.
--Mappeur O / R
Cet article traite principalement du deuxième outil de support de gestion de base de données. En utilisant cela, vous pouvez créer une table et saisir des données en un seul lot. De plus, j'écrirai un petit exemple de code en tant que mappeur O / R.
DBFlute a diverses fonctions, et il y a un moteur dédié pour les exécuter. Par conséquent, lorsque vous utilisez DBFlute pour la première fois, il est nécessaire de télécharger le moteur et de définir l'environnement, mais c'est un outil pour préparer facilement un tel environnement. Il est distribué dans un format jar exécutable et peut être exécuté immédiatement dans n'importe quel environnement Java (https://github.com/dbflute/dbflute-intro/releases).
Après avoir préparé l'environnement d'accès à la base de données, essayez d'utiliser les trois types de mappeurs O / R suivants à titre d'essai.
Cet article utilise les versions suivantes.
D'ici Vous pouvez le télécharger. Il peut être exécuté immédiatement en l'important dans eclipse, etc. avec une connexion DB possible.
Comme c'est un gros problème, je vais commencer par préparer l'environnement de codage et l'environnement d'exécution. Il n'est pas nécessaire que ce soit Eclipse, mais pour vous éviter quelques ennuis, je vais compter sur Pléiades All in One ici. Téléchargez Java Full Edition avec jkd pour Windows ou Mac à partir de http://mergedoc.osdn.jp/.
Obtenez les fichiers de la série 10.14 depuis Maven Repository.
Créez un projet Spring Boot à partir de https://start.spring.io/. À ce moment-là, ajoutez ce qui suit à la dépendance Spring Boot.
Décompressez le fichier téléchargé dans un emplacement approprié (par exemple sous l'espace de travail si vous utilisez eclipse). sample-dbaccess ├─ .gitignore ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml ├─.mvn └─src
Récupérez le fichier jar depuis github. https://github.com/dbflute/dbflute-intro/releases
Placez le fichier téléchargé directement sous le projet Spring que vous avez décompressé précédemment. sample-dbaccess ├─ .gitignore ├─ dbflute-intro.jar ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml ├─.mvn └─src
Exécutez le fichier dbflute-intro.jar. Pour plus tard, si le chemin java ne passe pas, transmettez-le.
set PATH=%PATH%;C:\path\to\eclipse_java\11\bin
java -jar dbflute-intro.jar
Une fois exécuté, un serveur local sera lancé en interne et ouvert dans le navigateur.
Saisissez les informations requises et effectuez la configuration initiale. Après avoir terminé la saisie, cliquez sur le bouton "Créer" sur l'écran pour l'exécuter.
Les points suivants doivent être notés lors de la saisie.
En outre, étant donné que DBFlute est utilisé comme exemple en tant que mappeur O / R, cliquez sur "Paramètres du mappeur O / R" sur le côté droit de l'écran pour le préparer pour l'entrée, puis entrez ce qui suit.
Si vous cliquez sur le bouton "Créer" et que l'exécution est réussie, l'écran suivant s'affiche.
Il y a plus de fichiers dans le projet. sample-dbaccess ├─ .gitignore ├─ dbflute-intro.jar ├─ dbflute_sample_dbaccess ├─ mydbflute ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml ├─.mvn └─src
--mydbflute: moteur DBFlute. En gros, vous ne modifiez pas ici. --dbflute_ * xxx *: ce dossier contient les paramètres DBFlute pour chaque projet. "Xxx" est le "Nom du projet" entré dans la configuration initiale.
Entrez le DDL tel que l'instruction de création de table dans replace-schema.sql dans le dossier DBFlute spécifique au projet "dbflute_ * xxx *" créé précédemment.
dbflute_sample_dbaccess/playsql/replace-schema.sql
create table DEPARTMENT (
DEPARTMENT_ID int not null,
DEPARTMENT_NAME varchar(100) not null,
constraint PK_DEPARTMENT primary key(DEPARTMENT_ID),
constraint FK_DEPARTMENT_1 FOREIGN KEY (DEPARTMENT_ID) references DEPARTMENT(DEPARTMENT_ID)
);
create table EMPLOYEE (
EMPLOYEE_ID int not null,
EMPLOYEE_NAME varchar(100) not null,
DEPARTMENT_ID int not null,
constraint PK_EMPLOYEE primary key(EMPLOYEE_ID),
constraint FK_EMPLOYEE_1 FOREIGN KEY (DEPARTMENT_ID) references DEPARTMENT(DEPARTMENT_ID)
);
Cette fois, nous allons créer des données d'enregistrement au format tsv (format de données avec des tabulations comme délimiteurs). Il existe des règles spéciales lors de l'enregistrement des données et une attention particulière doit être portée aux noms de répertoires et de fichiers. Pour plus de détails, reportez-vous à "Enregistrement des données (TSV)".
dbflute_sample_dbaccess/playsql/data/ut/tsv/UTF-8/01-department.tsv
DEPARTMENT_ID DEPARTMENT_NAME
1 département 1
2 département 2
3 département 3
dbflute_sample_dbaccess/playsql/data/ut/tsv/UTF-8/02-employee.tsv
EMPLOYEE_ID EMPLOYEE_NAME DEPARTMENT_ID
11 Employé 11 1
12 salariés 12 1
13 Employés 13 1
21 Employés 21 2
22 Employés 22 2
23 Employés 23 2
31 Employé 31 3
32 salariés 32 3
33 Employé 33 3
Sur l'écran DBFlute Intro, sélectionnez le projet créé et appuyez sur le bouton Remplacer le schéma pour exécuter la création de schéma et la saisie de données.
Vous pouvez également exécuter le fichier manage.bat. Notez que le chemin java est en place.
cd dbflute_sample_dbaccess
manage.bat 0
Le nombre de fichiers de données pour le derby a augmenté directement dans le cadre du projet. Le nom du répertoire créé ici est spécifié par l'URL de connexion saisie lors de la configuration initiale de DBFlute Intro. sample-dbaccess ├─ .gitignore ├─ _derbydata ├─ dbflute-intro.jar ├─ dbflute_sample_dbaccess ├─ mydbflute ├─ HELP.md ├─ mvnw ├─ mvnw.cmd ├─ pom.xml ├─.mvn └─src
La génération automatique du code source pour DBFlute n'a pas pu être effectuée à partir de l'écran DBFlute Intro, alors exécutez-la depuis la ligne de commande. Exécutez manage.bat avec l'argument "2: régénérer" (ou vous pouvez l'exécuter sans aucun argument et le saisir plus tard). Voir Manage Tasks pour plus d'informations.
cd dbflute_sample_dbaccess
manage.bat 2
En cas de succès, le code généré automatiquement sera sorti sous le package entré dans 5. Configuration initiale de DBFlute Engine.
Ajoutez des paramètres pour utiliser le mappeur O / R sur Spring.
Modifiez d'abord pom.xml. Ajustez la version Java pour ajouter des dépendances DBFlute.
pom.xml
<properties>
<java.version>1.11</java.version>
</properties>
<!--Omission-->
<dependencies>
<!--Ajouter à diverses dépendances existantes-->
<dependency>
<groupId>org.dbflute</groupId>
<artifactId>dbflute-runtime</artifactId>
<version>1.1.9</version>
</dependency>
</dependencies>
src/main/resources/application.yml
#Informations de connexion à la base de données commune
spring:
datasource:
url: jdbc:derby:_derbydata
username: APP
driverClassName: org.apache.derby.jdbc.EmbeddedDriver
#Paramètres de My Batis. lower_Mappez le nom de la colonne de cas à la propriété camelCase
mybatis:
configuration:
mapUnderscoreToCamelCase: true
La chaîne de connexion pour derby est jdbc: file path
.
Ici, pour le chemin du fichier, spécifiez le chemin relatif depuis le répertoire de base lors de l'exécution de java (lors de l'exécution depuis eclipse, directement sous le projet) ou le chemin absolu.
Sélectionnez un projet et essayez "Maven> Mettre à jour le projet".
Ajoutez le fichier suivant et démarrez facilement Spring à partir de la ligne de commande.
SampleDbaccessDBFluteApplication.java
@SpringBootApplication
public class SampleDbaccessDBFluteApplication {
@Autowired
EmployeeBhv employeeBhv;
public static void main(String[] args) {
try (ConfigurableApplicationContext ctx = SpringApplication.run(SampleDbaccessDBFluteApplication.class, args)) {
SampleDbaccessDBFluteApplication app = ctx.getBean(SampleDbaccessDBFluteApplication.class);
app.run(args);
}
}
private void run(String... args) {
System.out.println("Commencer le traitement");
employeeBhv.selectList(cb -> {
cb.setupSelect_Department();
cb.query().setDepartmentId_Equal(2);
}).forEach(employee -> {
System.out.println(
String.format(
"employeeName: %s, departmentName: %s",
employee.getEmployeeName(),
employee.getDepartment().get().getDepartmentName()));
});
//Traitement des applications
System.out.println("Sortie de traitement");
}
}
SampleDbaccessMyBatisApplication.java
@SpringBootApplication
public class SampleDbaccessMyBatisApplication {
@Autowired
EmployeeMapper employeeMapper;
public static void main(String[] args) {
try (ConfigurableApplicationContext ctx = SpringApplication.run(SampleDbaccessMyBatisApplication.class, args)) {
SampleDbaccessMyBatisApplication app = ctx.getBean(SampleDbaccessMyBatisApplication.class);
app.run(args);
}
}
private void run(String... args) {
System.out.println("Commencer le traitement");
employeeMapper.findEmployeeList(2).forEach(employee -> {
if (employee != null) {
System.out.println(
String.format(
"employeeName: %s, departmentName: %s",
employee.getEmployeeName(),
employee.getDepartmentName()));
} else {
System.out.println("employee is null");
}
});
//Traitement des applications
System.out.println("Sortie de traitement");
}
}
EmployeeMapper.java
@Mapper
public interface EmployeeMapper {
@Select({ "select emp.EMPLOYEE_NAME as EMPLOYEENAME, dept.DEPARTMENT_NAME",
"from EMPLOYEE emp",
"inner join DEPARTMENT dept on dept.DEPARTMENT_ID = emp.DEPARTMENT_ID",
"where emp.DEPARTMENT_ID = #{departmentId}", })
List<Employee> findEmployeeList(int departmentId);
}
Employee.java
public class Employee {
private String employeeName;
private String departmentName;
// getter, setter
}
SampleDbaccessJDBCApplication.java
@SpringBootApplication
public class SampleDbaccessJDBCApplication {
@Autowired
JdbcTemplate jdbcTemplate;
public static void main(String[] args) {
try (ConfigurableApplicationContext ctx = SpringApplication.run(SampleDbaccessJDBCApplication.class, args)) {
SampleDbaccessJDBCApplication app = ctx.getBean(SampleDbaccessJDBCApplication.class);
app.run(args);
}
}
private void run(String... args) {
System.out.println("Commencer le traitement");
findEmployeeList(2).forEach(map -> {
System.out.println(
String.format(
"employeeName: %s, departmentName: %s",
map.get("EMPLOYEE_NAME"),
map.get("DEPARTMENT_NAME")));
});
System.out.println("Sortie de traitement");
}
private List<Map<String, Object>> findEmployeeList(int departmentId) {
return jdbcTemplate.queryForList(String.join("", new String[] {
"select emp.EMPLOYEE_NAME, dept.DEPARTMENT_NAME",
" from EMPLOYEE emp",
" inner join DEPARTMENT dept on dept.DEPARTMENT_ID = emp.DEPARTMENT_ID",
" where emp.DEPARTMENT_ID = ?"
}), departmentId);
}
}
S'il y a un changement d'ajout de table, modifiez replace-schema.sql et les données d'enregistrement, exécutez manage.bat, la table existante sera supprimée et régénérée, et la migration est possible dans l'environnement de développement. En outre, DBFlute a d'excellentes fonctions en tant qu'outil de migration, comme un outil de comparaison des différences de schéma (Référence: "[20160521 Derrière le renouvellement complet du service de distribution vidéo à grande échelle avec Java 8](https: //www.slideshare) .net / SuguruAkiho / 20160521-jjug-cccunext) ". Même si vous ne pouvez pas l'introduire en tant que mappeur O / R, veuillez envisager de l'introduire en tant qu'outil de support de gestion de base de données.
En important dans eclipse etc., il est distribué sous une forme qui peut être exécutée immédiatement. Le total du code source + base de données Derby n'est que de 287 Ko (après compression). Essayez immédiatement l'exemple de mappeur O / R et faites-en l'expérience.