我的第一个SpringBoot小Demo(简单的学生管理系统)

1.使用idea搭建SpringBoot环境

写第一个springboot例子之前 确保所要用到的工具都安装好 jdk,maven,idea,mysql,我的第一个学生成绩管理系统小demo使用的是前后端分离,所用到的技术有前端框架layui框架,ajax请求,实现分页。
1. 选择create new project

我的第一个SpringBoot小Demo(简单的学生管理系统)_第1张图片

2.
我的第一个SpringBoot小Demo(简单的学生管理系统)_第2张图片
3.我的第一个SpringBoot小Demo(简单的学生管理系统)_第3张图片
4.我的第一个SpringBoot小Demo(简单的学生管理系统)_第4张图片
5.
我的第一个SpringBoot小Demo(简单的学生管理系统)_第5张图片
6.
我的第一个SpringBoot小Demo(简单的学生管理系统)_第6张图片
7.在这里插入图片描述
第一个springboot小例子已经跑起来了

后台源码

第一个学生管理系统demo

1.配置application.properties文件 里面有数据源配置和jpa jpa可以帮我们自动生成表结构 上下文配置指定了访问路径

#数据源配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/stu?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

#配置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


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

2.配置pom.xml文件,pom.xml文件配置一些我们所使用到的jar包

  
        
            com.github.pagehelper
            pagehelper-spring-boot-starter
            1.2.10
        
        
        
            com.alibaba
            druid
            1.1.10
        
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        

3.在数据库里创建表
我的第一个SpringBoot小Demo(简单的学生管理系统)_第7张图片
4.在idea中entity包下创建实体类Student,注意:Student中的属性和字段要与数据库中的一一对应,编写规范加上注解,并说明id是自增类型

@Entity
@Table(name = "student")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private int age;
    private String sex;

5.Dao层,创建接口StudentDao并继承JpaRespository,JpaRespository里面有别人已经为我们定义好的一些简单的CRUD方法。

public interface StudentDao extends JpaRepository {
    Student findStudentById(Integer id);

    @Query(name = "findStuByName",nativeQuery = true,value =
            "select * from student where name=:name")
    List findStuByName(@Param("name") String name);
}

6.用户Dao层开发,创建接口UserDao并继承JpaRespository,JpaRespository里面有别人已经为我们定义好的一些简单的CRUD方法。

public interface UserDao extends JpaRepository {
    /**
     * 根据id查询
     */
    User findUserById(Integer id);
    @Query(name="login",nativeQuery = true,value = "select * from user where username=:username and password=:password")
    User login(@Param("username") String username,@Param("password") String password);


    void deleteById(Integer id);

7.StudentService层

public interface StudentService {
    Student save(Student student);
    Student update(Student student);
    void delete(Integer id);
    Student findStuById(Integer id);
    List findStuByName(String name);

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

8.StudentService层的实现类

@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.findStudentById(id);
    }

    @Override
    public List findStuByName(String name) {

        return studentDao.findStuByName(name);
    }

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

9.UserService层

public interface UserService {
    List findAll();
    User findUserById(Integer id);
    User save(User user);
    User update(User user);
    void delete(int id);
    User login(String username,String password);
    void deleteById(Integer id);
}

10.UserServiceimpl

package com.kude.stu.stuproject.stu.service;

import com.kude.stu.stuproject.stu.dao.UserDao;
import com.kude.stu.stuproject.stu.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class UserServiceimpl implements UserService {
    @Autowired
    private UserDao userdao;
    @Override
    public List findAll() {
        return userdao.findAll();
    }

    @Override
    public User findUserById(Integer id) {
        return userdao.findUserById(id);
    }

    @Override
    public User save(User user) {
        return userdao.save(user);
    }

    @Override
    public User update(User user) {
        return null;
    }

    @Override
    public void delete(int id) {

    }

    @Override
    public User login(String username, String password) {
        return userdao.login(username,password);
    }


    @Override
    public void deleteById(Integer id) {
        userdao.deleteById(id);

    }
}

11.因为用到ajax请求和layui框架,需要封装LayData,LoginMsg

package com.kude.stu.stuproject.stu.entity;

import java.util.List;

public class LayData{
    private int code;
    private String msg;
    private long count;
    private List data;

    public LayData(){

    }

    public LayData(int code, String msg, long count, List data) {
        this.code = code;
        this.msg = msg;
        this.count = count;
        this.data = data;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public long getCount() {
        return count;
    }

    public void setCount(long count) {
        this.count = count;
    }

    public List getData() {
        return data;
    }

    public void setData(List data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "LayData{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", count=" + count +
                ", data=" + data +
                '}';
    }
}




package com.kude.stu.stuproject.stu.entity;

public class LoginMsg {
    private int code;
    private User result;

    public LoginMsg(){

    }

    @Override
    public String toString() {
        return "LoginMsg{" +
                "code=" + code +
                ", result=" + result +
                '}';
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public User getResult() {
        return result;
    }

    public void setResult(User result) {
        this.result = result;
    }

    public LoginMsg(int code, User result) {
        this.code = code;
        this.result = result;
    }
}


12.UserController层

/**
 * 处理用户信息的控制层
 * @author 石光辉
 */
@RestController
@RequestMapping("/user")
public class UserController {
    /**
     * 查询用户的方法
     */
    @Autowired
    private UserService userService;
    @RequestMapping("/findAll")
    public List findAll(){

        return userService.findAll();
    }
    /**
     * 根据id查询用户
     */
    @RequestMapping("/query")
    public User findById(int id){
        return userService.findUserById(id);
    }
    /**
     * 注册用户
     */
    @RequestMapping(value = "/reg",method = RequestMethod.POST)
    public LoginMsg regUser(User user,HttpServletResponse response){
        response.setHeader("Access-Control-Allow-Origin","*");
//        userService.save(user);
        LoginMsg lm=new LoginMsg();
//        String name=user.getUsername();
//        String word=user.getPassword();
        if (user==null) {
            lm.setCode(0);
            lm.setResult(null);
        }else{
            userService.save(user);
            lm.setCode(1);
            lm.setResult(user);
        }
        return lm;
    }
    /**
     * 用户登录
     */
    @PostMapping("/login")
    public LoginMsg login(String username, String password, String isLogin, HttpServletResponse response, HttpSession session){
        response.setHeader("Access-Control-Allow-Origin","*");
//        return userService.login(username, password);
        User user=userService.login(username,password);
        LoginMsg lm=new LoginMsg();
        if (user!=null){
            lm.setCode(1);
            lm.setResult(user);
            session.setAttribute("user",user);
        }else {
            lm.setCode(0);
            lm.setResult(null);
        }
//        记住密码
        if(Boolean.valueOf(isLogin)){
            Cookie nameCookie=new Cookie("username",username);
            nameCookie.setMaxAge(60*60*24*7);
            Cookie pwdCookie=new Cookie("password",password);
            pwdCookie.setMaxAge(60*60*24*7);
             response.addCookie(nameCookie);
             response.addCookie(pwdCookie);

        }else{

        }
        return lm;

    }


    @PostMapping("/isLogin")
    public String isLogin(HttpSession session,HttpServletResponse response){
        response.setHeader("Access-Control-Allow-Origin","*");
        User user= (User) session.getAttribute("user");
        if(user==null){
            return "0";
        }
        else{
            return "1";
        }


    }
    @PostMapping("exit")
    public String exit(HttpSession session, HttpServletResponse response){
        response.setHeader("Access-Control-Allow-Origin","*");
        session.removeAttribute("user");
        System.out.println("退出成功!");
        return "退出成功";
    }
    @RequestMapping(value = "/delete",method = RequestMethod.POST)
    public void deleteById(Integer id){
        userService.deleteById(id);
    }

}

11.Studentcontroller层,在编写分页功能时,一定要注意Page所在的包是import org.springframework.data.domain.Page,不是其他的包,如果包导错了,就会出现错误。

@RestController
@RequestMapping("/s")
public class StudentController {
    @Autowired
    private StudentService studentService;

    /**
     * 添加学生信息
     * @param student  添加的学生对象
     * @return
     */
    @PostMapping("/add")
    public Student save(Student student){
       return studentService.save(student);

    }
    public Student queryById(Integer id){
       return studentService.findStuById(id);
    }

    /**
     * 修改学生信息
     * @param student 要修改的学生对象
     * @return
     */
    @PostMapping("/update")
    public Student update(Student student,HttpServletRequest request){
        Student stu=studentService.save(student);
        request.setAttribute("student",stu);
        return stu;
    }

    /**
     * 删除学生信息
     * @param id 参数 id
     * @return
     */
    @GetMapping("/del/{id}")
    public String del(@PathVariable int id){
        studentService.delete(id);
        return "删除成功!";
    }

    /**
     * 通过姓名查询学生信息
     * @param name 参数  学生姓名
     * @return
     */

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

    @GetMapping("/query")
    public LayData findByPage(Integer page,Integer limit, HttpServletResponse response){

        response.setHeader("Access-Control-Allow-Origin","*");

        if(page==null || page<=0){
            page = 0;
        }else{
            page -= 1;
        }
        if(limit==null||limit<=5){
            limit=5;
        }
        Page pageData=studentService.findAll(page,limit);
        LayData layData=new LayData();
        layData.setCode(0);
        layData.setCount(pageData.getTotalElements());
        layData.setData(pageData.getContent());
        return layData;


    }
}

前端页面

1.前端写代码工具 HBuilder,该工具是轻量级的,启动起来非常快。创建一个普通的项目,该项目的目录结构如下:
我的第一个SpringBoot小Demo(简单的学生管理系统)_第8张图片
2.register.html核心代码


3.login.html核心代码,使用AJAX 通过在后台与服务器进行少量数据交换,使网页实现异步更新


看一下整体的效果吧
注册
我的第一个SpringBoot小Demo(简单的学生管理系统)_第9张图片
登录
我的第一个SpringBoot小Demo(简单的学生管理系统)_第10张图片
显示
我的第一个SpringBoot小Demo(简单的学生管理系统)_第11张图片

你可能感兴趣的:(web,SpringBoot)