欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Data jpa 基本crud操作

程序员文章站 2022-05-01 23:15:02
...

实体类

@Entity 实体表

@Id 主键 @GeneratedValue自增


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

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

	@Id
	@GeneratedValue
	private Integer id;
	
	@Column(length=100)
	private String name;
	
	@Column(length=50)
	private String author;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	
	
}

application.yml 

yml格式配置数据源

ddl-auto 自动更新

server: 
    port: 80
    context-path: /

spring: 
    datasource: 
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/db_book
      username: root
      password: 123456
    jpa: 
      hibernate:
        ddl-auto: update
      show-sql: true

spring jpa接口

实现JpaRepository 参数book泛型和主键的数据类型

@Query 自定义查询

nativeQuery 本地查询随机查询

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

public interface BookDao extends JpaRepository<Book, Integer>,JpaSpecificationExecutor<Book>{

	@Query("select b from Book b where b.name like %?1%")
	public List<Book> findByName(String name);
	
	@Query(value="select * from t_book order by RAND() limit ?1",nativeQuery=true)
	public List<Book> randomList(Integer n);
	
}

直接注入BookDao 

findAll为jpa内部封装的方法

@PostMapping指定了为post方法

Specification 不确定传入参数个数类型,动态判断拼接sql 要继承JpaSpecificationExecutor接口

toPredicate方法动态拼接条件

package com.java1234.controller;

import java.util.List;

import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

/**
 * 图书控制器
 * @author Administrator
 *
 */
@Controller
@RequestMapping("/book")
public class BookController {

	@Resource
	private BookDao bookDao;
	
	/**
	 * 查询所有图书
	 * @return
	 */
	@RequestMapping("/list")
	public ModelAndView list(){
		ModelAndView mav=new ModelAndView();
		mav.addObject("bookList", bookDao.findAll());
		mav.setViewName("bookList");
		return mav;
	}
	
	/**
	 * 根据条件动态查询
	 * @param book
	 * @return
	 */
	@RequestMapping("/list2")
	public ModelAndView list2(Book book){
		ModelAndView mav=new ModelAndView();
		List<Book> bookList=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.getName()!=null && !"".equals(book.getName())){
						predicate.getExpressions().add(cb.like(root.get("name"), "%"+book.getName()+"%"));
					}
					if(book.getAuthor()!=null && !"".equals(book.getAuthor())){
						predicate.getExpressions().add(cb.like(root.get("author"), "%"+book.getAuthor()+"%"));
					}
				}
				return predicate;
			}
		});
		mav.addObject("bookList", bookList);
		mav.setViewName("bookList");
		return mav;
	}
	
	/**
	 * 添加图书
	 * @param book
	 * @return
	 */
	@RequestMapping(value="/add",method=RequestMethod.POST)
	public String add(Book book){
		bookDao.save(book);
		return "forward:/book/list";
	}
	
	/**
	 * 根据id查询book实体
	 * @param id
	 * @return
	 */
	@RequestMapping("/preUpdate/{id}")
	public ModelAndView preUpdate(@PathVariable("id")Integer id){
		ModelAndView mav=new ModelAndView();
		mav.addObject("book", bookDao.getOne(id));
		mav.setViewName("bookUpdate");
		return mav;
	}
	
	/**
	 * 修改图书
	 * @param book
	 * @return
	 */
	@PostMapping(value="/update")
	public String update(Book book){
		bookDao.save(book);
		return "forward:/book/list";
	}
	
	@GetMapping("/delete")
	public String delete(Integer id){
		bookDao.delete(id);
		return "forward:/book/list";
	}
	
	@ResponseBody
	@GetMapping("/queryByName")
	public List<Book> queryByName(){
		return bookDao.findByName("编程");
	}
	
	@ResponseBody
	@GetMapping("/randomList")
	public List<Book> randomList(){
		return bookDao.randomList(2);
	}
}

bookList.ftl

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书管理</title>
</head>
<body>
<a href="/bookAdd.html">添加</a><br/>
<form method="post" action="/book/list2">
	图书名称:<input type="text" name="name" />&nbsp;
	图书作者:<input type="text" name="author" />&nbsp;
	<input type="submit" value="搜索"/>
</form>
<table>
	<tr>
		<th>编号</th>
		<th>图书名称</th>
		<th>图书作者</th>
		<th>操作</th>
	</tr>
	<#list bookList as book>
		<tr>
			<td>${book.id}</td>
			<td>${book.name}</td>
			<td>${book.author}</td>
			<td>
				<a href="/book/preUpdate/${book.id}">修改</a>
				<a href="/book/delete?id=${book.id}">删除</a>
			</td>
		</tr>
	</#list>
</table>
</body>
</html>

bookAdd.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/book/add" method="post">
	图书名称:<input type="text" name="name"/><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/update" method="post">
	<input type="hidden" name="id" value="${book.id}"/>
	图书名称:<input type="text" name="name" value="${book.name}"/><br/>
	图书作者:<input type="text" name="author" value="${book.author}"/><br/>
	<input type="submit" value="提交"/>
</form>
</body>
</html>