【问题标题】:Spring Social Twitter Save Data to MySQLSpring Social Twitter 将数据保存到 MySQL
【发布时间】:2016-05-18 05:50:49
【问题描述】:

我正在尝试保存我针对 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;
    }   

}

【问题讨论】:

    标签: java mysql twitter spring-data-jpa spring-social-twitter


    【解决方案1】:

    您可以使用 Spring Data JPA 来保存您的实体。使用 Spring Boot 设置数据库非常容易。

    你可以在我的Github repo 中查看代码,我为此更新了它。我使用了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 中设置数据库配置/属性

      .....
      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.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 上定义,您就会得到几个已经实现的方法(如 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";
          }
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-19
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2014-05-01
      • 2017-08-19
      • 1970-01-01
      相关资源
      最近更新 更多