springboot--入门程序实现CRUD操作

使用springboot实现CRUD操作


新建项目

新建一个项目,选择spring initializr项目
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
Thymeleaf热部署,选不选都OK,这里还用不到。
在这里插入图片描述
项目创建完成。

准备工作

application.properties配置文件

#数据源配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.initialSize=20
spring.datasource.minIdle=50
spring.datasource.maxActive=500

#上下文配置
server.port=8888
server.servlet.context-path=/Student

#配置jpa
#帮我们自动生成表结构
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql= true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

创建一个数据库,看到上面url中我的是springboot,需要更改为自己的。
创建一个表studentdemo,设置id递增
在这里插入图片描述

pom.xml添加依赖

        <!-- druid数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>

        <!--分页-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.10</version>
        </dependency>

程序代码

项目结构
在这里插入图片描述
创建实体类
entity/Student
字段对应数据库

package com.example.denmo.student.entity;

import javax.persistence.*;

@Entity
//代表实体类
@Table(name = "studentdemo")
//注解对应数据库表名
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private String sex;
    private String password;

    public Student(int id, String name, String sex, String password) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.password = password;
    }

    public Student() {
        super();
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

DAO层
StuDao
继承JpaRepository类

package com.example.denmo.student.dao;

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

//JpaRepository支持接口规范方法名查询。意思是如果在接口中定义的查询方法符合它的命名规则,就可以不用写实现
//JpaRepository<Student,Integer> 接口 两个参数第一个为实体类型,第二个为主键类型
public interface StuDao extends JpaRepository<Student,Integer> {

    //自定义sql,登陆方法
    @Query(name = "login",nativeQuery = true,value =
    "select * from studentdemo where name=:name and password=:password ")
    Student login(@Param("name") String name, @Param("password") String password);
}

Service层
StuService

package com.example.denmo.student.service;

import com.example.denmo.student.entity.Student;
import org.springframework.data.domain.Page;

public interface StuService {
    Student findStuByID(int id);//根据id查询用户
    Student save(Student student);//保存、添加用户
    Student update(Student student);//修改用户
    void delete(int id);//删除用户
    Student login(String name,String password);//登陆
    Page<Student> findAll(int page,int pagesize);//分页


}

实现stuservice

StuServiceimpl

package com.example.denmo.student.service;

import com.example.denmo.student.dao.StuDao;
import com.example.denmo.student.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class StuServiceimpl implements StuService {
    @Autowired
    private StuDao stuDao;

    @Override
    public Student findStuByID(int id) {
        return stuDao.getOne(id);
    }

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

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

    @Override
    public void delete(int id) {
        stuDao.deleteById(id);
    }

    /*父类中没有login方法,所以要自定义sql。Studao中定义.*/
    @Override
    public Student login(String name, String password) {
        return stuDao.login(name,password);
    }

    @Override
    /*要注意Page分页全部选择org.springframework.data.domain下的*/
    public Page<Student> findAll(int page, int pagesize) {
        //设置id升序排列
        Pageable pageable = PageRequest.of(page,pagesize,new Sort(Sort.Direction.ASC,"id"));
        return stuDao.findAll(pageable);
    }
}

控制层
StuController

package com.example.denmo.student.controller;

import com.example.denmo.student.entity.Student;
import com.example.denmo.student.service.StuService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;

/**
 * 处理学生信息控制层
 * @author 醒醒,醒醒
 *
 */
@RestController
@RequestMapping("/stu")
public class StuController {
    @Autowired
    private StuService stuService;

    /**
     * 根据id查询用户
     * @param id
     * @return
     */
    @RequestMapping("/findStuById")
    public Student findStuById(int id){
       return stuService.findStuByID(id);
    }

    /**
     * 用户注册方法
     * @param student
     * @return
     */
    @RequestMapping("/registerStu")
    public Student registerStu(Student student){
        return stuService.save(student);
    }

    /**
     * 修改学生
     * @param student
     * @return
     */
    @RequestMapping("/updateStu")
    public Student updateStu(Student student){
        return stuService.update(student);
    }

    /**
     * 删除用户
     * @param id
     * @return
     */
    @GetMapping("/deleteStu")
    public String deleteStu(int id){
        stuService.delete(id);
        return "Deleted";
    }

    /**
     * 登陆
     * @param name
     * @param password
     * @return
     */
    @GetMapping("/loginStu")
    public Student loginStu(String name,String password){
        return stuService.login(name,password);
    }

    /**
     * 分页查询
     * @param p
     * @param response
     * @return
     */
    @GetMapping("/queryStu")
    public Page<Student> findByPage(Integer p, HttpServletResponse response){
        response.setHeader("Access-Control-Allow-Origin","*");//设置响应头。
    if(p==null||p<0){
        p = 0;
    }else {
        p -= 1;
    }
    return stuService.findAll(p,5);//设置为每次查询五个
    }


}

所用注解总结:

1、RestController 应用在Controller层的类上面

	2、RequestMapping("/xxx") ,@RequestMapping(value = "/findAll",method = RequestMethod.POST)

	3、@Entity  应用在实体类上

	4、@Table(name = "user") 应用在实体类上

	5、@Id
       @GeneratedValue(strategy = GenerationType.IDENTITY) 应用在实体类中的ID属性上

	6、@Service 应用在Service实现类上

	7、@Autowired 用于类中的属性注入

	8、自定义查询
	@Query(name="login",nativeQuery = true,value ="select * from user where username=:username and password=:password")

测试

运行项目
这里使用postman工具测试。
注册:
在这里插入图片描述
登陆
在这里插入图片描述
分页查询
在这里插入图片描述

可以看到,传值时还需要以**?属性=值的方式,破坏安全性
使用RESTful规范后代码和原始代码比较

    /**
     * 根据id查询用户
     * @param id
     * @return
     */
    @RequestMapping("/findStuById")
    public Student findStuById(int id){
       return stuService.findStuByID(id);
    }

	 /**
     * 根据id查询用户
     * //使用RESTful规范,即不再用 ?传值。注意以下{id}和@PathVariable
     * @param id
     * @return
     */
  @RequestMapping("/findStuById/{id}")
    public Student findStuById(@PathVariable int id){
       return stuService.findStuByID(id);
    }

在这里插入图片描述
在这里插入图片描述

简单前端页面看效果

分页查询
在这里插入图片描述
在这里插入图片描述
page.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/Student/stu/queryStu?p='+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.password+"</td><td>"+
							stu.sex+"</td><td><a href='http://localhost:8888/Student/stu/findStuById/"+stu.id+"'>编辑</a>&nbsp;<a href='http://localhost:8888/Student/stu/deleteStu/"+stu.id+"'>删除</a></td></tr>";
						}
						
						htmlStr += "</table>";
						
						$("#show").html(htmlStr);
					}
				});
			}
			
		</script>
	</head>
	<body>
		<h1 style="text-align: center;">学生管理系统</h1>
		<div id="show">
		</div>
		<a href="javascript:uppage()">上一页</a>
			<a href="javascript:downpage()">下一页</a>
	</body>
</html>

登陆
login.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>login</title>

	</head>
	<body>
		<h1>登陆</h1>
		<form action="http://localhost:8888/Stu/stu/loginStu" method="get">
			用户名:<input type="text" name="name"  value="" /><br>
			密码:<input type="password" name="password" /><br>
			<input type="submit" value="登陆" />
		</form>
		
	</body>
</html>

注册
registerStu.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>registerStu</title>
	</head>
	<body>
		<h1>注册信息</h1>
		<form action="http://localhost:8888/Stu/stu/register" method="post">
			用户名:<input type="text" name="name" value="" /><br>
			密码:<input type="password" name="password" value="" /><br>
			<input type="submit" value="注册" />
		</form>
	</body>
</html>
  • 13
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值