Spring Data Jpa

Spring Data Jpa

Parsa


برای استفاده از Spring data jpa ابتدا باید Bean های مورد نیاز رو کانفیگ کنیم .

دوتا Bean لازم داریم; یکی entityManagerFactory و دیگری transactionManager .

برای تامین entityManagerFactory از کلاس LocalContainerEntityManagerFactoryBean استفاده میکنیم, این bean نیاز به سه تا پارامتر داره :

1-باید property های jpa رو بهش بدیم مثلا show_sql و format_sql

2- باید dataSource رو بهش بدیم که اینجا این رو هم بعنوان یک bean تعریف میکنیم

3-باید jpaVendor رو مشخص کنیم . یعنی provider jpa که در مثال ما hibernate هست


@Configuration
@EnableJpaRepositories("com.example.dao")
@EnableTransactionManagement

public class JpaConfig {

   
 @Bean
    public DataSource dataSource(){
        SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
        try {
            dataSource.setDriver(new Driver());
            dataSource.setUrl("jdbc:mysql://localhost:3306/spring_data_sample");
            dataSource.setPassword("");

            dataSource.setUsername("root");

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return dataSource;
    }

    private Properties jpaProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.hbm2ddl.auto","update");
        properties.setProperty("hibernate.show_sql","true");
        properties.setProperty("hibernate.format_sql","true");
        properties.setProperty("hibernate.dialect","org.hibernate.dialect.MySQL8Dialect");
        return properties;
    }



    @Bean
   public LocalContainerEntityManagerFactoryBean entityManagerFactory(@Autowired DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        localContainerEntityManagerFactoryBean.setDataSource(dataSource);
        localContainerEntityManagerFactoryBean.setPackagesToScan("com.example.model");
        localContainerEntityManagerFactoryBean.setJpaProperties(jpaProperties());
                localContainerEntityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
        return localContainerEntityManagerFactoryBean;
    }



    @Bean
   public PlatformTransactionManager transactionManager(){
JpaTransactionManager platformTransactionManager = new JpaTransactionManager();
return platformTransactionManager;
    }


حالا همه چیز آماده ست . کافیه یک اینترفیس بسازیم و بعد از Repository ارث بری داشته باشیم:


public interface MemberDao3 extends Repository<Member,Long> {
}


بعد میتونیم query method های خودمون رو اضافه کنیم به هر نحوی که میخوایم . Spring data خودش میاد query ها رو برای ما ایجاد میکنه و حتی به return type ای که برای query method میذاریم احترام میذاره و معمولا اونو برمیگردونه :


public interface MemberDao3 extends Repository<Member,Long> {
//query method
void save(Member mem);
}

میتونیم چنین return type ای داشته باشیم :

public interface MemberDao3 extends Repository<Member,Long> {
// query method with return type
Member save(Member mem);
}


البته میتونیم از اینترفیس هایی که دارن Repository رو پیاده سازی میکنن استفاده کنیم. مثلا CrudRepository متد save و .. مورد نیاز ما رو دارن.


public interface MemberDao3 extends CrudRepository<Member,Long> {

}


حتی میتونیم CustomRepository تعریف کنیم که توی گیت براتون گذاشتم و لینک گیت رو اخرش قرار میدم


کلاس Member:

package com.example.model;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.*;

@Table
@Entity
@Setter
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor

@Getter
public class Member {
    @Id
    @GeneratedValue
    private long id;
    @NonNull
    private String name;
}


اینم از main :


import com.example.conf.Config;
import com.example.model.Member;
import com.example.dao.MemberDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args) {
          ApplicationContext ctx=new AnnotationConfigApplicationContext(Config.class);
    MemberDao mem= ctx.getBean(MemberDao.class);
    mem.save(new Member("Amir"));

    }
}


لینک پروژه در گیت هاب

Report Page