SpringBoot使用Spring-Data-Jpa實現(xiàn)CRUD操作
本文演示了SpringBoot下,實用Spring-Data-Jpa來實現(xiàn)CRUD操作,視圖層采用Freemarker
這里我們先把application.properties修改成application.yml 主流格式
內(nèi)容也改成yml規(guī)范格式:
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改成/方便開發(fā)應(yīng)用
先寫一個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>{
}
要求實現(xiàn)JpaRepository,JpaRepository是繼承PagingAndSortingRepository,PagingAndSortingRepository是繼承CrudRepository。CrudRepository實現(xiàn)了實體增刪改查操作
/*
* 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";
}
}
實現(xiàn)了 CRUD
這里的@GetMapping(value="xxx") 類似 @RequestMapping(value="xxx",method=RequestMethod.GET)
以及@PostMapping(value="xxx") 類似 @RequestMapping(value="xxx",method=RequestMethod.POST)
bookList.ftl 展示數(shù)據(jù)
<!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
進入:

點擊 “添加圖書”:
進入:

我們隨便輸入名稱,點擊“提交”,

選擇剛才添加的測試圖書,進行修改

轉(zhuǎn)發(fā)執(zhí)行到列表頁面,然后點“修改”,

進入修改頁面,修改下名稱,點擊“提交”,
選擇測試圖書,進行刪除操作

再次轉(zhuǎn)發(fā)到列表頁面,我們點擊“刪除”,

刪掉數(shù)據(jù)后,再次轉(zhuǎn)發(fā)到列表頁面;
OK完成!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解JAVA中implement和extends的區(qū)別
這篇文章主要介紹了詳解JAVA中implement和extends的區(qū)別的相關(guān)資料,extends是繼承接口,implement是一個類實現(xiàn)一個接口的關(guān)鍵字,需要的朋友可以參考下2017-08-08
SpringBoot使用@Cacheable注解實現(xiàn)緩存功能流程詳解
最近一直再學(xué)Spring Boot,在學(xué)習(xí)的過程中也有過很多疑問。為了解答自己的疑惑,也在網(wǎng)上查了一些資料,以下是對@Cacheable注解的一些理解2023-01-01
Java?MyBatis傳出參數(shù)resultType和resultMap解讀
這篇文章主要介紹了Java?MyBatis傳出參數(shù)resultType和resultMap解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
Apache Shrio安全框架實現(xiàn)原理及實例詳解
這篇文章主要介紹了Apache Shrio安全框架實現(xiàn)原理及實例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
Java線程和操作系統(tǒng)線程的關(guān)系解讀
這篇文章主要介紹了Java線程和操作系統(tǒng)線程的關(guān)系解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06

