提供gradle、maven两种可选方案
dependencies {
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'mysql:mysql-connector-java'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
<dependencies>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-jpaartifactId>
dependency>
dependencies>
server:
port: 83
spring:
jackson:
#日期转换
date-format: "yyyy-dd-MM HH:mm:ss"
jpa:
#打印sql
show-sql: true
#取消控制台警告信息
open-in-view: false
hibernate:
#自动生成数据库表
ddl-auto: update
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/jpa?serverTimezone=Asia/Shanghai
username: root
password: 123456
启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@EnableJpaAuditing //jpa自动创建时间需要的注解
@SpringBootApplication
public class JpaApplication {
public static void main(String[] args) {
SpringApplication.run(JpaApplication.class, args);
}
}
lombok的好处就是不用写Getter、Setter、重写equals、hashCode方法,还可以使用@Slf4j打印日志
import lombok.Data;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.util.Date;
/**
* 用户
*/
@Entity //jpa实体类注解
@Table(name = "user") //jpa数据库表名,如果和实体类一致,可以不配置
@EntityListeners(AuditingEntityListener.class) //jpa自动创建时间需要的注解
@Data //lombok自动生成Getter、Setter、重写equals、hashCode方法
public class User{
/**
* ID
*/
@Id //主键ID
@GeneratedValue(strategy = GenerationType.IDENTITY) //主键ID生成规则IDENTITY自增主键
private Long id;
/**
* 姓名
*/
@Column(name = "name",nullable = false,unique = true,length = 20) //数据库对应的名称(如果和数据库名称一致,可以不配置),不允许为null,唯一约束,长度20
private String name;
/**
* 出生日期
*/
@Temporal(TemporalType.DATE) //DATE保存到数据库为yyyy-MM-dd,TIME:HH:mm:ss,TIMESTAMP:yyyy-MM-dd HH:mm:ss
private Date birthday;
/**
* 创建时间
*/
@CreatedDate //自动创建时间
private Date createTime;
/**
* 修改时间
*/
@LastModifiedDate //自动修改时间
private Date modifyTime;
}
类似dao(mapper),但jpa这里它叫什么,建议我们命名时就叫什么。
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* JpaRepository<实体类 , ID>,类似dao(mapper)
*/
@Repository
public interface UserRepository extends JpaRepository<User, Long> {}
service层,实现增删改查没什么好说的,都一样
import lombok.extern.slf4j.Slf4j;
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;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
@Slf4j
@Service
public class UserService {
@Resource
private UserRepository userRepository;
/**
* 通过ID查询一条用户记录
* @param id ID
* @return
*/
public Optional<User> findById(Long id){
Optional<User> user = userRepository.findById(id);
log.info("通过ID查询一条用户记录:{}",user);
return user;
}
/**
* 查询所有用户(不分页)
* @return
*/
public List<User> findAll(){
List<User> userList = userRepository.findAll();
log.info("查询所有用户(不分页):{}",userList);
return userList;
}
/**
* 查询所有用户(分页)
* @param pageNum 起始页
* @param pageSize 每页多少条记录
* @return
*/
public Page<User> findAllByPage(Integer pageNum, Integer pageSize){
//按自增ID倒叙排序
Sort sort = Sort.by(Sort.Direction.DESC,"id");
//分页
Pageable pageable = PageRequest.of(pageNum,pageSize,sort);
Page<User> userPage = userRepository.findAll(pageable);
log.info("查询所有用户(分页):{}",userPage);
return userPage;
}
/**
* 新增/修改一条用户记录
* @param user 用户对象
*/
public void save(User user){
log.info("新增/修改一条用户记录:{}",userRepository.save(user));
}
/**
* 通过ID删除一条用户记录
* @param id ID
*/
public void deleteById(Long id){
log.info("通过ID删除一条用户记录:{}",id);
userRepository.deleteById(id);
}
}
controller层也没什么好说的都一样
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
/**
* 用户接口
*/
@RestController
@RequestMapping("user")
public class UserController {
@Resource
private UserService userService;
/**
* 通过ID查询一条用户记录
* @param id ID
* @return
*/
@GetMapping("findById")
public Optional<User> findById(@RequestParam Long id){
return userService.findById(id);
}
/**
* 查询所有用户(不分页)
* @return
*/
@GetMapping("findAll")
public List<User> findAll(){
return userService.findAll();
}
/**
* 查询所有用户(分页)
* @param pageNum 起始页
* @param pageSize 每页多少条记录
* @return
*/
@GetMapping("findAllByPage")
public Page<User> findAllByPage(@RequestParam(defaultValue = "0") Integer pageNum,@RequestParam(defaultValue = "10") Integer pageSize){
return userService.findAllByPage(pageNum,pageSize);
}
/**
* 新增/修改用户数据
* @param user 用户对象
*/
@PostMapping("save")
public void save(@RequestBody User user){
userService.save(user);
}
/**
* 通过ID删除一条记录
* @param id ID
*/
@PostMapping()
public void deleteById(@RequestParam Long id){
userService.deleteById(id);
}
}
建议

