SpringBoot从安装到实战(五)图书管理系统-利用Spring Data自动建表
前言
SpringBoot从安装到实战(四)用图书管理系统来小试牛刀–前置工作
在上一篇文章中,我们已经做好了相关的前置准备工作,现在让我们来开始建表吧!
相信很多读者在以往的项目开发中,对于建表这一环节是十分苦恼,不过幸运的是,spring data 内置了hibernate的相关依赖,让我们可以像创建类文件一样创建数据库表。同时,spring data还能帮我们自动完成对增删改查的实现,大大节约了开发成本。
废话不多说,让我们立刻开始开发吧!
创建实体类
在zyd.entity包下创建一个名为Book的bean类
**
* <p>
* Title: Book
* </p>
* <p>
* Description: 书本实体类
* </p>
* @author zyd
* <p>
* 创建日期:2020年4月11日
* </p>
*/
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String bookName;
private String author;
private long quantity;
public Book() {}
public Book(String bookName,String author,long quantity) {
setBookName(bookName);
setAuthor(author);
setQuantity(quantity);
}
public String getBookName() {
return bookName;
}
//...省略setter
//...省略getter
细心的读者会发现,这个book类出现了有一些新的注释
注释解释
注释 | 作用 |
---|---|
@Entity | 表明这个类是一个实体类,将会自动按照类名创建数据库表 |
@Id | 标明实体类的主键 |
@GeneratedValue(strategy = GenerationType.AUTO) | 标明主键生成策略为自增(AUTO) |
运行项目
创建完成后让我们来运行一下项目
就会发现hibernate已经自动为我们创建好相应的数据库表啦!
创建Dao接口
成功创建数据库表后,我们还得去实现数据库表的增删改查
在zyd.dao包内创建一个名为BookDao的接口
import org.springframework.data.jpa.repository.JpaRepository;
import zyd.entity.Book;
/**
* <p>
* Title: BookDao
* </p>
* <p>
* Description: 书本实体类Dao
* </p>
* @author zyd
* <p>
* 创建日期:2020年4月11日
* </p>
*/
public interface BookDao extends JpaRepository<Book, Long> {
}
这样我们就实现了书本实体类的增删改查了!
读者:???
没错!这就是spring data 的魔力所在
我们仅需要创建一个接口并继承相应接口,便完成了对增删改查的支持
接口
除了文中提到的JpaRepository,还有其他的接口可以继承使用,可根据具体需求继承不同接口
CrudRepository | 自动实现单表的增删改查 |
PagingAndSortingRepository | 继承CrudRepository,同时提供分页和排序方法 |
JpaRepository | 继承PagingAndSortingRepository |
你也可以在接口里面写自定义方法,只需要按照特定语法编写函数,springdata便会根据函数名猜测你要实现的功能并自动实现
假如你想实现根据作者返回作者的所有书本,你可以这样写:
public interface BookDao extends JpaRepository<Book, Long> {
Iterable<Book>getBooksByAuthor(String author);
}
自定义jpa的语法分析
Iterable<Book>getBooksByAuthor(String author);
以这个来分析
我们将函数名分割开来
get/Books/by/Author
最前面的动词标明你要做某些事情(增删改查)
by后面表示你要根据by后面的名词来实现某个动作
在这里作者简单列出常用的操作符
- get add update delete
- And By Between OrderBy
- Equals IsNot
- IsAfter IsBefore
- IgnoringCase
- IsGreaterThan IsLessThan
- IsNull IsNotNull IsTrue IsFalse
- IsContaining IsLike IsNotLike
测试
完成接口开发后我们来测试一下接口能否正常运行
在test/java目录下创建zyd.dao包,并新建一个BookDaoTest类
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import zyd.entity.Book;
@SpringBootTest
@ExtendWith(SpringExtension.class)
public class BookDaoTest {
@Autowired
private BookDao bookDao;
@Test@Disabled
public void testAdd() {
Book book=new Book("book1","author1",50);
bookDao.save(book);
}
@Test
public void testFindAdd() {
System.out.println(bookDao.findAll().get(0).getBookName());
}
}
测试成功!
测试类注解解释
@Test | 设置一个测试方法 |
@Disabled | 禁用一个测试方法 |
本篇项目完整目录