1. Introduction
(1) MySQL est un système de base de données relationnel, la base de données la plus couramment utilisée et la plus étendue pour les sociétés Internet aujourd'hui. Il s'agit d'une base de données côté serveur qui peut résister à des visites simultanées élevées.
(2) Spring-Data-JPA est une implémentation de la couche de référentiel fournie sous la spécification JPA. Il peut être développé à l'aide de différents cadres d'implémentation tels que Hibernate, OpenJPA et d'autres cadres. Cela peut rendre le référentiel simple et résoudre son couplage avec la couche commerciale.
Dans cette étude, nous utilisons MySQL + Spring-Data-JPA pour le construire. La méthode d'implémentation JPA utilise Hibernate. Le pool de connexion de la base de données utilise DBCP pour la connexion.
2. Construction du projet
1. Présentez les dépendances liées à MySQL et JPA:
<! - Dépendances liées à Spring-JDBC -> <dependency> <proupId> org.springframework </proupId> <ArtifactId> Spring-JDBC </Retifactid> </Dependency> <! - Dépendances associées à se connecter à MySQL -> <Dedency> <ProupId> MySQL </roulid> <ArtefactId> MySQL-Connector-Java </Retifactid> </Dependency> <! - Les dépendances liées à JPA incluent Spring-Data-JPA, Spring-Lorm et Hibernate pour soutenir JPA -> <Dedency> <proupId> org.springframework.boot </proupId> <ArtefactId> Spring-boot-starter-data-jpa </refactive> </dependency>
Trois dépendances doivent être introduites. JDBC est la dépendance requise par Spring Intégration MySQL. La seconde est la dépendance du pilote de base de données de MySQL, et le troisième est la dépendance liée à Spring-Data-JPA:
Il inclut des dépendances telles que AOP, JDBC, Spring-Oor, Transaction Transaction-API et Hibernate pour la prendre en charge. Ainsi, JPA l'implémente par défaut en utilisant Hibernate.
2. Configuration du fichier de configuration:
Nous sélectionnons le fichier de format .yml pour le fichier de configuration et utilisons DPCP2 pour configurer les paramètres de pool de connexion:
1) Configuration liée au projet:
Serveur: #configuration Numéro de port Port: 8088Spring: Application: #Configuration Service Nom Nom: CMS-Dept
Voici les informations pertinentes sur la configuration de l'ouverture du serveur, principalement la configuration du nom et du port du serveur
2) Configuration liée à MySQL
Spring: #Data Source et JPA Configuration DataSource: # La connexion URL de configuration liée à la base de données est définie sur false URL: jdbc: mysql: // localhost: 3306 / crm? Characterencoding = utf8 & usessl = false #configuration username: *** #configuration mot de passe: ***.
Voici quelques configurations liées à la base de données, configurant principalement l'URL, le compte et le mot de passe de la base de données. Les informations de configuration après URL sont le format de codage de MySQL connecté et si le cryptage SSL est activé.
3) Configuration liée à DBCP
Spring: #Le suivant est une configuration DBCP2 pour la connexion liée au pool: #Initialize Connection Taille de pool de la taille initiale: 10 #Sitting Nombre minimum de pools de connexion min-idle: 10 #configure Nombre maximum de pools de connexion Max-idle: 30 #configure Temps d'attente pour le délai d'attente Time-between-eviction-runs-millis: 200000 #configure le temps de survie minimum de la connexion dans le pool de connexion supprimez-le-maintenance: 200000
Il est principalement configuré comme certaines informations de pool de connexion et les détails de configuration sont affichés dans les commentaires ci-dessus.
4) Spring-Data-JPA est basé sur la configuration liée à Ihibernata
Spring: JPA: #Configure Database Type Database: MySQL #configure Imprimer SQL Show-SQL: Vrai #Hibernate Configuration liée Hibernate: #configure Cascade Niveau DDL-Auto: mise à jour Naming: #naming Strategy: Org.HiberNate: Calect. org.hibernate.dialect.mysql5dialect
La configuration est le type de base de données de connexion, et s'il faut imprimer la cascade de SQL et Hibernate, il existe plusieurs types:
1) Valider - lorsque l'hibernate est chargé, vérifiez la création de la structure de la table de base de données.
2) Créer - Recréer chaque fois que l'hibernate est chargé, la structure de la table de base de données est recréée, ce qui est la raison de la perte de données de table de base de données.
3) Créer-Drop créé lorsque Hibernate est chargé et que la sortie est de supprimer la structure du tableau.
4) Update-Cascade Update Load Hibernate met automatiquement à jour la structure de la base de données.
Ici, nous choisissons des mises à jour en cascade et itéré sur la table d'origine.
Il existe deux types de stratégies de dénomination:
1), org.springframework.boot.orm.jpa.hibernate.springphysicalnamingstrategy rencontre la lettre capitale plus "_".
2), org.hibernate.cfg.improvednamingstrategy Aucune nomment de modification.
3. Configurer les classes connexes:
La classe de configuration doit être configurée dans un répertoire ou sous-répertoire horizontal avec la classe pneumatique avant de pouvoir être configurée avec succès. Ici, nous utilisons la configuration de la classe Java au lieu de la méthode XML pour la configuration:
/ ** * @Function Description: Classe pour la configuration liée à MySQL * @Author Administrator * /// La ligne suivante est utilisée pour trier l'interface d'annotation pour traiter les problèmes de priorité de chargement. Il a deux variables d'énumération @Order (ordonné.Highest_precence) // La ligne suivante représente cette classe comme la classe de configuration @configuration // La ligne suivante représente cette classe pour permettre la gestion des transactions @EnableLetRansactionManagement (ProxyTargetClass = True) // It peut également être définie comme une classe telle que Deptrepository.class It peut également définir des filtres = {{{en profondeur.classe. @ ComponentsCan.Filter (type = filterType.annotation, value = service.class)} @enablejParepositories (basepackages = "com.hzt. **. Repository") public class mysqlconfig {@bean persistance PersistanceExceptionPranslationPostProcessor (); }} 1) @Order Annotation, utilisé pour configurer la priorité de chargement de la classe, il a deux variables d'énumération:
Ordonné.Highest_precedence- Integer.Min_Value - Valeur minimale, avec la priorité la plus élevée
Ordonné.lowest_precence -Integer.max_value -Maxim Valeur, avec la priorité la plus basse
2) Annotation @configuration, ce qui signifie que cette classe est une classe de configuration
3) @EnableTransactionManagement Transaction Management pour MySQL ProxyTargetClass = True Moyens pour permettre la gestion des transactions de la classe
4) @enablejParePositories est utilisée pour configurer les transactions. Ici, le chemin est représenté par une expression CGNL, et il peut également être défini comme une classe spécifique, comme DeptrePository.class
Son élément enfant incluse les défilés peut définir les intercepteurs de transaction, tels que l'inclusion de fonctionnalités = {@ ComponentsCan.Filter (Type = filterType.annotation, Value = Service.class)}
4. Code lié à la classe Java de cartographie ORM:
1) Structure de la table de base de données
2) Mappage des classes d'entités
@Entity // représente ce type de classe d'entité de mappage pour une table @Table (name = "tbl_dept") // définir le nom de classe de table de table correspondant implémente sérialisable {/ ** * Fonction Description: Unicité pendant la sérialisation, les méthodes de get et set correspondantes ont été omises. * / private statique final long SerialVersionUID = 1l; / ** Clé primaire -id UUID * / @id // Cette note signifie que le champ est la clé principale de la classe @GeneratedValue (Generator = "System-UUID") @GenericGenerator (Name = "System-Uuid", Strategy = "UUID") // Name - Spécifiez le nom de la colonne correspondante, la longueur de la longueur du maximum @column (Name = "Id", Longueur = 3) / ** Numberal, unique * / // nullable - peut-il être nul, par défaut TRUE Unique - que ce soit unique, par défaut à false @Column (name = "no", nullable = false, unique = true) entier privé non; / ** Nom du département * / @Column (name = "name", unique = true, nullable = false) Nom de chaîne privée; / ** Clé primaire de gestion du département -ID UUID * / @Column (name = "Manager", unique = true, nullable = false) Private String Manager; / ** DESCRIPTION DU DEPARTAGE * / @Column (name = "Description") String privé Description; / ** Téléphone du département * / @Column (name = "Phone") Téléphone de chaîne privée; / ** Téléphone du département * / @Column (name = "Phone") Téléphone de chaîne privée; / ** Temps de création du département * / @Column (name = "CreateTime") @DatetimeFormat (pattern = "yyyy-mm-dd hh: mm: ss") private date CreateTime; / ** Temps de modification du département * / @Column (name = "edittime") @DatetimeFormat (Pattern = "Yyyy-mm-dd HH: MM: SS") Date privée Edittime;} (1), @entity représente la structure du tableau de ce type de mappage en tant que base de données
(2), @Table (name = "tbl_dept") Cette annotation est utilisée pour configurer la relation entre la classe d'entité et la cartographie de table. Le nom représente le nom de la table mappé.
(3) L'annotation @id signifie que cette classe est une clé principale
(4), l'annotation @GeneratedValue est utilisée pour configurer les informations liées à la clé primaire, et l'attribut générateur est utilisé pour configurer la stratégie de génération. Il existe les valeurs d'énumération suivantes:
1.Auto - La clé principale est contrôlée par le programme.
2. Identité - généré automatiquement par la base de données.
3. Enerator - Spécifie le générateur utilisé pour générer la clé primaire.
4. Séquence - Générez des touches primaires en fonction de la séquence de la base de données sous-jacente.
5. Tableau - Utilisez une table de base de données spécifique pour enregistrer la clé primaire.
6. System-UUID représente l'utilisation de l'UUID généré par le système pour la correspondance.
(5) @Column Annotation pour configurer les informations liées à la colonne 1. Le champ Nom est utilisé pour spécifier le champ de mappage mappé sur la structure de la table.
2. La longueur représente la contrainte de longueur de ce champ et peut être omise.
3. L'attribut unique représente si ce champ a des contraintes uniques activées. La valeur par défaut est fausse, et l'unique est vrai.
4. Nullable signifie si ce champ peut être vide et la valeur par défaut est vraie. Faux signifie qu'il ne peut pas être vide.
(6) @DateTimeFormat est utilisé pour cartographier le temps de la table de la base de données.
Les méthodes de Get and Set correspondantes ont été omises.
3) Implémentation de la couche Deptrepository
Comme le montre la figure, le respectory est une spécification d'interface, avec un héritage sous-interface différent. En plus de hériter de toutes les fonctions de l'interface parent, chaque sous-interface ajoutera également des méthodes supplémentaires pour différentes implémentations. La classe CruDrepository définit la méthode de base et ses sous-classes sont étendues séparément.
Par exemple, en plus de hériter de toutes les méthodes de crudrepository, la classe PAGINYANDSORTINGREPOSITORY l'étend également, ajoutant des méthodes pertinentes pour la recherche de pagination:
ITable <T> Findall (tri Sort); page <T> Findall (pagable pagable);
JParePository est élargi sur la base de PAGINYAndSortingRepository.
1. Couche de référentiel:
@Repository représente que cette classe est gérée par Spring, et c'est une couche DAO
/ ** * @Function Description: Interface de couche DAO pour le fonctionnement de la table du département * @Author Administrator * / @ Repository // Repository Ceci est une implémentation de la couche DAO Deptrepository étend JParePository <Dept, String> {}Selon la classe d'implémentation, il a différentes méthodes à appeler. Généralement, tout le monde peut connaître l'utilisation de cette méthode en connaissant le nom et le sens. Dans le type générique, le premier paramètre représente la classe d'entité de la carte du tableau, et le deuxième paramètre représente le type de clé primaire.
2. Implémentation de la couche de service:
/ ** * @Function Description: Classe d'implémentation pour les opérations de service du département * @Author Administrator * / @ ServicePublic Class DeptServiceIMPL implémente DepTService {/ ** Log Processing Class * / Private Final Logger log = loggerFactory.getLogger (getClass ()); @Autowired private Deptrepository Repository; @Override public Dept QueryById (String id) lève une exception {try {dept result = repository.findOne (id); log.info (result.toString ()); Résultat de retour; } catch (exception e) {log.info (e.toString (), e); Jetez un nouveau ServiceException ("L'exception s'est produite lors de l'interrogation selon ID!"); }}}Où FindOne est la méthode implémentée par JParePository.
3. Implémentation de la couche de contrôleur:
@ RestController @ requestmapping ("/ api / v1 / dept") public class deptController {/ ** Logging class * / private logger log = loggerfactory.getLogger (getClass ()); / ** Mon propre service * / @Autowired Private DeptService Service; / ** * @Function Description: Méthode de requête du contenu du département basé sur ID * @return Dept * / @getMapping ("/ id / get") Public Result GetbyId (String id) exception {Verify (new Verifyparam ("Department ID", id)); Renvoie un nouveau résultat ("obtenu avec succès via ID!", Service.QueryById (ID)); }}Lorsque RestController représente le contrôleur qui renvoie le format JSON, @RequestMapping définit l'URL de sa carte de classe. Les données que nous acceptons ici sont un type de chaîne normal. Si vous avez besoin d'accepter le type JSON, vous avez besoin de l'ID de chaîne @Requestbody pour configurer les paramètres de demande à accepter.
4. Test:
Simuler les demandes d'envoi de GET pour compléter l'intégration et la configuration de Spring-Data-JPA et MySQL.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.