SpringBoot 는 Spring-Data-Jpa 를 사용 하여 CRUD 작업 을 실현 합 니 다.

본 고 는 SpringBoot 에서 Spring-Data-Jpa 를 사용 하여 CRUD 작업 을 실현 하고 보기 층 은 Freemarker 를 사용 하 는 것 을 보 여 주 었 다.
여기 서 우 리 는 먼저 application.properties 를 application.yml 주류 형식 으로 수정 합 니 다.
내용 도 yml 규범 형식 으로 변경:

server:
 port: 8888
 context-path: /
 
helloWorld: spring Boot\u4F60\u597D
 
msyql:
 jdbcName: com.mysql.jdbc.Driver
 dbUrl: jdbc:mysql://localhost:3306/db_diary
 userName: root
 password: 123456
 
spring:
 datasource:
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/db_book
  username: root
  password: passwd
 jpa:
  hibernate.ddl-auto: update
  show-sql: true
yml 형식 에 주의 점 이 있 습 니 다.
그리고 저희 가 context-path 를 개발 용 으로 바 꾸 었 습 니 다.
Bookdao 인 터 페 이 스 를 먼저 쓰 겠 습 니 다.

package com.hik.dao;

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

import com.hik.entity.Book;

/**
 *   Dao  
 * @author jed
 *
 */
public interface BookDao extends JpaRepository<Book, Integer>{

}
JpaRepository 실현 을 요구 합 니 다.JpaRepository 는 Paging AndSorting Repository 를 계승 하 는 것 이 고,Paging AndSorting Repository 는 CrudRepository 를 계승 하 는 것 입 니 다.CrudRepository 는 실체 첨삭 검사 작업 을 실현 했다.

/*
 * Copyright 2008-2011 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.data.repository;

import java.io.Serializable;

/**
 * Interface for generic CRUD operations on a repository for a specific type.
 * 
 * @author Oliver Gierke
 * @author Eberhard Wolff
 */
@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {

 /**
  * Saves a given entity. Use the returned instance for further operations as the save operation might have changed the
  * entity instance completely.
  * 
  * @param entity
  * @return the saved entity
  */
 <S extends T> S save(S entity);

 /**
  * Saves all given entities.
  * 
  * @param entities
  * @return the saved entities
  * @throws IllegalArgumentException in case the given entity is {@literal null}.
  */
 <S extends T> Iterable<S> save(Iterable<S> entities);

 /**
  * Retrieves an entity by its id.
  * 
  * @param id must not be {@literal null}.
  * @return the entity with the given id or {@literal null} if none found
  * @throws IllegalArgumentException if {@code id} is {@literal null}
  */
 T findOne(ID id);

 /**
  * Returns whether an entity with the given id exists.
  * 
  * @param id must not be {@literal null}.
  * @return true if an entity with the given id exists, {@literal false} otherwise
  * @throws IllegalArgumentException if {@code id} is {@literal null}
  */
 boolean exists(ID id);

 /**
  * Returns all instances of the type.
  * 
  * @return all entities
  */
 Iterable<T> findAll();

 /**
  * Returns all instances of the type with the given IDs.
  * 
  * @param ids
  * @return
  */
 Iterable<T> findAll(Iterable<ID> ids);

 /**
  * Returns the number of entities available.
  * 
  * @return the number of entities
  */
 long count();

 /**
  * Deletes the entity with the given id.
  * 
  * @param id must not be {@literal null}.
  * @throws IllegalArgumentException in case the given {@code id} is {@literal null}
  */
 void delete(ID id);

 /**
  * Deletes a given entity.
  * 
  * @param entity
  * @throws IllegalArgumentException in case the given entity is {@literal null}.
  */
 void delete(T entity);

 /**
  * Deletes the given entities.
  * 
  * @param entities
  * @throws IllegalArgumentException in case the given {@link Iterable} is {@literal null}.
  */
 void delete(Iterable<? extends T> entities);

 /**
  * Deletes all entities managed by the repository.
  */
 void deleteAll();
}
BookController 클래스 를 하나 더 쓰 겠 습 니 다.

package com.hik.Controller;

import javax.annotation.Resource;

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.servlet.ModelAndView;

import com.hik.dao.BookDao;
import com.hik.entity.Book;

/**
 * Book   
 * @author jed
 *
 */
@Controller
@RequestMapping("/book")
public class BookController {
 
 @Resource
 private BookDao bookDao;
 
 /**
  *       
  * @return
  */
 @RequestMapping(value="/list")
 public ModelAndView list() {
  ModelAndView mav = new ModelAndView ();
  mav.addObject("bookList", bookDao.findAll());
  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";
 }
 
 @GetMapping(value="/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";
 }
 
 /**
  *     
  * @param id
  * @return
  */
 @RequestMapping(value="/delete",method = RequestMethod.GET)
 public String delete(Integer id) {
  bookDao.delete(id);
  return "forward:/book/list";
 }
}
CRUD 가 이 루어 졌 습 니 다.
여기@GetMapping(value="xxx")이 유사 합 니 다.  @RequestMapping(value="xxx",method=RequestMethod.GET)
그리고@PostMapping(value="xxx")과 유사 합 니 다.  @RequestMapping(value="xxx",method=RequestMethod.POST)
bookList.ftl 전시 데이터

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>      </title>
</head>
<body>
<a href="/bookAdd.html" rel="external nofollow" >    </a>
 <table>
  <tr>
   <th>  </th>
   <th>    </th>
   <th>  </th>
  </tr>
  <#list bookList as book>  
  <tr>  
   <td>${book.id}</td>  
   <td>${book.bookName}</td> 
   <td>
    <a href="/book/preUpdate/${book.id}" rel="external nofollow" >  </a>
    <a href="/book/delete?id=${book.id}" rel="external nofollow" >  </a>
   </td>
  </tr> 
  </#list> 
 </table> 
</body>
</html>
bookadd.html 도서 추가 페이지

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>      </title>
</head>
<body>
<form action="book/add" method="post">
     :<input type="text" name="bookName"/><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="bookName" value="${book.bookName}"/><br/>
 <input type="submit" value="  "/>
</form>
</body>
</html>
브 라 우 저 요청:http://localhost:8888/book/list
입장:

"책 추가"를 누 르 십시오:
입장:

우 리 는 마음대로 이름 을 입력 하고"제출"을 클릭 합 니 다.

방금 추 가 된 테스트 도 서 를 선택 하여 수정 하 다.

목록 페이지 로 전송 하고"수정"을 누 르 십시오.

수정 페이지 에 들 어가 서 이름 을 수정 하고"제출"을 클릭 합 니 다.
테스트 도 서 를 선택 하여 삭제 작업 을 진행 합 니 다.

목록 페이지 로 다시 전송 합 니 다."삭제"를 누 르 면,

데 이 터 를 삭제 한 후 목록 페이지 로 다시 전송 하기;
OK,완성!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기