本帖来演示下SpringBoot下,实用Spring-Data-Jpa来实现CRUD操作,视图层采用Freemarker

这里我们先把application.properties修改成application.yml 主流格式

内容也改成yml规范格式

server:

  port: 8888
  context-path: /
   
helloWorld: spring Boot\u5927\u7237\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: 123456
   jpa:
     hibernate.ddl-auto: update
     show-sql: true
 
 

yml格式有个注意点 冒号后面一定要加个空格

还有我们把context-path改成/方便开发应用

先写一个BookDao接口

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

 
import com.java1234.entity.Book;
 
/**
 * 图书Dao接口
 * @author user
 *
 */
public interface BookDao extends JpaRepository<Book, Integer>{
 
}
 

要求实现JpaRepository

再写一个BookController类

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.java1234.dao.BookDao;
import com.java1234.entity.Book;
 
/**
 * Book控制类
 * @author user
 *
 */
@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">添加图书</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}">修改</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>图书添加页面</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

进入:

点击 “添加图书”:

进入:

我们随便输入名称,点击“提交”,

转发执行到列表页面,然后点“修改”,

进入修改页面,修改下名称,点击“提交”,

再次转发到列表页面,我们点击“删除”,

删掉数据后,再次转发到列表页面;

1-5SpringBoot操作之Spring-Data-Jpa(二)CRUD实现的更多相关文章

  1. <Spring Data JPA>二 Spring Data Jpa

    1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  2. Spring Data Jpa (二)JPA基础查询

    介绍Spring Data Common里面的公用基本方法 (1)Spring Data Common的Repository Repository位于Spring Data Common的lib里面, ...

  3. Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作

    只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 构建了第一个Spring Boot项目. Spring Boot连接MySQL数据库 连接了MySQL数据库. 本文在之前 ...

  4. SpringBoot入门:Spring Data JPA 和 JPA(理论)

    参考链接: Spring Data JPA - Reference Documentation Spring Data JPA--参考文档 中文版 纯洁的微笑:http://www.ityouknow ...

  5. SpringBoot总结之Spring Data Jpa

    一.Spring Data Jpa简介 JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate.TopLink等. Spring D ...

  6. Springboot 系列(十)使用 Spring data jpa 访问数据库

    前言 Springboot data jpa 和 Spring jdbc 同属于 Spring开源组织,在 Spring jdbc 之后又开发了持久层框架,很明显 Spring data jpa 相对 ...

  7. 【Spring】Spring Data JPA

    原始JDBC操作数据库 传统JDBC方式实现数据库操作 package com.imooc.util; import java.io.InputStream; import java.sql.*; i ...

  8. spring boot学习(4) SpringBoot 之Spring Data Jpa 支持(1)

    第一节:Spring Data Jpa 简介 Spring-Data-Jpa JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate ...

  9. Spring Data JPA 和MyBatis比较

    现在Dao持久层的解决方案中,大部分是采用Spring Data JPA或MyBatis解决方案,并且传统企业多用前者,互联网企业多用后者. Spring Data JPA 是Spring Data ...

  10. SpringBoot整合持久层技术--(三)Spring Data JPA

    简介: JPA(java Persistence API)和SpringData是两个范畴的概念.spring data jpa是spring公司下的spring data项目的一个模块. sprin ...

随机推荐

  1. 使用Vue时localhost:8080中localhost换成ip地址后无法显示页面的问题

    解决办法是:在package.json中 然后重新启动服务器 npm run dev 就正常显示了.

  2. 高级T-SQL进阶系列 (一)【下篇】:使用 CROSS JOIN 介绍高级T-SQL

    [译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 性能考虑产生了笛卡尔积的这个CROSS JOIN操作符具有一些性能方面的问题需要考虑.因为SQL引擎需要将一个数 ...

  3. Java并发编程(四):并发容器(转)

    解决并发情况下的容器线程安全问题的.给多线程环境准备一个线程安全的容器对象. 线程安全的容器对象: Vector, Hashtable.线程安全容器对象,都是使用 synchronized 方法实现的 ...

  4. Lesson 16 The modern city

    What is the author's main argument about the modern city? In the organization of industrial life the ...

  5. selenium webdriver 截屏

    /**截图 * @param driver * @param name */ public static void takeScreenShot(WebDriver driver,String nam ...

  6. VUE学习笔记二

    package.json不可以写注释!!!!!!!!!!初始化:npm init -y 有时候使用 npm i node-sass -D 装不上,这时候,就必须使用  cnpm i node-sass ...

  7. LUA拾翠

    一.函数 1.格式 optional_function_scope function function_name( argument1, argument2, argument3..., argume ...

  8. c++子类父类关系(翁恺c++公开课[15-16]学习笔记)

    关于类的继承有三种:public继承.private继承.protected继承 首先说明,关于类的成员变量.函数的权限有三种(public.private.protected) 我们通常会让所有的成 ...

  9. c语言中“#if 0 / #if 1 ... #endif”的作用

    原帖地址:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=2028608&bbs_page_no=1005&bbs_id=9999 1. ...

  10. Linux CentOS7 VMware LAMP架构Apache用户认证、域名跳转、Apache访问日志

    一.Apache用户认证 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把111.com那个虚拟主机编辑成如下内容 <Virtu ...