1.5.1创建数据对象
在前面的例子中,我们了解了如何去连接数据库和配置连接数据需要的信息。在这节中,我们将会创建几个数据对象并且实现CrudRepository的接口实现对数据的操作,如添加、删除等。我人将会创建这几个对象:Book、Author、Reviewer和Publisher.代码如下:
1.创建Book对象,Book可以有多个Author和 Reviewer。当然,Reviewer也可以有多个Book.所以注意下面代码的@ManyToOne和@ManyToMany的使用。
@Entity //getXX和setXX的方法 |
2.接着我们来创建Author的对象,Author与Book的关系是OneToMany。
@Entity |
3.与Author相似,我们创建一个Publisher对象。
@Entity @Entity |
4.现在我们创建BookReposity,此类实现CrudRepository的接口。代码如下:
@Repository |
5.最后,我们来修改StarupRunner的类,为了是调用BookRepository和打印a.count()方法,将书的数量输出到控制台。代码修改好了如下:
public class StartupRunner implements CommandLineRunner { |
1.5.2代码说明
从上面的例子中,我们也看到了,笔者并没有创建任务的数据库表或写SQL语句。笔者仅仅是在代码中加入这些注释:@Entity,@Repository,@Id,@GeneratedValue,@ManyToOne和@OneToMany。这些注释是java持久API的一部分。接着我们使用CrudRepository的接口实现对数据对象操作时,Spring就会去映射我们的表和数据作用域并且提供了能力去操作数据。
让我们来看一来具体这几个注释的作用:
- @Entity声明注释的类需要映射到数据库表中。数据库表名与类的名称是一样,当然你也可以通过配置指定数据库表名。需要注意的是,每个类都要有一个protected的构造函数,这样可以自动的实例和Hibernate的作用。
- @Repository声明这个接口可以对数据库的表(代码是对象)进行操作。这个标签的注释也代表是Spring会去扫描并作为bean进行管理。
- CrudRepository接口声明基础的方法对数据库的增删改查的操作。而笔者在BookRepository中扩展了public Book findBookByIsbn(String isbn)的方法,这个方法也就是在执行SQL时只查询对应的isbn的符合条件。除此之外,这个注释还有更为强大的功能,如它还有个方法findByNameIgnoringCase(String name) 等。
- @Id和@GeneratedVaue注释是声明表的主键和主键是整型的。
- @ManyToOne、ManyToMany和OneTomany,这几个标签,相信使用过Hibernate的读者应该很清楚它的作用,即使没有学习Hibernate的读者通过名称也应该知道它的作用了。这里笔者就不作说明。