簡體   English   中英

Spring Social Twitter將數據保存到MySQL

[英]Spring Social Twitter Save Data to MySQL

我正在嘗試從針對TwitterAPI發出的請求中保存一些數據。 我知道,我必須在UpdateTweetsService類中設置所需的對象,但是現在我知道如何解析它們。 這是我到目前為止的內容:

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;
    }   

}

您可以使用Spring Data JPA保存您的實體。 使用Spring Boot設置數據庫非常容易。

您可以在我的Github存儲庫中簽出代碼,為此我對其進行了更新。 我使用過PostgreSql ,您可以按照以下步驟通過更新pom.xmlapplication.properties文件輕松地將其更改為MySql

您需要執行以下步驟:

  1. 在pom.xml中添加spring-boot-starter-data-jpamysql依賴項

     ..... <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設置數據庫config / 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. 創建一個已經完成的Entity類TweetEntity ,但是將其從Tweet重命名為其他名稱,以避免Tweet.classorg.springframework.social.twitter.api.Tweet.class之間的混淆

  4. 為您的實體創建Spring Data JPA Repositories接口。

     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上findOne(Long Id) ,您便已經實現了幾種方法(例如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"; } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM