Ik ben ook halfbakken in Java en ik ben niet erg bekend met de Spring Family bucket, en ik heb een projectframework gebouwd op basis van online tutorials en wat van mijn eigen ervaring.
Projectomgeving:JDK-versie: 1.8.0_171, MySQL-versie: 5.7.17, spring boot: 2.1.1.RELEASE, ontwikkeltools: idee.
Hibernate en JPA
Het webproject in dit artikel gebruikt Hibernate als het persistentielaag-framework. In Spring Boot moeten we een ander concept begrijpen: JPA
De vorige zin is misschien dubbelzinnig, maar dat betekent niet dat JPA een concept is in Spring Boot. In plaats daarvan is het Java Persistence API, die in het Chinees wordt vertaald als: Java Persistence Layer API.
JPA is een standaardspecificatie gebaseerd op ORM (of O/R-mapping), waarin JPA alleen standaardregels definieert en geen implementatie biedt.
Op dit moment zijn de belangrijkste implementaties van JPA Hibernate, EclipseLink, OpenJPA, enzovoort.
Vanwege Hibernate's dominantie op het gebied van data-toegangsresolutietechnologie wordt de JPA-standaard in feite gedomineerd door Hibernate.
SpringBoot is een automatisch geweer
Spring Data JPA wordt aangeboden als een interfacetool voor ontwikkelaars om het Hibernate-framework toe te passen. Onze Spring Boot biedt een volledig geautomatiseerde "automatische afhankelijkheidsmodule": spring-boot-starter-data-jpa
POM Afhankelijkheidsstructuur:
Heeft iemand vragen over het POM-bestand zonder een verwijzing voor winterslaap?
De reden is dat, zoals in de bovenstaande figuur te zien is, spring-boot-starter-data-jpa afhankelijk is van hibernate-core, en wanneer spring-boot-starter-data-jpa wordt verwezen, zal het maven-project automatisch het pakket introduceren waarop het afhankelijk is.
application.yml Profiel:
Informatie over brongegevens over de veerconfiguratie officiële link:De hyperlink-login is zichtbaar.
########################################## ###datasource - Specificeer de verbindingsinformatie voor de MySQL-database ###spring.datasource.url: MySQL address ###spring.datasource.user: Database gebruikersnaam ###spring.datasource.password: Het databasewachtwoord ###spring.datasource.driverClassName: Overeenkomend met de databasedriver ###spring.datasource.max-actief: Specificeert het maximale aantal actieve verbindingen in de verbindingspool ###spring.datasource.max-idle: Specificeert het maximale aantal vrije verbindingen in de verbindingspool. ###spring.datasource.min-idle: Specificeert de minimale waarde die onderhouden moet worden (voor DBCP- en Tomcat-verbindingspools) ###spring.datasource.initial-size: Specificeert het aantal verbindingen dat aanvankelijk is opgezet wanneer de verbindingspool wordt gestart ### ###其他信息总结: ###spring.dao.exceptiontranslation.enabled of PersistenceExceptionTranslationPostProcessor is ingeschakeld, de standaard is waar ###spring.datasource.abandon-when-percent-fullen) stelt het percentage verlaten verbindingen die worden gesloten of gerapporteerd wanneer de time-out wordt verbroken ###spring.datasource.allow-pool-suspension Bij gebruik van Hikari pool wordt het toestaan dat de verbindingspool pauzeert op false gezet ###spring.datasource.alternate-username-allowedofalternatieve gebruikersnamen zijn toegestaan. ###spring.datasource.auto-commitSpecificeert of updates automatisch worden gecommit. ###spring.datasource.catalog specificeert de standaardcatalogus. ###spring.datasource.commit-on-return bepaalt of alle openstaande transacties moeten committen wanneer de verbinding wordt teruggegeven ###spring.datasource.connection-init-sql specificeert dat de verbinding wordt aangemaakt en toegevoegd aan de sql die vóór de verbindingspool wordt uitgevoerd. ###spring.datasource.connection-init-sqls Bij gebruik van de DBCP-verbindingspool, specificeer dan de sql die bij initialisatie moet worden uitgevoerd ###spring.datasource.connection-properties. [sleutel]Specificeert de attributen die geconfigureerd moeten worden bij gebruik van de DBCP-verbindingspool ###spring.datasource.connection-test-query specificeert de SQL-instructie die de legitimiteit van de verbindingsuitvoering verifieert ###spring.datasource.connection-timeoutSpecificeert de time-out tijd voor de verbinding, in milliseconden. ###spring.datasource.continue-on-errorBij het initialiseren van de database en een foutmelding of doorgaan is onjuist ###spring.datasource.data specificeert het Data (DML) script ###spring.datasource.data-source-class-name Specificeert de volledig gekwalificeerde naam van de databron. ###spring.datasource.data-source-jndi specificeert het adres van de jndi ###spring.datasource.data-source-properties. Bij gebruik van de Hikari-verbindingspool specificeer je de attributen die ingesteld moeten worden ###spring.datasource.db-properties gebruikt de Tomcat-verbindingspool, waarbij de te zetten eigenschappen worden gespecificeerd ###spring.datasource.default-auto-commit wordt automatisch gecommit. ###spring.datasource.default-catalog specificeert de catalogus die verbinding maakt met de standaard. ###spring.datasource.default-read-onlyOf ik de standaardverbinding op alleen-lezen moet zetten. ###spring.datasource.default-transaction-isolationSpecificeert het standaard isolatieniveau voor verbonden transacties. ###spring.datasource.driver-class-name specificeert de klassenaam van de driver, die standaard automatisch wordt gedetecteerd vanuit de jdbc-URL. ###spring.datasource.fair-queue Of FIFO gebruikt moet worden returnerde verbindingen. ###spring.datasource.health-check-properties. [sleutel] Attribuut doorgegeven bij gebruik van de Hikari-verbindingspool tijdens de hartslagcontrole ###spring.datasource.idle-timeoutSpecificeert hoe lang de verbinding niet wordt gebruikt, wat standaard op idle wordt gezet ###spring.datasource.ignore-exception-on-pre-loadOf de uitzondering wordt genegeerd wanneer de verbindingspool wordt geïnitialiseerd. ###spring.datasource.init-sqlsql die wordt uitgevoerd wanneer een verbinding wordt aangemaakt ###spring.datasource.initial-size specificeert het aantal verbindingen dat aanvankelijk is gevestigd wanneer de verbindingspool wordt gestart ###spring.datasource.initialization-fail-fastBij het aanmaken van een verbindingspool is het niet mogelijk om een gespecificeerd minimumaantal verbindingen te creëren om een uitzondering te gooien ###spring.datasource.initializeSpecificeer of de databron met data.sql geïnitialiseerd moet worden, standaard: true ###spring.datasource.isolate-internal-queries specificeert of interne queries in quarantaine moeten worden geplaatst, standaard vals ###spring.datasource.jdbc-interceptors Bij gebruik van de Tomcat-verbindingspool, specificeer dan de scheiding tussen de jdbc-interceptor en puntkommai ###spring.datasource.jdbc-url specificeert de JDBC-URL. ###spring.datasource.jmx-enabled is standaard ingeschakeld: false ###spring.datasource.jndi-nameSpecificeert de naam van de jndi. ###spring.datasource.leak-detection-threshold Hoeveel milliseconden detecteer je een verbindingslek bij het gebruik van de Hikari-verbindingspool? ###spring.datasource.log-abandoned de DBCP-verbindingspool gebruikt om abandoned statements of verbindingen te volgen, is de standaard false ###spring.datasource.log-validatiefoutenBij gebruik van Tomcat-verbindingspool, of er een validatiefout moet worden afgedrukt. ###spring.datasource.login-timeoutSpecificeert de time-out tijd voor het verbinden met de database. ###spring.datasource.max-age specificeert de maximale leeftijd van verbindingen in de verbindingspool ###spring.datasource.max-levensduur specificeert de maximale levensduur van verbindingen in de verbindingspool, in milliseconden. ###spring.datasource.max-open-prepared-statements specificeert het maximale aantal voorbereide statements dat geopend wordt. ###spring.datasource.max-wachten specificeert de maximale wachttijd voor de verbindingspool om te wachten tot de verbinding terugkeert, in milliseconden. ###spring.datasource.maximum-pool-sizeSpecificeert het maximale aantal verbindingen in de verbindingspool, inclusief actieve en ongebruikte verbindingen. ###spring.datasource.min-evictable-idle-time-millisSpecificeert een vrije verbinding voor de minimale tijd dat deze inactief kan zijn voordat deze kan worden opgeheven. ###spring.datasource.min-idle specificeert de minimale waarde die moet worden onderhouden (voor DBCP- en Tomcat-verbindingspools) ###spring.datasource.minimum-idle specificeert het minimale aantal vrije verbindingen dat door een verbinding wordt onderhouden, en bij gebruik van HikariCP. ###spring.datasource.name Geef de naam van de databron op. ###spring.datasource.num-tests-per-eviction-run specificeert het aantal objecten bij het uitvoeren van elke idle object evitor thread ###spring.datasource.passwordSpecificeer het databasewachtwoord. ###spring.datasource.platform specificeert het Platform (schema-${platform}.sql dat voor het schema moet worden gebruikt, dat standaard is: alle ###spring.datasource.pool-nameSpecificeert de naam van de verbindingspool. ###spring.datasource.pool-prepared-statementsSpecificeert of statements gepoold moet worden. ###spring.datasource.propagate-interrupt-stateOf de interrupttoestand moet worden doorgegeven als de thread wordt onderbroken terwijl op de verbinding wacht. ###spring.datasource.read-onlyBij gebruik van de Hikari-verbindingspool, of de databron als alleen-lezen moet worden gemarkeerd ###spring.datasource.register-mbeans specificeert of de Hikari-verbindingspool JMX MBeans registreert. ###spring.datasource.remove-abandoned specificeert of een verbinding onmiddellijk na de verlaten timeout verwijderd moet worden. ###spring.datasource.remove-abandoned-timeoutSpecificeert het tijdstip waarop de verbinding verbroken moet worden. ###spring.datasource.rollback-on-returnOf je een lopende transactie moet terugrollen bij het terugsturen van een verbinding. ###spring.datasource.schema specificeert het Schema (DDL) script. ###spring.datasource.separator specificeert de statement-separator voor het initialiseren van het script, standaard: ; ###spring.datasource.sql-script-encoding specificeert SQL-scriptcodering. ###spring.datasource.suspect-timeoutSpecificeert de timeout voordat de verlaten verbinding wordt geprint. ###spring.datasource.test-on-borrow Wanneer een verbinding wordt geleend uit een verbindingspool, of de verbinding getest moet worden. ###spring.datasource.test-on-connect wordt aangemaakt, of de verbinding getest moet worden ###spring.datasource.test-on-returnOf de verbinding wordt teruggegeven aan de verbindingspool. ###spring.datasource.test-while-idleOf je een verbindingstest moet uitvoeren terwijl de verbinding inactief is. ###spring.datasource.time-between-eviction-runs-millis Specificeert het operatietijdinterval tussen controles van inactieve verbindingen, het opruimen van verlaten verbindingen en de grootte van de idle verbindingspool ###spring.datasource.transaction-isolation specificeert het transactie-isolatieniveau, dat wordt gespecificeerd bij gebruik van de Hikari-verbindingspool ###spring.datasource.url specificeert de JDBC-URL. ###spring.datasource.use-disposable-connection-façade wikkelt de verbinding om te voorkomen dat deze wordt gebruikt nadat deze is gesloten. ###spring.datasource.use-gelijk aan of String.equals() vervangend == moet worden gebruikt. ###spring.datasource.use-lock is vergrendeld op de verbindingsoperatie ###spring.datasource.gebruikersnaamSpecificeer de databasenaam. ###spring.datasource.validation-interval specificeert hoeveel ms een verbindingscontrole moet uitvoeren. ###spring.datasource.validation-query specificeert de SQL-query-instructie voor verbindingsvalidatie bij het verkrijgen van een verbinding. ###spring.datasource.validation-query-timeoutSpecificeert de timeout-tijd voor de verificatiequery van de verbinding. ###spring.datasource.validation-timeoutStelt de time-outtijd in voor verbindingsvalidatie, die wordt gespecificeerd bij gebruik van de Hikari-verbindingspool ###spring.datasource.validator-class-name De validator volledige kwalifiseerder die wordt gebruikt om de query te testen. ###spring.datasource.xa.data-source-class-name Specificeert de volledige kwalificatie van de databron. ###spring.datasource.xa.properties specificeert de eigenschappen die aan de XA-databron worden doorgegeven ###spring.datasource.url=jdbc:mysql://localhost:3306/test?user=root&password=root&useUnicode=true&characterEncoding=UTF8 ########################################## spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=root spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.max-actief=20 spring.datasource.max-idle=8 spring.datasource.min-idle=8 spring.datasource.initial-size=10 ########################################## ##SPring JPA-configuratie-informatie ###spring.jpa.database specificeert de doeldatabase. ###spring.jps.show-sq: Of SQL-instructies weer moeten worden weergegeven ###spring.jpa.hibernate.ddl-auto specificeert DDL-modus (none, validate, update, create, create-drop). Bij gebruik van een ingebedde database is de standaard create-drop, anders is het geen data. ###spring.jpa.hibernate.naming-strategySpecificeer het naamgevingsbeleid. ###其他: ###spring.jpa.database-platformSpecificeert het type doeldatabase. ###spring.jpa.generate-ddl of het schema bij het opstarten moet worden geïnitialiseerd, standaard vals ###spring.jpa.hibernate.ddl-auto specificeert DDL-modus (none, validate, update, create, create-drop). Bij gebruik van een ingebedde database is de standaard create-drop, anders is het geen data. ###spring.jpa.hibernate.naming-strategySpecificeer het naamgevingsbeleid. ###spring.jpa.open-in-view registreert OpenEntityManagerInViewInterceptor en bindt JPA EntityManager aan de verzoekthread, de standaard is waar ###spring.jpa.properties voegt extra attributen toe aan de JPA-provider. ###spring.jpa.show-sql Of SQL-log ingeschakeld moet worden wordt standaard op false gezet ########################################## spring.jpa.database = MYSQL spring.jpa.show-sql = true spring.jpa.hibernate.ddl-auto = update spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect spring.freemarker.charset=UTF-8
De volledige pakketstructuur
Configuratie van gegevensbron:
Entiteitsklasse:
Database-bedieningsinterface:
De database-operatieinterface erft van de generieke klasse JpaRepository, en wanneer deze wordt erven, krijgt deze de goddelijke macht die het aan ontwikkelaars verleent:
We kunnen deze methoden direct aanroepen om databasebewerkingen uit te voeren, en we kunnen HQL ook aanpassen om andere bewerkingen uit te voeren die bij onze persoonlijkheid passen, zoals:
In deze code, via @Query opmerking,Het schrijven van HQL voltooidwaarbij ":name" consistent is met de parameter in de onderstaande @Param annotatie.
Opmerking: De tabelnaam in HQL zou de klassenaam van de ORM-map moeten zijn, en HQL heeft enkele verschillen met traditionele SQL-instructies, zoals de betekenis van "*" die anders is, enzovoort.
Als je niet gewend bent HQL te gebruiken, kun je ook SQL-statements gebruiken:
De bovenstaande methode is nog steeds effectief wanneer deze wordt toegepast.nativeQuery to true betekent het gebruik van de SQL-taal。
Controllerklasse:
Start het project
Hibernate zal automatisch entiteitsklassen aan de database koppelen om relevante databasetabellen voor ons te maken, en het zal automatisch databasetabellen matchen op basis van annotaties zoals @Table, @Column, @Id, @GeneratedValue (strategy = GenerationType.AUTO), enzovoort. Bespaar veel tabelwerk.
(Voordat je het project start, moet je eerst de database bouwen en wordt de tabel automatisch aangemaakt)
hibernate_sequence tabel is een id-generatiestrategie @GeneratedValue geannoteerd, GenerationType.AUTO staat voor automatische generatie, mits het id-attribuut een int- of long type-attribuut moet zijn; als het een id van String-type is, zal het toevoegen van deze annotatie bovenop id onmiddellijk een foutmelding rapporteren. Dus als het voor het id van het String-type is, hoef je het id niet te annoteren met @GeneratedValue (strategy = GenerationType.AUTO).
Vraag een test aan
Voltooi het aanvragen van gegevens en het opslaan van gegevens via respectievelijk get en post.
aanroepenDe hyperlink-login is zichtbaar.De interface POST vraagt om gegevens toe te voegen, zoals weergegeven in de volgende figuur:
De databasequery is als volgt:
Verkrijg de gegevens via de volgende interface:
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
Opmerking: Zoals gevraagd door de bovenstaande interface is Java zeer gevoelig voor hoofdlettergevoeligheid, of het nu het URL-adres of de parameters is, het moet hoofdlettergevoelig zijn! Als een letter een hoofdletter of kleine letter is, zal dat ervoor zorgen dat het verzoek de interface niet bereikt of de parameter leeg is!
Druid houdt de volgende situaties in de gaten:
Voeg tenslotte de broncode bij:
Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieft Antwoord
(Einde)
|