2016-02-08 3 views
1

Я пытаюсь сохранить некоторые данные из запроса, который я сделал против TwitterAPI. Я знаю, что мне нужно установить объекты, которые я хочу в классе UpdateTweetsService, но теперь у меня есть идея, как я их разбираю. Это то, что я до сих пор:Spring Social Twitter Сохранить данные в MySQL

UpdateTweetsService.java Класс:

import javax.inject.Inject; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.social.twitter.api.Tweet; 
import org.springframework.social.twitter.api.Twitter; 
import java.util.List; 


public class UpdateTweetsService {@Value("${screenName}") 
private final Twitter twitter; 

@Inject 
public UpdateTweetsService(Twitter twitter) { 
    this.twitter = twitter; 

} 
/** 
* Performs a Request to get the UserTimeline from Twitter API 
*/ 

public List<Tweet> tweets() { 

     return twitter.timelineOperations().getUserTimeline("${screenName}");  
} 

Tweet.java Класс:

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import org.hibernate.validator.constraints.Length; 
import org.hibernate.validator.constraints.NotEmpty; 

@Entity 
@Table(name = "tweets") 
public class Tweet { 


    @Id 
    @GeneratedValue 
    @Column(columnDefinition = "INT unsigned") 
    private Integer id; 

    @NotEmpty 
    @Length(max = 255) 
    @Column(columnDefinition = "VARCHAR(255)", length = 255, nullable = false) 
    private String profileImageUrl; 

    @NotEmpty 
    @Length(max = 64) 
    @Column(columnDefinition = "VARCHAR(64)", length = 64, nullable = false) 
    private String fromUser; 

    @NotEmpty 
    @Column(columnDefinition = "TEXT", nullable = false) 
    private String text; 

    @NotEmpty 
    @Length(max = 255) 
    @Column(columnDefinition = "VARCHAR(255)", length = 255, nullable = false) 
    private String url; 

    @NotEmpty 
    @Column(columnDefinition = "FLOAT") 
    private Float createDate; 

    /* 
    * Getter & Setter 
    */ 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getProfileImageUrl() { 
     return profileImageUrl; 
    } 

    public void setProfileImageUrl(String profileImageUrl) { 
     this.profileImageUrl = profileImageUrl; 
    } 

    public String getFromUser() { 
     return fromUser; 
    } 

    public void setFromUser(String fromUser) { 
     this.fromUser = fromUser; 
    } 

    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     this.text = text; 
    } 

    public String getUrl() { 
     return url; 
    } 

    public void setUrl(String url) { 
     this.url = url; 
    } 

    public Float getCreateDate() { 
     return createDate; 
    } 

    public void setCreateDate(Float createDate) { 
     this.createDate = createDate; 
    } 

} 

ответ

0

Вы можете использовать Spring Data JPA для сохранения объектов. Его очень легко настроить вашу базу данных с помощью Spring Boot.

Вы можете проверить код в моем Github репо, я обновил его для этого. Я использовал PostgreSql, вы можете легко изменить его на MySql, обновив pom.xml и application.properties файл в соответствии с инструкциями ниже.

Вы должны следовать следующие шаги:

  1. Добавить spring-boot-starter-data-jpa и mysql зависимостей в вашем pom.xml

    ..... 
    <dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
        <groupId>mysql</groupId> 
        <artifactId>mysql-connector-java</artifactId> 
        <version>5.1.6</version> 
    </dependency> 
    
  2. Установить базу данных конфигурации/свойства в вашем application.properties

    ..... 
    spring.jpa.hibernate.ddl-auto=update 
    spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy 
    spring.jpa.show-sql=true 
    spring.jpa.database=mysql  
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
    spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect 
    spring.datasource.url=jdbc:mysql://localhost:3306/sakila 
    spring.datasource.name=sakila 
    spring.datasource.username=mysql 
    spring.datasource.password=password 
    
  3. Создание класса сущностей TweetEntity которые вы уже сделали, но переименовать его из Tweet к чему-то еще, чтобы избежать путаницы между вашим Tweet.class и org.springframework.social.twitter.api.Tweet.class

  4. Создание интерфейса Spring Data JPA Хранилища для вашей организации.

    package com.rawsanj.tweet.repository; 
    
    import org.springframework.data.jpa.repository.JpaRepository; 
    
    import com.rawsanj.tweet.entity.TweetEntity; 
    
    /** 
    * Spring Data JPA repository for the User entity. 
    */ 
    public interface TweetZRepository extends JpaRepository<TweetEntity, Long> { 
    
    } 
    

    Просто быть выше определение Spring Data Repository вы получите несколько методов (например, save(Entity entity), findOne(Long Id) и т.д.) уже выполнены.

  5. Позвольте SpringBoot узнать ваш пакет репозитория, то есть включить Jparepositories.

    @SpringBootApplication 
    @EnableJpaRepositories("com.rawsanj.tweet.repository") 
    public class Application { 
    .... 
    .. 
    
  6. И, наконец, обновить ваш Controller:

    package com.rawsanj.tweet.controller; 
    .... 
    import com.rawsanj.tweet.entity.TweetEntity; 
    import com.rawsanj.tweet.repository.TweetZRepository ; 
    
    @Controller 
    @RequestMapping("/") 
    public class HelloController { 
    
        private TwitterTemplate twitterTemplate; 
        private TweetZRepository tweetZRepository ; 
    
        @Inject 
        public HelloController(StreamService streamService, TwitterTemplate twitterTemplate, TweetZRepository tweetZRepository) { 
         this.streamService = streamService; 
         this.twitterTemplate=twitterTemplate; 
         this.tweetZRepository =tweetZRepository ; 
        } 
    
        @RequestMapping(value = "tweet/{search}/{count}",method=RequestMethod.GET) 
        public String searchTwitter(Model model, @PathVariable String search, @PathVariable int count) { 
         SearchResults results = twitterTemplate.searchOperations().search(
           new SearchParameters(search) 
            .resultType(SearchParameters.ResultType.RECENT) 
            .count(count)); 
    
         List<Tweet> tweets = results.getTweets();   
         model.addAttribute("tweets", tweets); 
    
         for (Tweet tweet : tweets) {    
          TweetEntity tweetEntity = new TweetEntity(tweet.getText(), tweet.getCreatedAt(), tweet.getFromUser(), tweet.getLanguageCode(), tweet.getLanguageCode()); 
          tweetZRepository.save(tweetEntity); 
         } 
         return "search"; 
        } 
    } 
    

 Смежные вопросы

  • Нет связанных вопросов^_^