Spring Boot学习之整合JPA实现CRUD

1、什么是JPA?

JPA全称Java Persistence API,是一组用于将数据存入数据库的类和方法的集合。JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
2、JPA与Hibernate之间的关系

JPA是一种规范,旨在规范、简化Java对象的持久化工作。 JPA是开源API,各企业经营商Oracle, Redhat, Eclipse等,提供各种有特色的JPA产品,其中包括: Hiberate, Eclipselink, Toplink, Spring Data JPA等等。Hibernate就是JPA Provider中很强的一个。JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。
3、结合JPA实现增删改查

下面以图书管理实现增删改查,新建book对象

@Entity
@Table(name="t_book")
public class Book {

	@Id
	@GeneratedValue
	private Integer bookid;
	
	@Column(length=50)
	private String bookname;
	
	@Column(length=30)
	private String author;
	
	
	public Integer getBookid() {
		return bookid;
	}
	public void setBookid(Integer bookid) {
		this.bookid = bookid;
	}
	public String getBookname() {
		return bookname;
	}
	public void setBookname(String bookname) {
		this.bookname = bookname;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	
	
}
public interface BookDao extends JpaRepository<Book, Integer>,JpaSpecificationExecutor<Book>{


}
BookController

@Controller
@RequestMapping("/book")
public class BookController {


	@Resource
	private BookDao bookDao;
	
	@RequestMapping("/booklist")
	public ModelAndView bookList() {
		ModelAndView model = new ModelAndView();
		model.addObject("booklist",bookDao.findAll());
		model.setViewName("booklist");
		return model; 
	}
	
	/**
	 * 带条件的动态查询
	 * @return
	 */
	@RequestMapping("/listDynamicQuery")
	public ModelAndView listDynamicQuery(Book book) {
		ModelAndView model = new ModelAndView();
		bookDao.findAll(new Specification<Book>() {
			@Override
			public Predicate toPredicate(Root<Book> root, CriteriaQuery<?> query,CriteriaBuilder cb) {
				Predicate predicate = cb.conjunction();
				if (book!=null) {
					if (book.getBookname()!=null&&!"".equals(book.getBookname())) {
						predicate.getExpressions().add(cb.like(root.get("bookname"), "%"+book.getBookname()+"%"));
					}
					if (book.getAuthor()!=null&&!"".equals(book.getAuthor())) {
						predicate.getExpressions().add(cb.like(root.get("author"), "%"+book.getAuthor()+"%"));
					}
				}
				
				return null;
			}
		});
		model.addObject("booklist",bookDao.findAll());
		model.setViewName("booklist");
		return model;
	}
	
	@Transactional
	@RequestMapping(value="/addbook",method=RequestMethod.POST)
	public String addBook(Book book) {
		bookDao.save(book);
		return "forward:/book/booklist";
	}
	
	@RequestMapping("/preUpdate/{bookid}")
	public ModelAndView preUpdate(@PathVariable("bookid") Integer bookid) {
		ModelAndView model = new ModelAndView();
		model.addObject("book", bookDao.getOne(bookid));
		model.setViewName("bookupdate");
		return model;
	}
	
	@PostMapping(value="/updatebook")
	public String updateBook(Book book) {
		bookDao.save(book);
		return "forward:/book/booklist";
	}
	
	@GetMapping("/delbook")
	public String delBook(Integer bookid) {
		bookDao.delete(bookid);
		return "forward:/book/booklist";
	}
	
	
}
application.yml配置文件

server:
    port: 80
    context-path: /


spring:
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root    
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true   
booklist.ftl

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书管理</title>
</head>
<body>
<a href="/addbook.html">新增</a><br/>
	<form method="post" action="/book/listDynamicQuery">
		图书名称:<input type="text" name="bookname"/><br/>
		图书作者:<input type="text" name="bookname"/><br/>
		<input type="submint" value="查询"/>
	</form>
	<table>
		<tr>
			<th>序号</th>
			<th>图书名称</th>
			<th>图书作者</th>
			<th>操作</th>
			
		</tr>
		<#list booklist as book>
		<tr>
			<td>${book.bookid}</td>
			<td>${book.bookname}</td>
			<td>${book.author}</td>
			<td>
				<a href="/book/preUpdate?${book.bookid}">修改</a>
				<a href="/book/delbook?${book.bookid}">删除</a>
			</td>
		
		</tr>
		</#list>
	</table>
</body>
</html>
新增书籍页面 addbook.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>新增书籍</title>
</head>
<body>

	<form action="/book/addbook" method="post">
		图书名称:<input type="text" name="bookname"/><br/>
		图书作者:<input type="text" name="author"/><br/>
		<input type="submit" value="保存"/>
	</form>

</body>
</html>
编辑书籍页面 bookupdate.ftl

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>新增书籍</title>
</head>
<body>

	<form action="book/addbook" method="post">
		<input type="hidden" name="bookid" value="${book.bookid}"/>
		图书名称:<input type="text" name="bookname"/><br/>
		图书作者:<input type="text" name="author"/><br/>
		<input type="submit" value="保存"/>
	</form>

</body>
</html>














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值