用Springboot+Jpa实现学生CRUD操作(含前端页面,含分页,自定义SQL)

在数据库中建student表

建包

1.编写entity包下实体类Student

(一个Javabean规范)

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

import javax.persistence.*;

@Entity
@Table(name = "student")
//@Entity  应用在实体类上   @Table(name = "student") 应用在实体类上,并且name属性为数据库表名
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>两个参数实体类和主键类型
    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);//添加学生
    Student update(Student student);//修改
    void  delete(Integer id);//通过id删除学生
    Student findStuById(Integer id);//通过ID查找学生,接口中没有此方法,在StudentDao接口创建
    List<Student> findStuByName(String name);//通过学生姓名查找,在StudentDao接口创建

    /**
     * 分页查询所有数据
     * @param page //当前页
     * @param pageSize //每页记录数
     * @return
     */
    Page<Student> findAll(int page,int pageSize);

}

在service对接口实现

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
/*应用在Controller层的类上面
@RequestMapping("/s")
public class StudentController {

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

    /**
     * 添加学生
     * @param student 要添加学生对象
     * @return
     */
    @PostMapping("/add")
    /*@PostMapping
    映射一个POST请求

    Spring MVC新特性 

 提供了对Restful风格的支持
@GetMapping,处理get请求
@PostMapping,处理post请求
@PutMapping,处理put请求
@DeleteMapping,处理delete请求
*/
    
    public  Student save(Student student){
        return studentService.save(student);
    }

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

    /**
     * 删除学生
     * @param  id   要删除学生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","*"); //解决跨域请求
        if(page==null||page<=0){
            page=0;
        }else{
            page-=1;
        }
        return  studentService.findAll(page,5);
    }
}

@RestController 
应用在Controller层的类上面,@RestController注解相当于@ResponseBody + @Controller合在一起的作用,同时返回的数据为json数据
使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面
若返回json等内容到页面,则需要加@ResponseBody注解

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

5.利用HBuilder进行前端编写

Jquery.js内容到https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js复制即可

主页面: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;">学生管理系统</h1>
        <hr>
        <a href="add.html">添加学生</a>

        <div id="show">

        </div>

        <a href="javascript:upPage();">上一页</a>&nbsp;&nbsp;<a href="javascript:downPage();">下一页</a>

    </body>
</html>

页面效果

添加学生的页面信息add.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <h1>添加学生</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>

页面效果

如何利用分页

直接调用Dao接口的父类JPA接口的分页方法
在Service接口层定义:

/**
     * 分页查询所有数据
     * @param page
     * @param pageSize
     * @return
     */
    Page<Student> findAll(int page,int pageSize);

Service实现:

  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);
    }

原文地址:https://www.cnblogs.com/songhuiqiang/p/10801656.html

时间: 2024-08-24 10:52:11

用Springboot+Jpa实现学生CRUD操作(含前端页面,含分页,自定义SQL)的相关文章

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

背景:上一篇文章的界面太丑.没有条件查询功能.所以做一些改进,整合EasyUI做实现.(仅以此文纪念表格中出现的这些朋友工作六周年,祭奠一下逝去的青春^_^) 一.开发环境(参照上一篇文章) 补充:EasyUI直接从官网随便下载一个版本即可,本文用的版本是 1.3.3 二.程序结构:java目录下都是服务端代码,resources目录下templates目录存放页面文件,static目录下存放JavaScript文件.CSS文件.图片等资源文件 三.具体实现(Talk is cheap.Show

Spark操作dataFrame进行写入mysql,自定义sql的方式

业务场景: 现在项目中需要通过对spark对原始数据进行计算,然后将计算结果写入到mysql中,但是在写入的时候有个限制: 1.mysql中的目标表事先已经存在,并且当中存在主键,自增长的键id 2.在进行将dataFrame写入表的时候,id字段不允许手动写入,因为其实自增长的 要求: 1.写入数据库的时候,需要指定字段写入,也就是说,只指定部分字段写入 2.在写入数据库的时候,对于操作主键相同的记录要实现更新操作,非插入操作 分析: spark本身提供了对dataframe的写入数据库的操作

【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限

开发环境搭建参见<[原]无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页> 需求: ① 除了登录页面,在地址栏直接访问其他URL,均跳转至登录页面 ② 登录涉及帐号和密码,帐号错误提示帐号错误,密码错误提示密码错误 ③ 登录成功跳转至首页,首页显示登录者帐号信息,并有注销帐号功能,点击注销退出系统 ------------------------------------------------------------------

jpa对表的crud

1.1.  Jpa对表的crud操作 1.1.1.  增加 public void save() { Person person = new Person("aaa",121); entityManager.persist(person);//持久化一个对象,将数据保存到数据库中 } 1.1.2.  修改 public void update(){ Person person = entityManager.find(Person.class, 1);//相当于hibernate的ge

MyBatis 学习总结 02 对表执行增删改查(CRUD)操作 OLD

 可以对上一节中使用mybatis打开一次session的业务逻辑进行封装,封装的成工具类命名为: MyBatisUtil package com.mybatis.util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlS

mybatis学习(二)----对表进行CRUD操作

一.使用MyBatis对表执行CRUD操作--基于XML的实现 userMapper.xml映射文件如下: 1 <?xml version="1.0" encoding="utf-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"&g

SpringBoot JPA实现增删改查、分页、排序、事务操作等功能

今天给大家介绍一下SpringBoot中JPA的一些常用操作,例如:增删改查.分页.排序.事务操作等功能.下面先来介绍一下JPA中一些常用的查询操作: //And --- 等价于 SQL 中的 and 关键字,比如 findByHeightAndSex(int height,char sex): public List<User> findByHeightAndSex(int height,char sex); // Or --- 等价于 SQL 中的 or 关键字,比如 findByHeig

SpringBoot+Mybatis+MybatisPlus整合实现基本的CRUD操作

SpringBoot+Mybatis+MybatisPlus整合实现基本的CRUD操作 1> 数据准备 -- 创建测试表 CREATE TABLE `tb_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_name` varchar(20) NOT NULL COMMENT '用户名', `password` varchar(20) NOT NULL COMMENT '密码', `name` varchar

用SpringBoot+MySql+JPA实现对数据库的增删改查和分页

使用SpringBoot+Mysql+JPA实现对数据库的增删改查和分页      JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.  使用Springboot和jpa对数据库进行操作时,能够大大减少我们的工作量,在jpa中,已经在底层封装好了增删查的功能和sql语句,可以使我们进行快速开发 项目流程 一.新建一个项目 二.配置文件 #数据源配置 spring.dat