Heim Java javaLernprogramm Detaillierte Erläuterung von Beispielen der von SpringBoot implementierten Spring Data JPA-Integration

Detaillierte Erläuterung von Beispielen der von SpringBoot implementierten Spring Data JPA-Integration

May 04, 2017 am 10:39 AM
boot data jpa spring 读写分离

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

xml

und 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

andere

ORMs 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>
Nach dem Login kopieren

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
Nach dem Login kopieren

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();
  }
}
Nach dem Login kopieren
1 🎜>Konfiguration: Konfigurieren Sie die

-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-/Schreibtrennung
spring.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;
  }
}
Nach dem Login kopieren

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));
  }
}
Nach dem Login kopieren
Benutzerdefinierte Annotation

@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
  }
Nach dem Login kopieren

Verwenden Sie ThreadLocal, um die Datenquelle an den Thread zu binden

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Windows-ISO-Datei zu groß BootCamp-Fehler [Behoben] Windows-ISO-Datei zu groß BootCamp-Fehler [Behoben] Feb 19, 2024 pm 12:30 PM

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

Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Feb 01, 2024 pm 09:18 PM

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.

Was ist besser, JPA oder Mybatis? Was ist besser, JPA oder Mybatis? Jan 15, 2024 pm 01:48 PM

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.

Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Apr 28, 2024 am 11:46 AM

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

Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Jan 08, 2024 am 10:23 AM

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

Vergleichende Analyse der Funktionen und Leistung von JPA und MyBatis Vergleichende Analyse der Funktionen und Leistung von JPA und MyBatis Feb 19, 2024 pm 05:43 PM

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 im Frühjahr fest So legen Sie die Transaktionsisolationsstufe im Frühjahr fest Jan 26, 2024 pm 05:38 PM

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.

Empfehlungen für Java-JPA-Open-Source-Projekte: Verleihen Sie Ihrem Projekt neue Dynamik Empfehlungen für Java-JPA-Open-Source-Projekte: Verleihen Sie Ihrem Projekt neue Dynamik Feb 20, 2024 am 09:09 AM

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

See all articles