Sie sind hier
E-Book

Java-Persistenz mit Hibernate

AutorChristian Bauer, Gavin King
VerlagCarl Hanser Fachbuchverlag
Erscheinungsjahr2007
Seitenanzahl729 Seiten
ISBN9783446413825
FormatPDF
KopierschutzWasserzeichen/DRM
GerätePC/MAC/eReader/Tablet
Preis47,99 EUR
Hibernate (engl. für Winterschlaf halten) ist momentan das populärste Java-Persistenz-Tool.

Das Open-Source-Framework ermöglicht es, den Zustand eines Objekts rechnerunabhängig in einer relationalen Datenbank speichern und daraus Datensätzen wiederum Objekte zu erzeugen. Wer mit Hibernate arbeitet braucht bis zu 30% weniger Anwendungscode und steigert so Produktivität und Performance. In dieser Neuauflage des Bestsellers Hibernate in Action decken Christian Bauer und Gavin King, der Gründer des Hibernate-Projekts, Hibernate 3.2 detailliert ab. Sie bieten dreifachen Nutzen: Ein Tutorial für Hibernate, Java Persistenz und EJB 3.0 für Einsteiger. Unterstützung beim Erlernen aller grundlegenden und fortgeschrittenen Features von Hibernate. Eine Referenz für alle, die eine vollständige und technisch genaue Definition der Hibernate-Funktionalitäten benötigen. Der Leser profitiert von den Best Practices für das Datenbank-Design, das Object/Relational-Mapping und die Techniken für die Performanceoptimierung. Das Buch wird abgerundet durch ein Kapitel zu JBoss Seam, dem neuen Web Application Framework für Java EE, das auf EJB 3.0, JSF und Hibernate aufbaut. Im Internet: Der Sourcecode der Beispiele aus dem Buch.

Ein Buch für alle Java-Programmierer!

Kaufen Sie hier:

Horizontale Tabs

Leseprobe
8 Legacy-Datenbanken und eigenes SQL (S. 285-286)

Die Themen dieses Kapitels:

Integration von Legacy-Datenbanken und knifflige Mappings
Anpassung von SQL-Anweisungen
Verbesserung des SQL-Schemas mit eigener DDL


Bei vielen Beispielen in diesem Kapitel geht es um „schwierige" Mappings. Das erste Mal wenn Sie Probleme mit dem Erstellen eines Mappings bekommen, wird wahrscheinlich sein, wenn das Datenbankschema eines Legacy-, also eines Altsystems nicht verändert werden kann. Wir besprechen typische Probleme, auf die Sie bei einem solchen Szenario stoßen werden, und wie Sie Ihre Mapping-Metadaten anpassen können, statt Ihre Applikation oder das Datenbankschema zu verändern.

Wir zeigen Ihnen auch, wie Sie das von Hibernate automatisch generierte SQL überschreiben können. Dazu gehören SQL-Abfragen, DML-Operationen (Create, Update, Delete) und auch die automatische DDL-Generierung von Hibernate. Sie erfahren, wie Stored Procedures und benutzerdefinierte SQL-Funktionen gemappt werden und wie Sie die richtigen Integritätsregeln in Ihrem Datenbankschema anwenden. Dieser Abschnitt wird besonders dann nützlich sein, wenn Ihr Datenbankadministrator die vollständige Kontrolle braucht (oder wenn Sie selbst der DBA sind und Hibernate auf SQL-Ebene optimieren wollen). Wie Sie sehen, sind die Themen dieses Kapitels breit gestreut, Sie brauchen nicht alles am Stück zu lesen. Sie können einen Großteil dieses Kapitels als Referenzmaterial betrachten und darauf zurückgreifen, wenn ein bestimmtes Problem auftritt.

8.1 Integration von Datenbanken aus Altsystemen

In diesem Abschnitt decken wir hoffentlich alle die Eventualitäten ab, auf die Sie bei der Arbeit mit einer vorhandenen Altsystem-Datenbank oder (und das ist oft das Gleiche) einem eigenartigen bzw. kaputten Schema arbeiten müssen. Wenn Ihr Entwicklungsprozess Top-down ist, können Sie diesen Abschnitt jedoch überspringen. Darüber hinaus empfehlen wir Ihnen, dass Sie zuerst alle Kapitel über Klassen-, Collection- und Assoziations- Mappings lesen, bevor Sie versuchen, mit Reverse Engineering ein komplexes Legacy- Schema anzugehen.

Wir müssen Sie warnen: Wenn Ihre Applikation ein vorhandenes Legacy-Datenbankschema erbt, sollten Sie an diesem Schema normalerweise so wenig Änderungen wie möglich vornehmen. Jede Änderung daran könnte andere vorhandene Applikationen beeinträchtigen, die auf die Datenbank zugreifen. Möglicherweise müssen Sie auch eine kostspielige Migration vorhandener Daten in Betracht ziehen. Im Allgemeinen ist es nicht möglich, eine neue Applikation zu erstellen und keine Änderungen am vorhandenen Datenmodell zu machen – eine neue Applikation bedeutet normalerweise zusätzliche Business-Anforderungen, die naturgemäß eine Weiterentwicklung des Datenbankschemas nach sich zieht. Wir werden von daher zwei Arten von Problemen betrachten: solche, die mit den sich verändernden Business-Anforderungen zu tun haben (die im Allgemeinen nicht ohne Überarbeitung des Schemas gelöst werden können), und solche, die sich nur darauf beziehen, wie Sie das gleiche Business-Problem in Ihrer neuen Applikation repräsentieren wollen (gewöhnlich kann das ohne Änderungen am Datenbankschema gelöst werden, aber nicht immer).

Es sollte klar sein, dass die erste Art von Problemen schon erkennbar wird, wenn man sich nur das logische Datenmodell anschaut. Die zweite bezieht sich häufiger auf die Implementierung des logischen Datenmodells als physisches Datenbankschema. Wenn Sie diesen Beobachtung zustimmen, merken Sie, dass Schemaveränderungen bei folgenden Problemen erforderlich sind: Einfügen neuer Entities, Refakturierung vorhandener Entities, Einfügen neuer Attribute bei vorhandenen Entities und Überarbeitungen der Assoziationen zwischen Entities. Bei den ohne Schemaveränderungen lösbaren Problemen geht es gewöhnlich um unpraktische Tabellen- oder Spaltendefinitionen für eine bestimmte Entity. In diesem Abschnitt konzentrieren wir uns auf diese Art Probleme.

Wir gehen davon aus, dass Sie bereits ein Reverse Engineering des vorhandenen Schemas mit dem Hibernate Toolset probiert haben, wie wir es in Kapitel 2, Abschnitt 2.3 „Reverse Engineering einer Legacy-Datenbank", beschrieben haben. Die Konzepte und Lösungen, die in den folgenden Abschnitten vorgestellt werden, gehen davon aus, dass Sie ein grundlegendes objekt-relationales Mapping etabliert haben und zusätzliche Änderungen machen müssen, um es ans Laufen zu kriegen. Alternativ können Sie versuchen, das Mapping ohne Tools fürs Reverse Engineering komplett per Hand zu schreiben. Fangen wir mit dem offensichtlichsten Problem an: den Legacy-Primärschlüsseln.
Inhaltsverzeichnis
Inhalt5
Geleitwort zur zweiten Auflage13
Geleitwort15
Vorwort zur zweiten Auflage17
Vorwort19
Danksagungen21
Über dieses Buch23
Roadmap23
Für wen ist dieses Buch gedacht?24
Code-Konventionen25
Download des Quellcodes25
Über die Autoren25
Author Online26
Teil 1 Erste Schritte mit Hibernate und EJB 3.027
1 Objekt-relationale Persistenz29
1.1 Was ist Persistenz?31
1.1.1 Relationale Datenbanken31
1.1.2 Die Grundlagen von SQL32
1.1.3 SQL in Java nutzen33
1.1.4 Persistenz in objektorientierten Applikationen33
1.2 Die Unvereinbarkeit der Paradigmen35
1.2.1 Das Problem der Granularität37
1.2.2 Das Problem der Subtypen38
1.2.3 Das Problem der Identität40
1.2.4 Mit Assoziationen verbundene Probleme41
1.2.5 Das Problem der Datennavigation43
1.2.6 Die Kosten der Unvereinbarkeit der Paradigmen44
1.3 Persistenzschichten und Alternativen45
1.3.1 Schichtarchitektur45
1.3.2 Eine Persistenzschicht mit SQL/JDBC handcodieren46
1.3.3 Serialisierung47
1.3.4 Objektorientierte Datenbanksysteme48
1.3.5 Andere Optionen49
1.4 Objekt-relationales Mapping49
1.4.1 Was ist ORM?50
1.4.2 Generische ORM-Probleme52
1.4.3 Warum ORM?53
1.4.4 Hibernate, EJB3 und JPA55
1.5 Zusammenfassung60
2 Ein neues Projekt beginnen61
2.1 Ein Hibernate-Projekt beginnen62
2.1.1 Auswahl eines Entwicklungsprozesses62
2.1.2 Das Projekt aufsetzen65
2.1.3 Konfiguration und Start von Hibernate71
2.1.4 Starten und Testen der Applikation81
2.2 Ein neues Projekt mit Java Persistence88
2.2.1 Die Arbeit mit Hibernate Annotations88
2.2.2 Die Arbeit mit Hibernate EntityManager91
2.2.3 Die Komponenten von EJB97
2.2.4 Wechsel zu Hibernate-Interfaces103
2.3 Reverse Engineering einer Legacy-Datenbank105
2.3.1 Erstellen einer Datenbankkonfiguration106
2.3.2 Reverse Engineering anpassen107
2.3.3 Generieren von Java-Quellcode108
2.4 Integration mit Java EE-Diensten112
2.4.1 Integration mit JTA112
2.4.2 JNDI-gebundene SessionFactory116
2.4.3 Bereitstellung von JMX-Diensten118
2.5 Zusammenfassung119
3 Domain-Modelle und Metadaten121
3.1 Die Applikation CaveatEmptor122
3.1.1 Analyse der Business-Domain122
3.1.2 Das Domain-Modell für CaveatEmptor123
3.2 Implementierung des Domain-Modells126
3.2.1 Das Vermischen von Aufgabenbereichen126
3.2.2 Transparente und automatische Persistenz127
3.2.3 POJOs und persistente Entity-Klassen129
3.2.4 Implementierung von POJO- Assoziationen131
3.2.5 Logik in Zugriffs-Methoden einfügen135
3.3 Objekt-relationale Mapping-Metadaten137
3.3.1 Metadaten in XML137
3.3.2 Auf Annotationen basierende Metadaten139
3.3.3 Die Arbeit mit XDoclet145
3.3.4 Umgang mit globalen Metadaten146
3.3.5 Die Manipulation von Metadaten zur Laufzeit151
3.4 Alternative Entity- Repräsentation153
3.4.1 Erstellung von dynamischen Applikationen154
3.4.2 Daten in XML repräsentieren160
3.5 Zusammenfassung163
Teil 2 Konzepte und Strategien für das Mapping165
4 Mapping von Persistenzklassen167
4.1 Entities- und Wert-Typen167
4.1.1 Feingranulierte Domain-Modelle168
4.1.2 Konzeptdefinition168
4.1.3 Identifizierung von Entities und Wert-Typen169
4.2 Entities mit Identität mappen171
4.2.1 Identität und Gleichheit bei Java171
4.2.2 Umgang mit Datenbankidentität172
4.2.3 Primärschlüssel für Datenbanken174
4.3 Optionen für das Mapping von Klassen179
4.3.1 Dynamische SQL-Generierung179
4.3.2 Eine Entity unveränderlich machen180
4.3.3 Bezeichnung von Entities für Abfragen181
4.3.4 Deklaration eines Paketnamens182
4.3.5 Quoting von SQL-Identifikatoren182
4.3.6 Implementierung von Namenskonventionen183
4.4 Feingranulierte Modelle und Mappings185
4.4.1 Mapping von grundlegenden Eigenschaften185
4.4.2 Mapping von Komponenten191
4.5 Zusammenfassung196
5 Vererbung und selbst erstellte Typen197
5.1 Mapping von Klassenvererbung197
5.1.1 Tabelle pro konkrete Klasse mit implizitem Polymorphismus198
5.1.2 Tabelle pro konkrete Klasse mit Unions201
5.1.3 Tabelle pro Klassenhierarchie203
5.1.4 Tabelle pro Subklasse207
5.1.5 Mischen von Vererbungsstrategien210
5.1.6 Wahl einer Strategie212
5.2 Das Typsystem von Hibernate214
5.2.1 Wiederholung von Entity- und Wert-Typen214
5.2.2 Eingebaute Mapping-Typen216
5.2.3 Die Arbeit mit Mapping-Typen220
5.3 Erstellen eigener Mapping-Typen222
5.3.1 Überlegungen zu eigenen Mapping-Typen222
5.3.2 Die Extension Points223
5.3.3 Über eigene Mapping-Typen224
5.3.4 Erstellen eines UserType225
5.3.5 Erstellen eines CompositeUserType228
5.3.6 Parametrisierung eigener Typen231
5.3.7 Mapping von Aufzählungen233
5.4 Zusammenfassung237
6 Mapping von Collections und Entity-Assoziationen239
6.1 Sets, Multimengen, Listen und Maps mit Wert-Typen239
6.1.1 Wahl eines Collection-Interfaces240
6.1.2 Mapping eines Set242
6.1.3 Mapping einer Identifikator-Multimenge243
6.1.4 Mapping einer Liste244
6.1.5 Mapping einer Map245
6.1.6 Sortierte und geordnete Collections246
6.2 Collections von Komponenten248
6.2.1 Schreiben der Komponentenklasse249
6.2.2 Mapping der Collection249
6.2.3 Aktivieren der bidirektionalen Navigation250
6.2.4 Vermeiden von not-null-Spalten250
6.3 Mapping von Collections mit Annotationen252
6.3.1 Grundlegendes Mapping von Collections252
6.3.2 Sortierte und geordnete Collections254
6.3.3 Eine Collection von eingebetteten Objekten mappen254
6.4 Mapping einer Parent/Children-Beziehung256
6.4.1 Kardinalität257
6.4.2 Die einfachste mögliche Assoziation257
6.4.3 Die Assoziation bidirektional machen259
6.4.4 Kaskadierung des Objektzustands262
6.5 Zusammenfassung269
7 Fortgeschrittene Mappings für Entity-Assoziationen271
7.1 Entity- Assoziationen mit einem Wert272
7.1.1 Gemeinsame Primärschlüssel- Assoziationen273
7.1.2 one-to-one-Fremdschlüssel- Assoziationen276
7.1.3 Mapping mit einer Join-Tabelle278
7.2 Mehrwertige Entity- Assoziationen282
7.2.1 one-to-many- Assoziationen283
7.2.2 many-to-many- Assoziationen289
7.2.3 Zusätzliche Spalten bei Join-Tabellen294
7.2.4 Mapping von Maps299
7.3 Polymorphe Assoziationen302
7.3.1 Polymorphe many-to-one- Assoziationen302
7.3.2 Polymorphe Collections304
7.3.3 Polymorphe Assoziationen mit Unions305
7.3.4 Polymorphe Tabelle pro konkrete Klasse307
7.4 Zusammenfassung309
8 Legacy-Datenbanken und eigenes SQL311
8.1 Integration von Datenbanken aus Altsystemen312
8.1.1 Umgang mit Primärschlüsseln313
8.1.2 Beliebige Join-Bedingungen mit Formeln323
8.1.3 Zusammenführen beliebiger Tabellen328
8.1.4 Die Arbeit mit Triggern331
8.2 Anpassung von SQL335
8.2.1 Eigene CRUD- Anweisungen schreiben336
8.2.2 Integration von Stored Procedures und Functions340
8.3 Verbesserung der Schema-DDL347
8.3.1 Eigene Namen und Datentypen in SQL347
8.3.2 Gewährleistung von Datenkonsistenz349
8.3.3 Einfügen von Domain- und Spalten-Constraints351
8.3.4 Constraints auf Tabellenebene352
8.3.5 Datenbank-Constraints355
8.3.6 Erstellung von Indizes356
8.3.7 Einfügen zusätzlicher DDL357
8.4 Zusammenfassung359
Teil 3 Dialogorientierte Objektverarbeitung361
9 Die Arbeit mit Objekten363
9.1 Der Persistenz-Lebenszyklus364
9.1.1 Objekt-Zustände364
9.1.2 Der Persistenzkontext367
9.2 Objektidentität und Objektgleichheit370
9.2.1 Die Konversationen371
9.2.2 Der Geltungsbereich der Objektidentität372
9.2.3 Die Identität von detached Objekten373
9.2.4 Erweiterung eines Persistenzkontexts379
9.3 Die Hibernate-Interfaces379
9.3.1 Speichern und Laden von Objekten380
9.3.2 Die Arbeit mit detached Objekten386
9.3.3 Management des Persistenzkontexts391
9.4 Die Java Persistence API394
9.4.1 Speichern und Laden von Objekten394
9.4.2 Die Arbeit mit detached Entity-Instanzen399
9.5 Java Persistence in EBJ-Komponenten402
9.5.1 EntityManager injizieren403
9.5.2 Lookup eines EntityManagers405
9.5.3 Zugriff auf eine EntityManagerFactory405
9.6 Zusammenfassung407
10 Transaktionen und gleichzeitiger Datenzugriff409
10.1 Einführung in Transaktionen409
10.1.1 Datenbank und Systemtransaktionen411
10.1.2 Transaktionen in einer Hibernate- Applikation413
10.1.3 Transaktionen mit Java Persistence423
10.2 Steuerung des zeitgleichen Zugriffs426
10.2.1 Zeitgleicher Zugriff auf Datenbanklevel427
10.2.2 Optimistische Steuerung des zeitgleichen Zugriffs432
10.2.3 Zusätzliche Isolationsgarantien438
10.3 Nicht-transaktionaler Datenzugriff442
10.3.1 Entlarvte Mythen über Autocommit442
10.3.2 Die nicht-transaktionale Arbeit mit Hibernate444
10.3.3 Optionale Transaktionen mit JTA445
10.4 Zusammenfassung447
11 Konversationen implementieren449
11.1 Propagation der Hibernate-Session450
11.1.1 Der Anwendungsfall für die Session-Propagation450
11.1.2 Thread-local-Propagation452
11.1.3 Propagation mit JTA453
11.1.4 Propagation mit EJBs455
11.2 Konversationen mit Hibernate456
11.2.1 Die Garantien einer Konversation456
11.2.2 Konversationen mit detached Objekten457
11.2.3 Erweitern einer Session für eine Konversation460
11.3 Konversationen mit JPA466
11.3.1 Kontextpropagation in Java SE467
11.3.2 Merging von detached Objekten in Konversationen469
11.3.3 Erweiterung des Persistenzkontexts in Java SE470
11.4 Konversationen mit EJB 3.0474
11.4.1 Kontextpropagation mit EJBs474
11.4.2 Erweiterter Persistenzkontext mit EJBs477
11.5 Zusammenfassung482
12 Effiziente Bearbeitung von Objekten485
12.1 Transitive Persistenz486
12.1.1 Persistence by Reachability486
12.1.2 Kaskadierung auf Assoziationen anwenden487
12.1.3 Die Arbeit mit dem transitiven Zustand491
12.1.4 Transitive Assoziationen mit JPA497
12.2 Bulk- und Batch-Operationen499
12.2.1 Bulk- Anweisungen mit HQL und JPA QL499
12.2.2 Batch-Verarbeitung502
12.2.3 Die Arbeit mit einer stateless Session504
12.3 Datenfilterung und Interception506
12.3.1 Dynamische Datenfilter507
12.3.2 Abfangen von Events in Hibernate511
12.3.3 Das Core-Event-System517
12.3.4 Entity-Listener und Callbacks519
12.4 Zusammenfassung521
13 Fetching und Caching optimieren523
13.1 Definition des globalen Fetch-Plans523
13.1.1 Optionen für das Auslesen der Objekte523
13.1.2 Der Fetch-Plan: Default und Lazy527
13.1.3 Die Arbeit mit Proxies527
13.1.4 Deaktivieren der Proxy-Generierung530
13.1.5 Eager Loading von Assoziationen und Collections531
13.1.6 Lazy Loading mit Interception533
13.2 Wahl einer Fetching-Strategie535
13.2.1 Prefetching von Daten in Batches536
13.2.2 Collections mit Subselects prefetchen539
13.2.3 Eager Fetching mit Joins540
13.2.4 Optimieren des Fetchings für Sekundärtabellen542
13.2.5 Leitfaden zur Optimierung545
13.3 Grundlagen des Caching552
13.3.1 Geltungsbereiche und Strategien für das Caching553
13.3.2 Die Cache- Architektur von Hibernate557
13.4 Caching in der Praxis561
13.4.1 Wahl einer Strategie für die Concurrency-Steuerung561
13.4.2 Die Arbeit mit Cache-Bereichen563
13.4.3 Einrichten eines lokalen Cache-Providers564
13.4.4 Einrichten eines replizierten Caches565
13.4.5 Steuerung des Second-level-Caches569
13.5 Zusammenfassung571
14 Abfragen mit HQL und JPA QL573
14.1 Erstellen und Starten und Abfragen574
14.1.1 Vorbereiten einer Abfrage574
14.1.2 Ausführen einer Abfrage583
14.1.3 Die Arbeit mit benannten Abfragen587
14.2 HQL- und JPA QL- Abfragen590
14.2.1 Selektion590
14.2.2 Restriktion592
14.2.3 Projektion597
14.3 Joins, Reporting-Abfragen und Subselects599
14.3.1 Zusammenführen von Relationen und Assoziationen600
14.3.2 Reporting- Abfragen610
14.3.3 Die Arbeit mit Subselects615
14.4 Zusammenfassung617
15 Fortgeschrittene Abfrageoptionen619
15.1 Abfragen mit Criteria und Example620
15.1.1 Grundlegende Abfragen mit Kriterien620
15.1.2 Joins und dynamisches Fetching625
15.1.3 Projektion und Berichtsabfragen630
15.1.4 Query by Example633
15.2 Native SQL- Abfragen636
15.2.1 AutomatischerUmgang mit dem Resultset636
15.2.2 Auslesen skalarer Werte637
15.2.3 Natives SQL in Java Persistence639
15.3 Filtern von Collections641
15.4 Caching der Abfrageergebnisse643
15.4.1 Aktivieren des Caches für das Abfrageergebnis644
15.4.2 Funktionsweise des Abfrage-Caches644
15.4.3 Wann sollte der Abfrage-Cache benutzt werden?645
15.4.4 Cache-Lookups von natürlichen Identifikatoren646
15.5 Zusammenfassung648
16.1 Hibernate in einer Webapplikation650
16.1.1 Der Use Case für eine mehrschichtige Applikation650
16.1.2 Einen Controller schreiben650
16.1.3 Das Entwurfsmuster Open Session in View652
16.1.4 Design von smarten Domain-Modellen656
16.2 Eine Persistenzschicht erstellen658
16.2.1 Ein generisches Muster für das Data Access Object659
16.2.2 Das generische CRUD-Interface implementieren661
16.2.3 Implementierung von Entity-DAOs663
16.2.4 Die Verwendung von Data Access Objects664
16.3 Das Command-Muster668
16.3.1 Die grundlegenden Interfaces668
16.3.2 Ausführung von Command-Objekten670
16.3.3 Varianten des Command-Musters672
16.4 Das Design einer Applikation mit EJB 3.0674
16.4.1 Mit stateful Beans eine Konversation implementieren674
16.4.2 DAOs mit EJBs schreiben676
16.4.3 Einsatz der Abhängigkeitsinjektion677
16.5 Testen679
16.5.1 Die verschiedenen Testarten679
16.5.2 Die Arbeit mit TestNG680
16.5.3 Die Persistenzschicht testen684
16.5.4 Ein paar Überlegungen zu Performance-Benchmarks691
16.6 Zusammenfassung693
Anhang A: SQL-Grundbegriffe695
Anhang B: Mapping-Schnellreferenz699
Quellenangaben701
Register703

Weitere E-Books zum Thema: Programmiersprachen - Softwareentwicklung

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

Programmieren lernen in PHP 5

E-Book Programmieren lernen in PHP 5
Format: PDF

Mit der Version 5 erreicht PHP einen bemerkenswerten Reifegrad, der PHP zu einer festen Größe in der Welt der Webprogrammierung macht. Gerade die leichte Erlernbarkeit macht PHP zur idealen…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Weitere Zeitschriften

Berufsstart Gehalt

Berufsstart Gehalt

»Berufsstart Gehalt« erscheint jährlich zum Sommersemester im Mai mit einer Auflage von 50.000 Exemplaren und ermöglicht Unternehmen sich bei Studenten und Absolventen mit einer ...

BONSAI ART

BONSAI ART

Auflagenstärkste deutschsprachige Bonsai-Zeitschrift, basierend auf den renommiertesten Bonsai-Zeitschriften Japans mit vielen Beiträgen europäischer Gestalter. Wertvolle Informationen für ...

Deutsche Hockey Zeitung

Deutsche Hockey Zeitung

Informiert über das nationale und internationale Hockey. Die Deutsche Hockeyzeitung ist Ihr kompetenter Partner für Ihren Auftritt im Hockeymarkt. Sie ist die einzige bundesweite Hockeyzeitung ...

die horen

die horen

Zeitschrift für Literatur, Kunst und Kritik."...weil sie mit großer Aufmerksamkeit die internationale Literatur beobachtet und vorstellt; weil sie in der deutschen Literatur nicht nur das Neueste ...

dima

dima

Bau und Einsatz von Werkzeugmaschinen für spangebende und spanlose sowie abtragende und umformende Fertigungsverfahren. dima - die maschine - bietet als Fachzeitschrift die Kommunikationsplattform ...

building & automation

building & automation

Das Fachmagazin building & automation bietet dem Elektrohandwerker und Elektroplaner eine umfassende Übersicht über alle Produktneuheiten aus der Gebäudeautomation, der Installationstechnik, dem ...