我正在尝试从针对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,您可以按照以下步骤通过更新MySqlpom.xml文件轻松地将其更改为application.properties

您需要执行以下步骤:


在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>

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

创建一个已经完成的Entity类TweetEntity,但是将其从Tweet重命名为其他名称,以避免在Tweet.classorg.springframework.social.twitter.api.Tweet.class之间产生混淆。
为您的实体创建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)等)。
让SpringBoot知道您的存储库软件包,即启用Jparepositories。

@SpringBootApplication
@EnableJpaRepositories("com.rawsanj.tweet.repository")
public class Application {
....
..

最后更新您的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";
    }
}

09-30 18:11
查看更多