1.5创建数据服务

1.5.1创建数据对象

在前面的例子中,我们了解了如何去连接数据库和配置连接数据需要的信息。在这节中,我们将会创建几个数据对象并且实现CrudRepository的接口实现对数据的操作,如添加、删除等。我人将会创建这几个对象:Book、Author、Reviewer和Publisher.代码如下:

1.创建Book对象,Book可以有多个Author和 Reviewer。当然,Reviewer也可以有多个Book.所以注意下面代码的@ManyToOne和@ManyToMany的使用。

@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
private String isbn;
private String title;
private String description;
@ManyToOne
private Author author;
@ManyToOne
private Publisher publisher;
@ManyToMany
private List<Reviewers> reviewers;
protected Book() {}
public Book(String isbn, String title, Author author, Publisher
publisher) {
this.isbn= isbn;
this.title = title;
this.author= author;
this.publisher= publisher;
}

//getXXsetXX的方法
}

 

2.接着我们来创建Author的对象,Author与Book的关系是OneToMany。

 @Entity
public class Author {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
@OneToMany(mappedBy = "author")
private List<Book> books;
protected Author() {}
public Author(String firstName, String lastName) {...}
//getXXsetXX的方法
}

 

3.与Author相似,我们创建一个Publisher对象。

 @Entity
public class Publisher {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "publisher")
private List<Book> books;
protected Publisher() {}
public Publisher(String name) {...}
}

@Entity
public class Reviewer {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
protected Reviewer() {}
public Reviewer(String firstName, String lastName) {
//getXXsetXX的方法
}
}

 

4.现在我们创建BookReposity,此类实现CrudRepository的接口。代码如下:

 @Repository
public interface BookRepository extends CrudRepository<Book, Long> {
public Book findBookByIsbn(String isbn);
}

 

5.最后,我们来修改StarupRunner的类,为了是调用BookRepository和打印a.count()方法,将书的数量输出到控制台。代码修改好了如下:

 public class StartupRunner implements CommandLineRunner {
@Autowired
private BookRepository bookRepository;
public void run(String… args) throws Exception {
logger.info("Number of books: " + bookRepository.count());
}
}

 

1.5.2代码说明

  从上面的例子中,我们也看到了,笔者并没有创建任务的数据库表或写SQL语句。笔者仅仅是在代码中加入这些注释:@Entity,@Repository,@Id,@GeneratedValue,@ManyToOne和@OneToMany。这些注释是java持久API的一部分。接着我们使用CrudRepository的接口实现对数据对象操作时,Spring就会去映射我们的表和数据作用域并且提供了能力去操作数据。

让我们来看一来具体这几个注释的作用:

  1. @Entity声明注释的类需要映射到数据库表中。数据库表名与类的名称是一样,当然你也可以通过配置指定数据库表名。需要注意的是,每个类都要有一个protected的构造函数,这样可以自动的实例和Hibernate的作用。
  2. @Repository声明这个接口可以对数据库的表(代码是对象)进行操作。这个标签的注释也代表是Spring会去扫描并作为bean进行管理。
  3. CrudRepository接口声明基础的方法对数据库的增删改查的操作。而笔者在BookRepository中扩展了public Book findBookByIsbn(String isbn)的方法,这个方法也就是在执行SQL时只查询对应的isbn的符合条件。除此之外,这个注释还有更为强大的功能,如它还有个方法findByNameIgnoringCase(String name) 等。
  4. @Id和@GeneratedVaue注释是声明表的主键和主键是整型的。
  5. @ManyToOne、ManyToMany和OneTomany,这几个标签,相信使用过Hibernate的读者应该很清楚它的作用,即使没有学习Hibernate的读者通过名称也应该知道它的作用了。这里笔者就不作说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值