Spring boot2+jpa+thymeleaf实现增删改查

一、pom.xml引入相关模块web、jpa、thymeleaf、oracle:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc8</artifactId>

<version>12.2.0.1</version>

</dependency>

二、application.properties配置

server.port = 9001

spring.datasource.driver-class-name = oracle.jdbc.driver.OracleDriver

spring.datasource.url = jdbc:oracle:thin:@127.0.0.1:1521:testdb

spring.datasource.username = dev

spring.datasource.password = dev

spring.jpa.hibernate.ddl-auto = update

spring.jpa.show-sql = true

spring.thymeleaf.cache = false

说明:

1、由于本机的8080已经被使用,修改一下端口号为9001。

2、hibernate.hbm2ddl.auto参数有四个值:

create: 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要

这样执行,这就是导致数据库表数据丢失的一个重要原因。

create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。

update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载

hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。

validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

3、show-sql 是否打印出自动生产的SQL,方便调试的时候查看

4、propertiesspring.thymeleaf.cache=false是关闭thymeleaf的缓存,不然在开发过程中修改页面不会立刻生效需要重启,生产

可配置为true。

三、启动类需要添加Servlet的支持

package com.example.demo;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.builder.SpringApplicationBuilder;

import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication

public class DemoApplication extends SpringBootServletInitializer {

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

return application.sources(DemoApplication.class);

}

public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

}

四、数据库层代码

1、实体类映射数据库表

package com.example.demo.entity;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Table;

import javax.validation.constraints.NotEmpty;

import org.hibernate.validator.constraints.Length;

@Entity

@Table(name = "userinfo")

public class User {

@Id

@GeneratedValue

private long id;

@Column(nullable = false, unique = true)

@NotEmpty(message="用户名不能为空")

private String userName;

@Column(nullable = false)

@NotEmpty(message="密码不能为空")

@Length(min=6, message="密码长度不能少于6位")

private String password;

@Column(nullable = false)

private int age;

//必须有构造

public User() {

}

public long getId() {

return id;

}

public User setId(long id) {

this.id = id;

return this;

}

public String getUserName() {

return userName;

}

public User setUserName(String userName) {

this.userName = userName;

return this;

}

public String getPassword() {

return password;

}

public User setPassword(String password) {

this.password = password;

return this;

}

public int getAge() {

return age;

}

public User setAge(int age) {

this.age = age;

return this;

}

}

2、继承JpaRepository类会自动实现很多内置的方法

package com.example.demo.repository;

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

import com.example.demo.entity.User;

public interface UserRepository extends JpaRepository<User, Long> {

User findById(long id);

void deleteById(Long id);

}

五、业务层

service调用jpa实现相关的增删改查,实际项目中service层处理具体的业务代码。

1、UserService.java

package com.example.demo.service;

import java.util.List;

import org.springframework.data.domain.Page;

import org.springframework.data.domain.Pageable;

import com.example.demo.entity.User;

public interface UserService {

public Page<User> getUserPage(Pageable pageable);

public List<User> getUserList();

public User findUserById(long id);

public void save(User user);

public void edit(User user);

public void delete(long id);

}

2、UserServiceImpl.java

package com.example.demo.service.impl;

import java.util.List;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.domain.Page;

import org.springframework.data.domain.Pageable;

import org.springframework.stereotype.Service;

import com.example.demo.entity.User;

import com.example.demo.repository.UserRepository;

import com.example.demo.service.UserService;

@Service

public class UserServiceImpl implements UserService {

@Autowired

private UserRepository userRepository;

@Override

public Page<User> getUserPage(Pageable pageable) {

return userRepository.findAll(pageable);

}

@Override

public List<User> getUserList() {

return userRepository.findAll();

}

@Override

public User findUserById(long id) {

return userRepository.findById(id) ;

}

@Override

public void save(User user) {

userRepository.save(user);

}

@Override

public void edit(User user) {

userRepository.save(user);

}

@Override

public void delete(long id) {

userRepository.deleteById(id);

}

}

六、控制层

package com.example.demo.web.controller;

import java.util.List;

import javax.annotation.Resource;

import javax.validation.Valid;

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.data.domain.Sort.Direction;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.validation.BindingResult;

import org.springframework.validation.ObjectError;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import com.example.demo.entity.User;

import com.example.demo.service.UserService;

@Controller

public class UserController {

@Resource

UserService userService;

@RequestMapping("/")

public String index() {

return "redirect:/list";

}

@RequestMapping("/list")

public String list(Model model) {

List<User> users=userService.getUserList();

model.addAttribute("users", users);

/*int page=1,size=2;

Sort sort = new Sort(Direction.DESC, "id");

Pageable pageable = PageRequest.of(page, size, sort);

model.addAttribute("users", pageable);*/

return "user/list";

}

@RequestMapping("/toAdd")

public String toAdd() {

return "user/userAdd";

}

@RequestMapping("/add")

public @ResponseBody User add(@Valid User user, BindingResult result) {

if (result.hasErrors()) {

List<ObjectError> list = result.getAllErrors();

for (ObjectError error : list) {

System.out.println(error.getDefaultMessage());

}

return null;

}

userService.save(user);

return user;

}

@RequestMapping("/toEdit")

public String toEdit(Model model,Long id) {

User user=userService.findUserById(id);

model.addAttribute("user", user);

return "user/userEdit";

}

@RequestMapping("/edit")

public String edit(User user) {

userService.edit(user);

return "redirect:/list";

}

@RequestMapping("/delete")

public String delete(Long id) {

userService.delete(id);

return "redirect:/list";

}

}

七、页面

1、列表页 list.hmtl

<!DOCTYPE html>

<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>

<meta charset="UTF-8"/>

<title>userList</title>

<link rel="stylesheet" th:href="@{/css/bootstrap.css}" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></link>

</head>

<body class="container">

<br/>

<h1>用户列表</h1>

<br/><br/>

<div class="with:80%">

<table class="table table-hover">

<thead>

<tr>

<th>#</th>

<th>User Name</th>

<th>Password</th>

<th>Age</th>

<th>Edit</th>

<th>Delete</th>

</tr>

</thead>

<tbody>

<tr th:each="user : ${users}">

<th scope="row" th:text="${user.id}">1</th>

<td th:text="${user.userName}">neo</td>

<td th:text="${user.password}">Otto</td>

<td th:text="${user.age}">6</td>

<td><a th:href="@{/toEdit(id=${user.id})}" rel="external nofollow" >edit</a></td>

<td><a th:href="@{/delete(id=${user.id})}" rel="external nofollow" >delete</a></td>

</tr>

</tbody>

</table>

</div>

<div class="form-group">

<div class="col-sm-2 control-label">

<a href="/toAdd" rel="external nofollow" rel="external nofollow" th:href="@{/toAdd}" rel="external nofollow" class="btn btn-info">add</a>

</div>

</div>

</body>

</html>

2、新增页 userAdd.html

<!DOCTYPE html>

<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>

<meta charset="UTF-8"/>

<title>user</title>

<link rel="stylesheet" th:href="@{/css/bootstrap.css}" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></link>

</head>

<body class="container">

<br/>

<h1>添加用户</h1>

<br/><br/>

<div class="with:80%">

<form class="form-horizontal" th:action="@{/add}" method="post">

<div class="form-group">

<label for="userName" class="col-sm-2 control-label">userName</label>

<div class="col-sm-10">

<input type="text" class="form-control" name="userName" id="userName" placeholder="userName"/>

</div>

</div>

<div class="form-group">

<label for="password" class="col-sm-2 control-label" >Password</label>

<div class="col-sm-10">

<input type="password" class="form-control" name="password" id="password" placeholder="Password"/>

</div>

</div>

<div class="form-group">

<label for="age" class="col-sm-2 control-label">age</label>

<div class="col-sm-10">

<input type="text" class="form-control" name="age" id="age" placeholder="age"/>

</div>

</div>

<div class="form-group">

<div class="col-sm-offset-2 col-sm-10">

<input type="submit" value="Submit" class="btn btn-info" />

&nbsp; &nbsp; &nbsp;

<input type="reset" value="Reset" class="btn btn-info" />

</div>

</div>

</form>

</div>

</body>

</html>

3、修改页 userEdit.html

<!DOCTYPE html>

<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>

<meta charset="UTF-8"/>

<title>user</title>

<link rel="stylesheet" th:href="@{/css/bootstrap.css}" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></link>

</head>

<body class="container">

<br/>

<h1>修改用户</h1>

<br/><br/>

<div class="with:80%">

<form class="form-horizontal" th:action="@{/edit}" th:object="${user}" method="post">

<input type="hidden" name="id" th:value="*{id}" />

<div class="form-group">

<label for="userName" class="col-sm-2 control-label">userName</label>

<div class="col-sm-10">

<input type="text" class="form-control" name="userName" id="userName" th:value="*{userName}"

placeholder="userName"/>

</div>

</div>

<div class="form-group">

<label for="password" class="col-sm-2 control-label" >Password</label>

<div class="col-sm-10">

<input type="password" class="form-control" name="password" id="password" th:value="*{password}"

placeholder="Password"/>

</div>

</div>

<div class="form-group">

<label for="age" class="col-sm-2 control-label">age</label>

<div class="col-sm-10">

<input type="text" class="form-control" name="age" id="age" th:value="*{age}" placeholder="age"/>

</div>

</div>

<div class="form-group">

<div class="col-sm-offset-2 col-sm-10">

<input type="submit" value="Submit" class="btn btn-info" />

&nbsp; &nbsp; &nbsp;

<a href="/toAdd" rel="external nofollow" rel="external nofollow" th:href="@{/list}" rel="external nofollow" class="btn btn-info">Back</a>

</div>

</div>

</form>

</div>

</body>

</html>

以上是 Spring boot2+jpa+thymeleaf实现增删改查 的全部内容, 来源链接: utcz.com/z/323267.html

回到顶部