SpringBoot2使用Spring Data-JPA实现增删改查
pom.xml配置
<dependencies>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
application.yaml
spring:
datasource:
password: root
username: root
url: jdbc:mysql://localhost:3306/lxs?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
database: mysql
show-sql: true #显示sql语句
hibernate:
ddl-auto: update
编写实体类
package com.ysh.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* (User)实体类
*
* @author makejava
* @since 2021-01-12 18:51:35
*/
@Entity(name = "user")
@Data
public class User {
private static final long serialVersionUID = 632582889317911243L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private Integer sex;
private Integer age;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;
}
@Data 自动封装属性
@Entity注解用于生成数据库表,
@Table用于指定表的名称,
@GeneratedValue用于根据规则生成主键,
@Id表示这是一个主键。(还有一些标签可以自己去看一下springdata-jpa的官方文档)
Spring Data Jpa 可以根据实体类 在数据库里自动生成表(注意:yml数据里面首先需要一个数据库,然后必须连接)
编写Dao层接口
DAO的接口:
- Repository (空接口)
- CrudRepository (增删改查)
- PagingAndSortingRepository (分页和排序)
- JpaRepository (扩展增删改查、批量操作)
- JpaSpecificationExecutor:用来做负责查询的接口
- Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,类似hibernate QBC查询
- JpaRepository继承PagingAndSortingRepository,CrudRepository:
- CrudRepository 提供 save、 delete、 deteleAll、 findAll、 findOne、 count等方法
- PagingAndSortingRepository提供排序及分页findAll(Sort) (基于排序的查询)、findAll(Pageable)( 基于分页的查询)
package com.ysh.dao;
import com.ysh.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
/**
* (User)表数据库访问层
*
* @author makejava
* @since 2021-01-12 18:51:37
*/
//第一个泛型为实体类,第二个泛型是主键类型
public interface UserDao extends JpaRepository<User,Integer> {
}
编写Service层
package com.ysh.service;
import com.ysh.entity.User;
import java.util.List;
/**
* (User)表服务接口
*
* @author makejava
* @since 2021-01-12 18:51:38
*/
public interface UserService {
List<User> findAll();
void add(User user);
void delete(Integer id);
User findById(Integer id);
void update(User user);
}
Service实现类
package com.ysh.service.impl;
import com.ysh.dao.UserDao;
import com.ysh.entity.User;
import com.ysh.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* (User)表服务实现类
*
* @author makejava
* @since 2021-01-12 18:51:38
*/
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void delete(Integer id) {
userDao.deleteById(id);
}
@Override
public void add(User user) {
userDao.save(user);
}
@Override
public List<User> findAll() {
return userDao.findAll();
}
@Override
public User findById(Integer id) {
User user = userDao.findById(id).get();
return user;
}
@Override
public void update(User user) {
userDao.save(user);
}
}
编写Controller层
package com.ysh.controller;
import com.ysh.entity.User;
import com.ysh.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* (User)表控制层
*
* @author makejava
* @since 2021-01-12 18:51:39
*/
@Controller
@Slf4j
public class UserController {
/**
* 服务对象
*/
@Autowired
private UserService userService;
@RequestMapping("/toList")
public String toList(Model model){
try {
List<User> list = userService.findAll();
model.addAttribute("users",list);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
return "list";
}
@PostMapping("/add")
public String add(User user){
try {
userService.add(user);
} catch (Exception e) {
e.printStackTrace();
}
return "redirect:/toList";
}
@GetMapping("/delete")
public String delete(Integer id){
try {
userService.delete(id);
} catch (Exception e) {
e.printStackTrace();
}
return "redirect:/toList";
}
@GetMapping("/findById")
public String findById(Integer id,Model model){
try {
User user = userService.findById(id);
model.addAttribute("user",user);
} catch (Exception e) {
e.printStackTrace();
}
return "update";
}
@PostMapping("/update")
public String update(User user){
try {
userService.update(user);
} catch (Exception e) {
e.printStackTrace();
}
return "redirect:/toList";
}
@GetMapping("/toAdd")
public String toAdd(){
return "add";
}
}