Conseils pour Play Framework2.5 (Java)

Je l'ajouterai pendant mon temps libre

Précautions lors de la mise en correspondance de votre propre classe avec Form

ProductForm.java


public class ProductForm {
    //Propre classe
    public ProductDto productDto;
}

L'erreur suivante peut se produire.

[InvalidPropertyException: Invalid property ◯◯ of bean class [△△Form]: Illegal attempt to get property '◯◯' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property '◯◯' of bean class [△△Form]: Could not instantiate property type [□□] to auto-grow nested property path: org.springframework.beans.BeanInstantiationException: Failed to instantiate [□□]: Is it an abstract class?; nested exception is java.lang.InstantiationException: □□]

Cela semble se produire si vous créez un constructeur avec des arguments sans faire de constructeur sans arguments. J'ai créé un constructeur vide et il a été corrigé.

ProductDto.java


public ProductDto() {
  //ne fais rien
}

public ProductDto(Product product) {
  this.price = product.price + "Cercle";
}

Obtenez un enregistrement

//Tous les cas
List<Product> products = Product.find.all();

//Entrez dans la liste
List<Product> products = Product.find.where().eq("valid_flg", 1).findList();

//Obtenir au format de pagination findPagedList(numéro de page,Nombre de pages par page)
PagedList<Product> products = Product.find.findPagedList(1, 20);

//Obtenir avec la clé primaire
Product product = Product.find.byId(1L);

//Obtenez le numéro
int count = Product.find.findRowCount();

//Acquérir une seule (* Une erreur se produira s'il y a deux ou plusieurs données applicables)
Product product = Product.find.where().eq("product_code", "123456789").findUnique();

Déduplication

Utilisez setDistinct (true).

List<Product> products = Product.find.select("category").setDistinct(true).findList();
// select distinct category from m_product;

Conditions comme A et (B ou C)

Product.find.where().eq("Condition A")
                    .disjunction()
                      .add(Expr.eq("Condition B"))
		              .add(Expr.ilike("Condition C"))
                    .findList();

Comment établir une relation

Défini dans la classe de modèle. Voici un exemple d'association de la table m_product et de la table m_season avec N: 1.

※ N:1 Un enregistrement pour une saison spécifique correspond toujours à un enregistrement pour un produit. Un produit n'est pas lié à plusieurs saisons. Pour un enregistrement particulier de la saison 1, plusieurs produits sont associés à cette saison. Par conséquent, la relation «produit: saison» est «N: 1». Expliquez les relations «un-à-un», «un-à-plusieurs» et «plusieurs-à-plusieurs» d'une manière simple à comprendre

models/Product.java


@ManyToOne
@JoinColumn(name = "season_id", insertable = false, updatable = false)
public Season season;

Définissez «@ ManyToOne» pour celui qui devient N. Définissez ensuite la clé externe sur le nom de @ JoinColumn.

models/Season.java


@OneToMany(mappedBy = "season")
public List<Product> productList;

Définissez «OneToMany» pour celui qui devient 1. mappedBy correspond au nom de variable du champ défini par @ ManyToOne.

Référence JPA

Join La jointure SQL est créée en passant le nom de variable de la relation définie ci-dessus à la méthode fetch.

controllers/ProductListController


List<Product> products = Product.find
                                .fetch("season")
                                .findList();
// select * from m_product t0 left outer join m_season t1 on t1.id = t0.season_id;

@OneToOne @ OneToMany et @ ManyToOne seront un chargement différé à moins que vous n'écriviez explicitement fetch, mais pour les relations un-à-un, ils seront chargés EAGER par défaut.

python


Product p = Product.find.byId(1);
// select * fron m_product t0 left outer join m_product_detail t1 on t0.product_id = t1.id where t1.id = 1;

//Lorsque les relations suivantes sont attachées au modèle de produit
// @OneToOne(mappedBy = "productDetail")
// public ProductDetail productDetail;

Joint même si fetch n'est pas écrit. Si vous ne souhaitez pas rejoindre, spécifiez explicitement le chargement différé.

models/Product.java


@OneToOne(mappedBy = "productDetail", fetch = FetchType.LAZY)
public ProductDetail productDetail;

Alias de nom de table

Les numéros de série sont attribués comme t0, t1, t2 ... dans l'ordre d'apparition par défaut. Vous pouvez définir n'importe quel alias en utilisant Query # alias. La table de destination de jointure ne peut pas être utilisée avec «Query # alias».

controllers/ProductListController


List<Product> products = Product.find
                                .query()
                                .alias("pro")
                                .fetch("season")
                                .findList();
// select * from m_product pro left outer join m_season t1 on t1.id = pro.season_id;

S'il existe une colonne portant le même nom dans la destination de la relation, spécifiez un alias pour faciliter la compréhension.

controllers/ProductListController


List<Product> products = Product.find
                                .query()
                                .alias("pro")
                                .orderBy("pro.valid_flg desc, pro.updated_at desc")
                                .fetch("season")
                                .findList();
// select * from m_product pro left outer join m_season t1 on t1.id = pro.season_id order by pro.valid_flg desc, pro.updated_at desc;

session

SampleController.java


session().get("hoge");

session () est une méthode de la classe play.mvc.Controller, donc lors d'un appel depuis un autre contrôleur que le contrôleur, c'est comme suit.

Http.Context.current().session().get("hoge");

Lire la valeur écrite dans le fichier de paramètres

Récupérez la valeur définie à l'origine dans application.conf à partir de Java.

conf/application.conf


MAIL_ADDRESS = "[email protected]"

Sample.java


import com.typesafe.config.ConfigFactory;

String mailAddress = ConfigFactory.load().getString("MAIL_ADDRESS");

Vous pouvez créer un autre fichier sous conf et spécifier le nom du fichier.

conf/sample.conf


MAIL_ADDRESS = "[email protected]"

Sample.java


import com.typesafe.config.ConfigFactory;

String mailAddress = ConfigFactory.load(ConfigFactory.parseFileAnySyntax(new File("conf/sample.conf"))).getString("MAIL_ADDRESS");

Peut être appelé par injection de dépendances depuis Controller

SampleController.java


import Play.Configuration

@Inject Configuration configuration

String mailAddress = configuration.getString("MAIL_ADDRESS");

Changer le fichier de paramètres à utiliser pour chaque environnement

Par défaut, ʻapplication.conf` est chargé au démarrage. En spécifiant l'option de démarrage, vous pouvez modifier le fichier de paramètres à lire.

activator -Dconfig.file=conf/application_local.conf run

Attention ①

Si le fichier spécifié dans l'option n'est pas trouvé, ʻapplication.conf` est lu sans erreur.

Attention ②

Dans l'environnement de production, ʻactivator start est utilisé à la place de ʻactivator run, il est donc nécessaire d'ajouter une habitude au style d'écriture.

activator "start 9000 -Dconfig.file=conf/application_prod.conf" -Dapplication.secret="xxxxxxxx"

Démarrer en mode débogage

activator -jvm-debug 9999 run 

Au démarrage du serveur, faites un clic droit sur le dossier du projet dans Eclipse Sélectionnez DebugDebug Configuration. Sélectionnez Application Java distante dans le menu de gauche et sélectionnez Entrez localhost pour l'hôte et 9999 pour le port et appuyez sur Déboguer.

Cela s'arrêtera au point d'arrêt.

URL de préfixe

Si vous souhaitez ajouter un préfixe commun à toutes les routes, définissez-le dans application.conf.

conf/application.conf


application.context = "/admin"

localhost: 9000 / admin est la racine.



Si vous avez des questions ou des commentaires, n'hésitez pas à nous contacter. Je l'ai assemblé en flottant, donc il peut y avoir des fautes de frappe ...

Recommended Posts

Conseils pour Play Framework2.5 (Java)
Astuces Java, astuces
framework java
Astuces Java
Création de l'environnement de développement Play Framework 2.6 (Java)
CONSEILS relatifs au code Java
Etude Play Framework
Comparaison du framework Java
[Java] Cadre de collection
Construction de l'environnement Play Framework 2.6 (Java) avec Eclipse
Publier sur Slack à partir de Play Framework 2.8 (Java)
Test d'étude de Play Framework
jouer des notes personnelles de cadre
[Développement] Comparaison du framework Java
Apprentissage du framework Java # 1 (version Mac)
Base de données de mémos d'étude Play Framework ①
Astuces Java - Modificateurs de classe StaticUtility
Java pour jouer avec Function
Notes de révision de Java Collections Framework
Notes personnelles de First Play Framework
Astuces Java - Résumé de l'exécution de Spring
Introduction de Dozer to Play Framework
[Java] Conseils pour l'écriture de la source
Fonction de validation dans Play Framework
[Java] [Play Framework] Jusqu'à ce que le projet soit démarré avec Gradle
Considération sur le cadre de persistance Java 2017 (résumé) -1
Play Framework Study Memo Database ②Lire
Considération sur le cadre de persistance Java 2017 (6) Ebean
Cause fondamentale du bogue du framework Java
Considération sur le framework de persistance Java 2017 (5) Iciql
Play Framework Study Momo DB Update
Conseils pour le client REST de haut niveau Java
Double soumission de mesures avec Play Framework
Considérations sur le cadre de persistance Java 2017 (7) EclipseLink
Considération sur le framework de persistance Java 2017 (1)
Outils Spring Framework pour développeur Java
J'ai essayé le framework Java "Quarkus"
Considérations sur le cadre de persistance Java 2017 (8) Hibernate5
Java
Présentation des conseils Java de GreenMail à Junit5
Considérations sur le cadre de persistance Java 2017 (2) Doma2
Java
Tweak Markdown avec Java flexmark-java
Différences entre Java et .NET Framework
Lancer les tâches planifiées et crontab
Essayez d'utiliser le framework Java Nablarch [Application Web]
Devinez le cadre de persistance Java 2017 (3) Reladomo
Comment installer Play Framework 2.6 pour Mac
Fonction d'authentification avec Play Framework [Restrictions d'accès]
Comment utiliser BootStrap avec Play Framework
Fonction d'authentification avec Play Framework [Enregistrement et authentification]
Lecture de fichiers RAW, WAV, MP3 en Java
Fonctionnalités du framework Spring pour les développeurs Java
Conseils d'interopérabilité avec Kotlin à envoyer aux développeurs Java
Play Framework étudiant la transmission de valeur
Méthode d'opération d'élément dans Appium TIPS (Java)