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添加依赖
com.alibaba
druid
1.1.10
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.10
项目结构
创建实体类
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 接口 两个参数第一个为实体类型,第二个为主键类型
public interface StuDao extends JpaRepository {
//自定义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 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 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 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);
}
学生管理系统
上一页
下一页
登陆
login.html
login
登陆
注册
registerStu.html
registerStu
注册信息