Spring Boot Hibernate RestFull Service PostgreSQL

Я новый пользователь Spring и хочу разработать сервис RestFull с Hibernate-PostGreSQL и Spring Boot. Я пытаюсь изучить документацию Spring, но у меня много проблем с развертыванием простого сервиса. Я не использую свойства файла XML, но класс Java.

Вот мои разные файлы:

PersistanceJPAConfig.java:

package com.spring.configuration;

import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;

@Configuration
public class PersistenceJPAConfig {
  @Bean
  public DataSource dataSource() {
    DriverManagerDataSource driver = new DriverManagerDataSource();
    driver.setDriverClassName("org.postgresql.Driver");
    driver.setUrl("jdbc:postgresql://localhost:5432/test");
    driver.setUsername("test");
    driver.setPassword("test");
    return driver;
  }

  @Bean
  public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    vendorAdapter.setDatabase(Database.POSTGRESQL);
    vendorAdapter.setGenerateDdl(true);

    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
    factory.setJpaVendorAdapter(vendorAdapter);
    factory.setPackagesToScan(getClass().getPackage().getName());
    factory.setDataSource(dataSource());

    return factory;
  }

  @Bean
  @Autowired
  public JpaTransactionManager transactionManager() {
    JpaTransactionManager txManager = new JpaTransactionManager();
    txManager.setEntityManagerFactory(entityManagerFactory().getObject());

    return txManager;
  }
}

У меня есть классическая модель, а вот хранилище:

package com.spring.persistence.repositories;

import com.spring.persistence.model.ApplicationUser;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
@Qualifier(value = "applicationUserRepository")
public interface ApplicationUserRepository extends JpaRepository<ApplicationUser,Long>{

}

Простой сервис:

package com.spring.persistence.service;

import com.spring.persistence.model.ApplicationUser;
import com.spring.persistence.repositories.ApplicationUserRepository;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
@Transactional
public class ApplicationUserService {

    private final ApplicationUserRepository applicationUserRepository;

    @Autowired
    public ApplicationUserService(ApplicationUserRepository applicationUserRepository) {
      this.applicationUserRepository = applicationUserRepository;
    }


    public ApplicationUser createUser(String username, String type, String country)
    {
        ApplicationUser user = new ApplicationUser(username,type,country);
        return applicationUserRepository.saveAndFlush(user);
    }
    public List<ApplicationUser> getAllUser()
    {
      return applicationUserRepository.findAll();
    }
    public ApplicationUser getUser(Long id)
    {
        ApplicationUser user = null;
        if(id != null)
        {
            user = applicationUserRepository.findOne(id);
        }
        return user;
    }
    public boolean deleteUser(Long id)
    {
        if(id != null)
        {
            try{
                applicationUserRepository.delete(id);
                return true;
            }
            catch(IllegalArgumentException ex)
            {
                ex.printStackTrace();
                return false;
            }
        }
        else
        {
            System.out.println("Id is null");
            return false;
        }   
    }
}

И, наконец, WebController:

@RestController
@RequestMapping(value = "/applicationuser")
public class ApplicationUserController {

    @Autowired
    private ApplicationUserService applicationUserService;

    @RequestMapping(value="/",method = RequestMethod.GET)
    @ResponseBody
    public ApplicationUser index()
    {
        return applicationUserService.createUser("test", "test", "test");

    }

}

Возможно, не хватает многих вещей (Аннотация, Инициализатор, Код), но я здесь, чтобы узнать, и любые советы могут помочь мне.

Спасибо за ваши ответы

1 ответ

Spring Data REST

Этот проект позволит вам достичь ваших целей с помощью значительно меньшего количества стандартного кода.

Следуйте руководству " Доступ к данным JPA с помощью REST", которое демонстрирует, как настроить Spring Boot + Spring Data REST с абсолютно минимальной конфигурацией.

Если у вас есть базовые знания, вы можете добавить больше функциональности, чтобы соответствовать требованиям вашего бизнеса.

Подробная информация представлена ​​в документации REST Spring Data.

Другие вопросы по тегам