最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot和Jpa實(shí)現(xiàn)學(xué)生CRUD操作代碼實(shí)例

 更新時(shí)間:2020年03月18日 13:20:47   作者:Dream0000  
這篇文章主要介紹了Springboot和Jpa實(shí)現(xiàn)學(xué)生CRUD操作代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前期準(zhǔn)備

使用idea新建個(gè)SpringBoot項(xiàng)目

在數(shù)據(jù)庫(kù)中建student表

建包

1.編寫entity包下實(shí)體類Student

(一個(gè)Javabean規(guī)范)

package com.example.stu.kudestu.stu.entity;

import javax.persistence.*;

@Entity
@Table(name = "student")
//@Entity 應(yīng)用在實(shí)體類上  @Table(name = "student") 應(yīng)用在實(shí)體類上,并且name屬性為數(shù)據(jù)庫(kù)表名
public class Student {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY) //ID自增
  private Integer id;
  private String name;
  private int age;
  private String sex;

  @Override
  public String toString() {
    return "Student{" +
        "id=" + id +
        ", name='" + name + '\'' +
        ", age=" + age +
        ", sex='" + sex + '\'' +
        '}';
  }

  public Student() {
  }

  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 int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public String getSex() {
    return sex;
  }

  public void setSex(String sex) {
    this.sex = sex;
  }
}

2.編寫dao層StudentDao類

package com.example.stu.kudestu.stu.dao;

import com.example.stu.kudestu.stu.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface StudentDao extends JpaRepository<Student,Integer> {
//<Student,Integer>兩個(gè)參數(shù)實(shí)體類和主鍵類型
  Student findStuById(Integer id);
 @Query(name="findStuByName",nativeQuery = true,value =
      "select * from student where name=:name ")
  List<Student> findStuByName(@Param("name") String name);
}

3.編寫service層類StudentService,面象接口

import com.example.stu.kudestu.stu.entity.Student;
import org.springframework.data.domain.Page;
import java.util.List;


public interface StudentService {
  Student save(Student student);//添加學(xué)生
  Student update(Student student);//修改
  void delete(Integer id);//通過(guò)id刪除學(xué)生
  Student findStuById(Integer id);//通過(guò)ID查找學(xué)生,接口中沒(méi)有此方法,在StudentDao接口創(chuàng)建
  List<Student> findStuByName(String name);//通過(guò)學(xué)生姓名查找,在StudentDao接口創(chuàng)建

  /**
   * 分頁(yè)查詢所有數(shù)據(jù)
   * @param page //當(dāng)前頁(yè)
   * @param pageSize //每頁(yè)記錄數(shù)
   * @return
   */
  Page<Student> findAll(int page,int pageSize);

}

在service對(duì)接口實(shí)現(xiàn)

import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StudentServiceimpl implements StudentService {

  @Autowired//用于類中的屬性注入
  private StudentDao studentDao;


  @Override
  public Student save(Student student) {
    return studentDao.save(student);
  }

  @Override
  public Student update(Student student) {
    return studentDao.save(student);
  }

  @Override
  public void delete(Integer id) {
    studentDao.deleteById(id);
  }

  @Override
  public Student findStuById(Integer id) {
    return studentDao.findStuById(id);
  }

  @Override
  public List<Student> findStuByName(String name) {
    return studentDao.findStuByName(name);
  }

  @Override
  public Page<Student> findAll(int page,int pageSize) {
    Pageable pageable= PageRequest.of(page,pageSize);
    return studentDao.findAll(pageable);

  }
}

4.編寫Controller層StudentController類

package com.example.stu.kudestu.stu.controller;

import com.example.stu.kudestu.stu.dao.StudentDao;
import com.example.stu.kudestu.stu.entity.Student;
import com.example.stu.kudestu.stu.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

@RestController 
/*應(yīng)用在Controller層的類上面
@RequestMapping("/s")
public class StudentController {

  @Autowired//依賴注入
  private StudentService studentService;

  /**
   * 添加學(xué)生
   * @param student 要添加學(xué)生對(duì)象
   * @return
   */
  @PostMapping("/add")
  /*@PostMapping
  映射一個(gè)POST請(qǐng)求

  Spring MVC新特性 
  
 提供了對(duì)Restful風(fēng)格的支持
@GetMapping,處理get請(qǐng)求 
@PostMapping,處理post請(qǐng)求 
@PutMapping,處理put請(qǐng)求 
@DeleteMapping,處理delete請(qǐng)求
*/
    
  public Student save(Student student){
    return studentService.save(student);
  }

  /**
   * 修改學(xué)生
   * @param student
   */
  @PostMapping("/update")
  public Student update(Student student){
    return studentService.save(student);
  }

  /**
   * 刪除學(xué)生
   * @param id  要?jiǎng)h除學(xué)生id
   * @return
   */
  @GetMapping("/del/{id}")
  public String del(@PathVariable int id){
    studentService.delete(id);
    return "yes";
  }

  @GetMapping("/findByName/{name}")
  public List<Student> findByName(@PathVariable String name){
  return studentService.findStuByName(name);
  }

  @GetMapping("/query")
  public Page<Student> findByPage(Integer page , HttpServletResponse response){
    response.setHeader("Access-Control-Allow-Origin","*"); //解決跨域請(qǐng)求
    if(page==null||page<=0){
      page=0;
    }else{
      page-=1;
    }
    return studentService.findAll(page,5);
  }
}

@RestController

應(yīng)用在Controller層的類上面,@RestController注解相當(dāng)于@ResponseBody + @Controller合在一起的作用,同時(shí)返回的數(shù)據(jù)為json數(shù)據(jù)

使用@Controller 注解,在對(duì)應(yīng)的方法上,視圖解析器可以解析return 的jsp,html頁(yè)面,并且跳轉(zhuǎn)到相應(yīng)頁(yè)面
若返回json等內(nèi)容到頁(yè)面,則需要加@ResponseBody注解

@PostMapping(value = "/add")等價(jià)于@RequestMapping(value = "/add",method = RequestMethod.POST)

5.利用HBuilder進(jìn)行前端編寫

Jquery.js內(nèi)容到https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js復(fù)制即可

主頁(yè)面:index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
    
    <script type="text/javascript">
      
      var page = 1;
      var tp = 0;
      
      $(function(){
        showData();
      });
      
      function upPage(){
        if(page>1){
          page--;
          showData();
        }
        
      }
      
      function downPage(){
        if(page<tp){
          page++;
          showData();
        }
        
      }
      
      function showData(){
        $.ajax({
          url:'http://localhost:8888/stu/s/query?page='+page,
          success:function(result){
            
            var rel = result.content;
            tp = result.totalPages;
            
            var htmlStr = "<table width='80%' algin='center' border='1'>"+
                  "<tr><th>ID</th><th>姓名</th><th>年齡</th><th>性別</th><th>操作</th></tr>";
            
            for(var i=0;i<rel.length;i++){
              var stu = rel[i];
              htmlStr += "<tr><td>"+stu.id+"</td><td>"+stu.name+"</td><td>"+stu.age+"</td><td>"+stu.sex+"</td>"+
              "<td><a href=''>編輯</a>&nbsp;<a href='http://localhost:8888/stu/s/del/"+stu.id+"'>刪除</a></td></tr>";
            }
            
            htmlStr += "</table>";
            
            $("#show").html(htmlStr);
          }
        });
      }
      
    </script>
    
  </head>
  <body>
    
    <h1 style="text-align: center;">學(xué)生管理系統(tǒng)</h1>
    <hr>
    <a href="add.html" rel="external nofollow" >添加學(xué)生</a>
    
    <div id="show">
      
    </div>
    
    <a href="javascript:upPage();" rel="external nofollow" >上一頁(yè)</a>&nbsp;&nbsp;<a href="javascript:downPage();" rel="external nofollow" >下一頁(yè)</a>
    
  </body>
</html>

頁(yè)面效果

添加學(xué)生的頁(yè)面信息add.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1>添加學(xué)生</h1>
    <hr>
    <form action="http://localhost:8888/stu/s/add" method="post">
      <p>
        姓名:<input type="text" name="name" />
      </p>
      <p>
        年齡:<input type="text" name="age" />
      </p>
      <p>
        性別:
        <input type="radio" name="sex" value="男" checked />男
        <input type="radio" name="sex" value="女" />女
      </p>
      <p>
        <input type="submit" value="保存" />
      </p>
    </form>
  </body>
</html>

頁(yè)面效果

'

如何利用分頁(yè)

直接調(diào)用Dao接口的父類JPA接口的分頁(yè)方法

在Service接口層定義:

/**
   * 分頁(yè)查詢所有數(shù)據(jù)
   * @param page
   * @param pageSize
   * @return
   */
  Page<Student> findAll(int page,int pageSize);

Service實(shí)現(xiàn):

 public Page<Student> findAll(int page,int pageSize) {
    Pageable pageable= PageRequest.of(page,pageSize);
    return studentDao.findAll(pageable);

  }

Controller層:

@GetMapping("/query")
  public Page<Student> findByPage(Integer page , HttpServletResponse response){
    response.setHeader("Access-Control-Allow-Origin","*");
    if(page==null||page<=0){
      page=0;
    }else{
      page-=1;
    }
    return studentService.findAll(page,5);
  }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Flink實(shí)現(xiàn)特定統(tǒng)計(jì)的歸約聚合reduce操作

    Flink實(shí)現(xiàn)特定統(tǒng)計(jì)的歸約聚合reduce操作

    這篇文章主要介紹了Flink實(shí)現(xiàn)特定統(tǒng)計(jì)的歸約聚合reduce操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02
  • Map映射LinkedHashSet與LinkedHashMap應(yīng)用解析

    Map映射LinkedHashSet與LinkedHashMap應(yīng)用解析

    這篇文章主要為大家介紹了Map映射LinkedHashSet與LinkedHashMap的應(yīng)用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2022-03-03
  • 淺談線程通信wait,notify作用

    淺談線程通信wait,notify作用

    這篇文章主要介紹了淺談線程通信wait,notify作用,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • springboot?@Async?注解如何實(shí)現(xiàn)方法異步

    springboot?@Async?注解如何實(shí)現(xiàn)方法異步

    這篇文章主要介紹了springboot?@Async?注解如何實(shí)現(xiàn)方法異步,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • springBoot整合redis做緩存具體操作步驟

    springBoot整合redis做緩存具體操作步驟

    緩存主要是將數(shù)據(jù)存在計(jì)算機(jī)的內(nèi)存當(dāng)中,以便于在使用的時(shí)候是可以實(shí)現(xiàn)快速讀取使用,它的快也是相對(duì)于硬盤讀取而言,這篇文章主要給大家介紹了關(guān)于springBoot整合redis做緩存的具體操作步驟,需要的朋友可以參考下
    2024-04-04
  • Java8到Java19的一些變化分析詳解

    Java8到Java19的一些變化分析詳解

    這篇文章主要為大家介紹了Java8到Java19的一些變化分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Mybatis中一對(duì)多(collection)和一對(duì)一(association)的組合查詢使用

    Mybatis中一對(duì)多(collection)和一對(duì)一(association)的組合查詢使用

    這篇文章主要介紹了Mybatis中一對(duì)多(collection)和一對(duì)一(association)的組合查詢使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java詳解線上內(nèi)存暴漲問(wèn)題定位和解決方案

    Java詳解線上內(nèi)存暴漲問(wèn)題定位和解決方案

    本篇文章介紹了我在開(kāi)發(fā)過(guò)程中遇到的線上內(nèi)存暴漲的問(wèn)題,以及定位問(wèn)題原因和解決該問(wèn)題的過(guò)程及思路,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2021-10-10
  • 使用eclipse創(chuàng)建java項(xiàng)目的方法

    使用eclipse創(chuàng)建java項(xiàng)目的方法

    這篇文章主要為大家詳細(xì)介紹了使用eclipse創(chuàng)建java項(xiàng)目的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java RSA加密解密實(shí)現(xiàn)方法分析【附BASE64 jar包下載】

    Java RSA加密解密實(shí)現(xiàn)方法分析【附BASE64 jar包下載】

    這篇文章主要介紹了Java RSA加密解密實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了java基于第三方類庫(kù)javabase64-1.3.1.jar實(shí)現(xiàn)RSA加密解密功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10

最新評(píng)論

平南县| 宣恩县| 浑源县| 陆良县| 华池县| 中山市| 南昌市| 上思县| 汽车| 石泉县| 汽车| 上栗县| 延长县| 岐山县| 台州市| 娄底市| 洛阳市| 瑞昌市| 兰考县| 芦溪县| 松阳县| 株洲县| 武义县| 呼和浩特市| 昌黎县| 哈尔滨市| 明光市| 通许县| 舒兰市| 海淀区| 漳浦县| 建昌县| 子长县| 禹州市| 怀仁县| 清徐县| 昭通市| 获嘉县| 新民市| 乐都县| 都昌县|