springboot—jpa入门
对一个表进行CRUD操作,实践完本篇内容之后你就已经能够使用结合springboot和jpa做一些简单的CRUD操作了
1、项目架构图:
2、maven项目pom.xml依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.com.cnnp</groupId>
<artifactId>springboot-jpa</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--引入lombok可以省略model中的get、set方法-->
<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>
</plugin>
</plugins>
</build>
</project>
3、boot核心配置文件application.yml
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://127.0.0.1:3306/jpa?characterEncoding=utf-8&useSSL=false
jpa:
show-sql: true
4、model层
package cn.com.cnnp.model;
import lombok.Data;
import javax.persistence.*;
@Data//可以省略get、set方法
@Entity//表明该model类交给jpa来管理
@Table(name = "t_employee")//类映射的标名
public class Employee {
@Id//声明主键列
@GeneratedValue(strategy = GenerationType.IDENTITY)//主键ID自增长
private Long id;
private String username;
private String pwd;
}
5、repository层
package cn.com.cnnp.repository;
import cn.com.cnnp.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeRpository extends JpaRepository<Employee,Long> {
@Query("from Employee e where e.username =:username")
Employee findEmployee(@Param("username") String username);
}
6、service层
package cn.com.cnnp.service;
import cn.com.cnnp.model.Employee;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface EmployeeService {
/**
* 新增or更新
*/
Employee save(Employee employee);
/**
*删除
*/
void deleteById(Long id);
/**
*查询
*/
Employee findById(Long id);
/**
*查询所有
*/
List<Employee> findAll();
/**
*自定义查询
*/
Employee findEmployeeJpa(@Param("username") String username);
}
7、service实现层
package cn.com.cnnp.service.impl;
import cn.com.cnnp.model.Employee;
import cn.com.cnnp.repository.EmployeeRpository;
import cn.com.cnnp.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeRpository employeeRpository;
@Override
public Employee save(Employee employee) {
return employeeRpository.save(employee);
}
@Override
public void deleteById(Long id) {
Employee employee = this.findById(id);
employeeRpository.delete(employee);
}
@Override
public Employee findById(Long id) {
return employeeRpository.findById(id).get();
}
@Override
public List<Employee> findAll() {
return employeeRpository.findAll();
}
@Override
public Employee findEmployeeJpa(String username) {
return employeeRpository.findEmployee(username);
}
}
8、测试
package cn.com.cnnp.test;
import cn.com.cnnp.model.Employee;
import cn.com.cnnp.service.EmployeeService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.stereotype.Component;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
@Component
public class EmployeeTest {
@Autowired
private EmployeeService employeeService;
@Test
public void testFindAll(){
List<Employee> employees = employeeService.findAll();
System.out.println(employees);
}
@Test
public void testSave(){
Employee employee = new Employee();
employee.setPwd("123456");
employee.setUsername("老张");
employeeService.save(employee);
}
@Test
public void testFindById(){
Employee employee = employeeService.findById(2L);
System.out.println(employee);
}
@Test
public void findEmployee(){
Employee employee = employeeService.findEmployeeJpa("佩奇");
System.out.println(employee);
}
}