Spring ile Java Persistence API kullanımı
Merhaba arkadaşlar,
spring ile hibernate kütüphanesi kullanarak JPA örneği yapacağız. Projeyi maven’da açıyoruz ve gerekli olan kütüphanelerimizi ekliyoruz.
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com</groupId> <artifactId>SpringJpaMaven</artifactId> <version>0.0.1-SNAPSHOT</version> <name>turkishh</name> <packaging>jar</packaging> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>1.7.1.RELEASE</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.2.0.Final</version> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.4-1200-jdbc4</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.8</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.1.RELEASE</version> </dependency> </dependencies> <build> <finalName>SpringJpaMaven</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> </project> |
Şimdi ise entity sınıfımızı yazalım .
Customer.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
package io.bilisim.entities; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * * @author mehmetkilic */ @Entity public class Customer { @Id @GeneratedValue private Long id; private String name; private String surname; public Customer() { } public Customer(String name, String surname) { this.name = name; this.surname = surname; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } @Override public String toString() { return "Customer [id=" + id + ", name=" + name + ", surname=" + surname + "]"; } } |
Database işlemlerini yapacağımız sınıfı yazalım ve CrudRepository sınıfından extends edelim . CrudRepository sınıfı generic bir sınıftır oluştururken iki tane parametre alır bizden hangi sınıfın repository’si olduğunu belirtmemiz lazım . CrudRepository’de create , update , delete ve select db işlemleri kalıtımdan sonr aotomatik olarak elimize geçer . Eskiden generic bir sınıf yazardık bununla uğraşmamamız için Spring bize kolaylık sağlamış.
CustomerDao.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com.turkishh.dao; import java.util.List; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; import io.bilisim.entities.Customer; /** * * @author mehmetkilic */ @Repository public interface CustomerDao extends CrudRepository<Customer, Long> { public List<Customer> findBySurname(String surname); } |
Şimdi ise resource/META-INF dizininin altına persistence.xml dosyamızı yazıyoruz.
persistence.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> //unitName burada tanımlıyoruz ve birazdan // applicationContext.xml dosyamızda datasource tanımlayarak // instance oluşturacağız. <persistence-unit name="jpaDatam" > //Burada ise entity'lerimizi listeliyoruz <class>io.bilisim.entities.Customer</class> </persistence-unit> </persistence> |
Gelelim applicationcontext.xml dosyamızda konfigurasyonlarımızı yazmaya , resource/ dizininin altına oluşturalım.
applicationContext.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:security="http://www.springframework.org/schema/security" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd"> <!-- @Repository notasyonunu kullanmıştık onu scan ediyoruz--> <jpa:repositories base-package="io.bilisim.dao" /> // datasource oluşturuyoruz burada <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>org.postgresql.Driver</value> </property> <property name="url"> <value>jdbc:postgresql://localhost:5432/postgres</value> </property> <property name="username"> <value>postgres</value> </property> <property name="password"> <value>root</value> </property> </bean> // EntityManagerFactory burada instance ediyoruz <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> // persistence.xml dosyamızdaki unitName buradan geliyor.("jpaDatam") <property name="persistenceUnitName" value="jpaDatam" /> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> </property> <property name="jpaProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> <prop key="hibernate.show_sql">false</prop> <prop key="hibernate.format_sql">false</prop> // bu parametreyi NONE'a çekmezseniz her defasında // tabloları drop edip tekrar oluştururuz. <prop key="hibernate.hbm2ddl.auto">create</prop> </props> </property> </bean> //TransactionManager instance ettiğimiz tag burasıdır. <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> </beans> |
ve gelelim test etmeye sınıfımızı yazalım .
TestJpaSpring.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
package io.bilisim.test; import java.util.List; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.turkishh.dao.CustomerDao; import com.turkishh.entities.Customer; public class TestjpaSpring{ public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml"); CustomerDao dao = context.getBean(CustomerDao.class); Customer turkishh = new Customer("turkishh", "www.turkishh.com"); Customer mehmet = new Customer("Mehmet", "KILIÇ"); //insert işlemi yapılıyor dao.save(turkishh); dao.save(mehmet); //ekleme sayısı System.out.println("Eklenen kişi sayısı : " + dao.count()); //customer tablosuna select atıyoruz ve loop'ta yazdırıyoruz List<Customer> custos = (List<Customer>) dao.findAll(); for (Customer custo : custos) { System.out.println(custo); } // update işlemi gerçekleştiriyoruz mehmet.setName("Mehmet"); mehmet.setSurname("KILIÇ1"); dao.save(mehmet); System.out.println(mehmet.getName() + " isimli çalışan güncellenmiştir"); //Sil 2. kayıtı dao.delete(2L); System.out.println("Bir kayıt silinmiştir."); //Enson kalan Customer sayısı System.out.println("Enson kalan Customer sayısı : "+dao.count()); context.close(); } } |
Çıktısı :