


Detaillierte Erläuterung von Beispielen der von SpringBoot implementierten Spring Data JPA-Integration
In diesem Artikel werden hauptsächlich die relevanten Kenntnisse über die Integration von SpringData JPA und die Lese- und Schreibtrennung vorgestellt. Freunde in Not können sich auf den
zugehörigen Code beziehen: github OSCchina
Was ist JPA?? 🎜>/Assoziations-Mapping-Tool zur Verwaltung relationaler Daten in Java-Anwendungen. Es umfasst die folgenden Aspekte:1. ORM-Mapping unterstützt
xmlund Annotationsmethoden zum Erstellen von Entitäten und Tabellen-Mapping zwischen.2. Die Java-Persistenz-API definiert einige häufig verwendete CRUDSchnittstellen, die wir nur direkt aufrufen müssen, ohne die Details des zugrunde liegenden JDBC und SQL zu berücksichtigen.
3.JPQL AbfrageSprache Dies ist ein sehr wichtiger Aspekt bei Persistenzoperationen durch
Objektorientierte-Abfragesprache, um zu vermeiden, dass die SQL des Programms eng gekoppelt ist. Bei unserer Arbeit verwenden wir alle ORM-Technologien wie Hibernate, JOOQ usw. Je nach Bedarf verwenden wir verschiedene ORM
Frameworks, wenn wir das ORM-Framework ändern müssen Aufgrund der unterschiedlichen Implementierung und Verwendung verschiedener ORM-Frameworks müssen wir den Code häufig neu erstellen. Das Aufkommen von JPA besteht darin, dieses Problem vollständig zu lösen Framework zeichnen sich dadurch aus, dass es einfach zu verwenden ist und eine starke Skalierbarkeit aufweist. Es bietet eine Reihe von Standardschnittstellen für die ORM-Technologie zur Integration verschiedener ORM-Frameworks.Hibernate-Implementierung von JPA
JPA selbst implementiert keine spezifischen Implementierungen, sondern definiert nur einige Schnittstellenspezifikationen, sodass
andereORMs diese Schnittstellen speziell implementieren können. Die derzeit beste Implementierung der JPA-Spezifikation ist Hibernate. Lassen Sie mich hier Mybatis erwähnen. Mybatis implementiert die JPA-Spezifikation nicht und kann nicht als echtes ORM-Framework angesehen werden. Was ist
Spring Data JPA ist nur ein Modul des Spring Data-Frameworks, das die Verwendung von JPA erheblich vereinfachen kann. Die Stärke von Spring Data JPA besteht darin, dass es die Geschäftslogik unserer Persistenzschicht vereinfachen kann, indem es die Namen der Persistenzschicht standardisiert Methoden und die Verwendung der Namen, um zu bestimmen, welche Geschäftslogik implementiert werden muss, haben wir die Möglichkeit, den größten Teil unserer Entwicklung abzuschließen, ohne einen Satz SQL zu schreiben oder eine DAO-Layer-Logik auszuführen. Natürlich für einige komplexe Abfragen mit hohen Leistungsanforderungen , Spring Data JPA unterstützt uns auch bei der Verwendung von nativem SQL.
Hier werden wir nicht zu viel über JPA und Spring Data JPA vorstellen, hauptsächlich einige Details der Integration mit SpringBoot und Beispiel.Abhängigkeit einführen
Nachdem wir diese Abhängigkeit eingeführt hatten, stellten wir fest, dass auch das Hibernate-Paket eingeführt wurde, das nun ein Standardansatz ist, dass Hibernate berücksichtigt wurde Als beste Implementierung der JPA-Spezifikation wird hier nicht vorgestellt. Sie können einen weiteren Artikel lesen.Konfiguration unserer Datenquelle und JPA (Hibernate). )
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
Druiden-Datenquelleninjektion
EntityManagerFactory-Instanzinjektion#配置模板 #https://docs.spring.io/spring-boot/docs/1.4.0.RELEASE/reference/html/common-application-properties.html #数据源 spring.datasource.druid.write.url=jdbc:mysql://localhost:3306/jpa spring.datasource.druid.write.username=root spring.datasource.druid.write.password=1 spring.datasource.druid.write.driver-class-name=com.mysql.jdbc.Driver spring.datasource.druid.read.url=jdbc:mysql://localhost:3306/jpa spring.datasource.druid.read.username=root spring.datasource.druid.read.password=1 spring.datasource.druid.read.driver-class-name=com.mysql.jdbc.Driver #JPA (JpaBaseConfiguration, HibernateJpaAutoConfiguration) spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect spring.jpa.database=mysql spring.jpa.generate-ddl=true #就是hibernate.hbm2ddl.auto,具体说明可以看README spring.jpa.hibernate.ddl-auto=update #通过方法名解析sql的策略,具体说明可以看README,这里就不配置了 spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.DefaultComponentSafeNamingStrategy spring.jpa.show-sql=true #spring.jpa.properties.* #spring.jpa.properties.hibernate.hbm2ddl.auto=update #spring.jpa.properties.hibernate.show_sql=true #spring.jpa.properties.hibernate.use-new-id-generator-mappings=true
EntityManagerFactory ähnelt der SessionFactory von Hibernate und der SqlSessionFactory von mybatis. Kurz gesagt, wir müssen immer einen EntityManager abrufen, der der Session von Hibernate und der sqlSession von mybatis ähnelt. Eine davon ist die Injektion von EntityManagerFactory direkt und die andere besteht darin, indirekt über LocalContainerEntityManagerFactoryBean zu injizieren. Obwohl diese beiden Methoden auf LocalContainerEntityManagerFactoryBean basieren, gibt es immer noch einige Unterschiede in der Konfiguration
@Configuration public class DruidDataSourceConfig { /** * DataSource 配置 * @return */ @ConfigurationProperties(prefix = "spring.datasource.druid.read") @Bean(name = "readDruidDataSource") public DataSource readDruidDataSource() { return new DruidDataSource(); } /** * DataSource 配置 * @return */ @ConfigurationProperties(prefix = "spring.datasource.druid.write") @Bean(name = "writeDruidDataSource") @Primary public DataSource writeDruidDataSource() { return new DruidDataSource(); } }
-Eigenschaften von Hibernate über spring.jpa.properties.* EntityManagerFactory
-Konfiguration:Für diese Konfiguration ist das
Die getObject()-Methode kann eine Instanz von EntityManagerFactory abrufen, die mit der ersten identisch zu sein scheint. Es gibt keinen Unterschied, aber wir können getObject() nicht direkt verwenden, sonst können wir sie nicht abrufen, und a Es wird eine Nullzeigerausnahme gemeldet Konfiguration der Lese-/Schreibtrennungspring.jpa.properties.hibernate.hbm2ddl.auto=update spring.jpa.properties.hibernate.show_sql=true spring.jpa.properties.hibernate.use-new-id-generator-mappings=true @Configuration @EnableJpaRepositories(value = "com.lc.springBoot.jpa.repository", entityManagerFactoryRef = "writeEntityManagerFactory", transactionManagerRef="writeTransactionManager") public class WriteDataSourceConfig { @Autowired JpaProperties jpaProperties; @Autowired @Qualifier("writeDruidDataSource") private DataSource writeDruidDataSource; /** * EntityManagerFactory类似于Hibernate的SessionFactory,mybatis的SqlSessionFactory * 总之,在执行操作之前,我们总要获取一个EntityManager,这就类似于Hibernate的Session, * mybatis的sqlSession. * @return */ @Bean(name = "writeEntityManagerFactory") @Primary public EntityManagerFactory writeEntityManagerFactory() { HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setJpaVendorAdapter(vendorAdapter); factory.setPackagesToScan("com.lc.springBoot.jpa.entity"); factory.setDataSource(writeDruidDataSource);//数据源 factory.setJpaPropertyMap(jpaProperties.getProperties()); factory.afterPropertiesSet();//在完成了其它所有相关的配置加载以及属性设置后,才初始化 return factory.getObject(); } /** * 配置事物管理器 * @return */ @Bean(name = "writeTransactionManager") @Primary public PlatformTransactionManager writeTransactionManager() { JpaTransactionManager jpaTransactionManager = new JpaTransactionManager(); jpaTransactionManager.setEntityManagerFactory(this.writeEntityManagerFactory()); return jpaTransactionManager; } }
Benutzerdefinierte Injektion von AbstractRoutingDataSource
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect spring.jpa.database=mysql spring.jpa.generate-ddl=true #就是hibernate.hbm2ddl.auto,具体说明可以看README spring.jpa.hibernate.ddl-auto=update #通过方法名解析sql的策略,具体说明可以看README,这里就不配置了 spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.DefaultComponentSafeNamingStrategy spring.jpa.show-sql=true @Configuration @EnableJpaRepositories(value = "com.lc.springBoot.jpa.repository", entityManagerFactoryRef = "writeEntityManagerFactory", transactionManagerRef = "writeTransactionManager") public class WriteDataSourceConfig1 { @Autowired JpaProperties jpaProperties; @Autowired @Qualifier("writeDruidDataSource") private DataSource writeDruidDataSource; /** * 我们通过LocalContainerEntityManagerFactoryBean来获取EntityManagerFactory实例 * @return */ @Bean(name = "writeEntityManagerFactoryBean") @Primary public LocalContainerEntityManagerFactoryBean writeEntityManagerFactoryBean(EntityManagerFactoryBuilder builder) { return builder .dataSource(writeDruidDataSource) .properties(jpaProperties.getProperties()) .packages("com.lc.springBoot.jpa.entity") //设置实体类所在位置 .persistenceUnit("writePersistenceUnit") .build(); //.getObject();//不要在这里直接获取EntityManagerFactory } /** * EntityManagerFactory类似于Hibernate的SessionFactory,mybatis的SqlSessionFactory * 总之,在执行操作之前,我们总要获取一个EntityManager,这就类似于Hibernate的Session, * mybatis的sqlSession. * @param builder * @return */ @Bean(name = "writeEntityManagerFactory") @Primary public EntityManagerFactory writeEntityManagerFactory(EntityManagerFactoryBuilder builder) { return this.writeEntityManagerFactoryBean(builder).getObject(); } /** * 配置事物管理器 * @return */ @Bean(name = "writeTransactionManager") @Primary public PlatformTransactionManager writeTransactionManager(EntityManagerFactoryBuilder builder) { return new JpaTransactionManager(writeEntityManagerFactory(builder)); } }
@Bean(name = "writeEntityManagerFactoryBean") @Primary public LocalContainerEntityManagerFactoryBean writeEntityManagerFactoryBean(EntityManagerFactoryBuilder builder) { return builder .dataSource(writeDruidDataSource) .properties(jpaProperties.getProperties()) .packages("com.lc.springBoot.jpa.entity") //设置实体类所在位置 .persistenceUnit("writePersistenceUnit") .build(); //.getObject();//不要在这里直接获取EntityManagerFactory }
Aspekte definieren
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen der von SpringBoot implementierten Spring Data JPA-Integration. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen


![Windows-ISO-Datei zu groß BootCamp-Fehler [Behoben]](https://img.php.cn/upload/article/000/887/227/170831702395455.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Wenn Sie bei der Verwendung von BootCampAssistant auf einem Mac-Computer die Fehlermeldung „Die Windows-ISO-Datei ist zu groß“ erhalten, kann dies daran liegen, dass die ISO-Dateigröße den von BootCampAssistant unterstützten Grenzwert überschreitet. Die Lösung für dieses Problem besteht darin, andere Tools zum Komprimieren der ISO-Dateigröße zu verwenden, um sicherzustellen, dass sie im BootCamp-Assistenten verarbeitet werden kann. BootCampAssistant ist ein praktisches Tool von Apple zum Installieren und Ausführen des Windows-Betriebssystems auf Mac-Computern. Es hilft Benutzern beim Einrichten eines Dual-Boot-Systems, sodass sie beim Start problemlos zwischen MacOS und Wind wählen können

Im Jahr 2023 ist die KI-Technologie zu einem heißen Thema geworden und hat enorme Auswirkungen auf verschiedene Branchen, insbesondere im Programmierbereich. Die Bedeutung der KI-Technologie wird den Menschen zunehmend bewusst, und die Spring-Community bildet da keine Ausnahme. Mit der kontinuierlichen Weiterentwicklung der GenAI-Technologie (General Artificial Intelligence) ist es entscheidend und dringend geworden, die Erstellung von Anwendungen mit KI-Funktionen zu vereinfachen. Vor diesem Hintergrund entstand „SpringAI“ mit dem Ziel, den Prozess der Entwicklung von KI-Funktionsanwendungen zu vereinfachen, ihn einfach und intuitiv zu gestalten und unnötige Komplexität zu vermeiden. Durch „SpringAI“ können Entwickler einfacher Anwendungen mit KI-Funktionen erstellen, wodurch diese einfacher zu verwenden und zu bedienen sind.

Die Wahl von JPA oder MyBatis hängt von den spezifischen Bedürfnissen und Vorlieben ab. Sowohl JPA als auch MyBatis sind Java-Persistenzschicht-Frameworks und bieten beide die Funktion, Java-Objekte Datenbanktabellen zuzuordnen. Wenn Sie ein ausgereiftes Framework benötigen, das datenbankübergreifende Vorgänge unterstützt, oder das Projekt bereits JPA als Persistenzschichtlösung eingeführt hat, ist die weitere Verwendung von JPA möglicherweise die bessere Wahl. Wenn Sie eine höhere Leistung und flexiblere SQL-Schreibfunktionen wünschen oder eine Lösung suchen, die weniger von der Datenbank abhängig ist, ist MyBatis besser geeignet.

Als Branchenführer bietet Spring+AI durch seine leistungsstarke, flexible API und erweiterte Funktionen führende Lösungen für verschiedene Branchen. In diesem Thema werden wir uns mit den Anwendungsbeispielen von Spring+AI in verschiedenen Bereichen befassen. Jeder Fall wird zeigen, wie Spring+AI spezifische Anforderungen erfüllt, Ziele erreicht und diese LESSONSLEARNED auf ein breiteres Anwendungsspektrum ausdehnt. Ich hoffe, dieses Thema kann Sie dazu inspirieren, die unendlichen Möglichkeiten von Spring+AI tiefer zu verstehen und zu nutzen. Das Spring-Framework hat eine mehr als 20-jährige Geschichte im Bereich der Softwareentwicklung, und seit der Veröffentlichung der Spring Boot 1.0-Version sind 10 Jahre vergangen. Nun kann niemand diesen Frühling bestreiten

So implementieren Sie programmgesteuerte Spring-Transaktionen: 1. Verwenden Sie TransactionCallback und TransactionCallbackWithoutResult; 4. Verwenden Sie TransactionTemplate in Kombination mit @Transactional;

JPA und MyBatis: Vergleichende Analyse von Funktion und Leistung Einführung: In der Java-Entwicklung spielt das Persistenz-Framework eine sehr wichtige Rolle. Zu den gängigen Persistenz-Frameworks gehören JPA (JavaPersistenceAPI) und MyBatis. In diesem Artikel wird eine vergleichende Analyse der Funktionen und Leistung der beiden Frameworks durchgeführt und spezifische Codebeispiele bereitgestellt. 1. Funktionsvergleich: JPA: JPA ist Teil von JavaEE und bietet eine objektorientierte Datenpersistenzlösung. Es wird eine Annotation oder X übergeben

So legen Sie die Transaktionsisolationsstufe in Spring fest: 1. Verwenden Sie die Annotation @Transactional. 3. Legen Sie sie in der Spring-Konfigurationsdatei fest. 4. Legen Sie sie in der Java-Konfigurationsklasse fest. Detaillierte Einführung: 1. Verwenden Sie die Annotation @Transactional, fügen Sie die Annotation @Transactional zu der Klasse oder Methode hinzu, die eine Transaktionsverwaltung erfordert, und legen Sie die Isolationsstufe im Attribut fest. 2. In der Spring-Konfigurationsdatei usw.

Im Bereich der Java-Programmierung bietet JPA (JavaPersistence API) als beliebtes Persistenz-Framework Entwicklern eine komfortable Möglichkeit, relationale Datenbanken zu betreiben. Durch die Verwendung von JPA können Entwickler Java-Objekte problemlos in der Datenbank speichern und Daten aus der Datenbank abrufen, wodurch die Effizienz und Wartbarkeit der Anwendungsentwicklung erheblich verbessert wird. In diesem Artikel werden sorgfältig 10 hochwertige JavaJPA-Open-Source-Projekte ausgewählt, die eine Vielzahl unterschiedlicher Funktionen und Anwendungsszenarien abdecken. Ziel ist es, Entwicklern mehr Inspiration und Lösungen zu bieten, um effizientere und zuverlässigere Anwendungen zu erstellen. Zu diesen Projekten gehören: SpringDataJPA: springDataJPA ist das Spr
