SpringBoot之Spring Data Jpa支持+web+freemarkers+mysql实现增删改查

一.
创建一个Spring Starter Project,加入以下支持:
在这里插入图片描述
打开application.properties进行配置:这里我改为了yml格式:

server: 
  port: 8888
  servlet: 
    context-path: /
    
spring:  
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver  
    url: jdbc:mysql://localhost:3306/student?serverTimezone=UTC&useSSL=false
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true     

二.
创建一个student类:

package com.example.student;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="student")
public class Student {

	@Id
	@GeneratedValue
	private Integer id;
	
	@Column(length=100)
	private String name;
	
	@Column(length=50)
	private Integer age;

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

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

因为此处id设置为自增,所以mysql中的id要进行自增设置:
在这里插入图片描述

写一个StudentDao接口实现jpa:

package com.example.student;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import com.example.test.Book;

public interface StudentDao extends JpaRepository<Student,Integer>,JpaSpecificationExecutor<Student>{

}

最后写一个控制类StudentController:

package com.example.student;

import java.util.List;

import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.example.test.Book;

@Controller
@RequestMapping("/student")
public class StudentController {
	
	@Resource
	private StudentDao studentDao;
	//显示当前信息
	@RequestMapping("/list")
	public ModelAndView list(){
		ModelAndView model=new ModelAndView();
		model.addObject("studentlist",studentDao.findAll());
		model.setViewName("listshow");
		return model;
	}
	/**
	 * 增加操作
	 */
	@RequestMapping(value="/add",method=RequestMethod.POST)
	public String addStudent(Student student) {
		studentDao.save(student);
		return "forward:/student/list";
	}
	/**
	 * 删除操作
	 */
	@RequestMapping(value="/delete",method=RequestMethod.GET)
	public String delete(Student student) {	
		studentDao.delete(student);
		return "forward:/student/list";
	}
	/**
	 * 修改操作
	 */
	@GetMapping(value="/update/{id}")
	public ModelAndView updateStudent(@PathVariable("id") Integer id){
		ModelAndView mav=new ModelAndView();
		mav.addObject("student", studentDao.getOne(id));
		mav.setViewName("updatestudent");
		return mav;
	}
	@RequestMapping(value="/preupdate")
	public String update(Student student) {
		studentDao.save(student);
		return "forward:/student/list";
	}

	/**
	 * 查询操作
	 */
	@RequestMapping(value="/find")
	public ModelAndView findStudent(Student student) {
		ModelAndView mav=new ModelAndView();
		List<Student> studentList=studentDao.findAll(new Specification<Student>(){
			//固定的动态查询操作
			@Override
			public Predicate toPredicate(Root<Student> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) { 
				// TODO Auto-generated method stub
				Predicate predicate=criteriaBuilder.conjunction();
				if(student!=null) {
					if(student.getName()!=null&&!"".equals(student.getName())) {
						predicate.getExpressions().add(criteriaBuilder.like(root.get("name"), "%"+student.getName()+"%"));
					}
					if(student.getAge()!=null&&!"".equals(student.getAge())) {
						predicate.getExpressions().add(criteriaBuilder.like(root.get("age"), "%"+student.getAge()+"%"));
					}
				}
				return predicate;
			}
		});
		mav.addObject("studentlist",studentList);
		mav.setViewName("listshow");
		return mav;
	}
}

由于使用Freemarker,我们需在该路径下:
在这里插入图片描述
创建ftl文件显示网页:(两个book是无用的,我懒得删了)
其中listshow是主要显示文件,内容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/addstudent.html">添加学生</a>&nbsp;
<a href="/findstudent.html">查询学生</a>&nbsp;
<form action="/student/list" method="post">
	<table>
		<tr>
			<th>学生id</th>
			<th>学生姓名</th>
			<th>学生年龄</th>
			<th>操作</th>
		</tr>
		<#list studentlist as student> 
		<tr>
			<td>${student.id}</td>
			<td>${student.name}</td>
			<td>${student.age}</td>
			<td>
				<a href="/student/update/${student.id}">修改</a>
				<a href="/student/delete?id=${student.id}">删除</a>
			</td>
		</tr>
		</#list>  
	</table>
</form>
</body>
</html>

可以从内容看到额外引入两个html文件放在以下路径:(book无关)
在这里插入图片描述
内容分别为:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/student/add" method="post">
学生姓名:<input type="text" name="name"/>
学生年龄:<input type="text" name="age"/>
<input type="submit" value="添加"/>
</form>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/student/find" method="post">
学生姓名:<input type="text" name="name"/>
学生年龄:<input type="text" name="age"/>
<input type="submit" value="查询"/>
</form>
</body>
</html>

最后别忘记updatestudent.ftl文件:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/student/preupdate" method="post">
<input type="hidden" name="id" value="${student.id}"/><br/>
学生姓名:<input type="text" name="name" value="${student.name}"/><br/>
学生年龄:<input type="text" name="age" value="${student.age}"/><br/>
<input type="submit" value="更改"/>
</form>
</body>
</html>

以上代码结构完成

三.
运行Spring Boot App。
打开网页:http://localhost:8888/student/list 可以看到:
在这里插入图片描述
然后具体测试一下即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值