JPA(Java Persistence API)是一种Java编程接口,用于简化Java应用程序与数据库之间的交互。它提供了一种标准的持久化方式,可以将Java对象映射到关系型数据库表中,实现对象和数据库之间的转换。通过JPA,开发人员可以使用面向对象的方式来操作数据库,而不需关注数据库细节和编写大量的SQL语句,从而提高开发效率和代码质量。JPA还提供了方便的查询语言JPQL,支持复杂的查询操作。
org.springframework.boot
spring-boot-starter-data-jpa
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&serverTimezone=Asia/Shanghai
username: root
password: 123456
druid:
initial-size: 5 #连接池初始化大小
min-idle: 10 #最小空闲连接数
max-active: 20 #最大连接数
web-stat-filter:
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" #不统计这些请求数据
stat-view-servlet: #访问监控网页的登录用户名和密码
login-username: druid
login-password: druid
jpa:
hibernate:
#更新或者创建数据库表结构
ddl-auto: update
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
#控制台显示SQL
show-sql: true
@Data
@Entity
@Table(name = "test")
public class Test {
@Column
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@Column(name="phone")
private Integer phone;
}
public interface TestRepository extends JpaRepository {
}
@Service
public class TestService {
@Autowired
private TestRepository testRepository;
public Test save( Test test) {
return testRepository.save(test);
}
public Test findById(Long id) {
return testRepository.findById(id).orElse(null);
}
public List findAll() {
return testRepository.findAll();
}
public void deleteById(Long id) {
testRepository.deleteById(id);
}
}
@SpringBootApplication
@EnableJpaRepositories
public class ApiApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
}
JPA 提供了许多注解来映射实体类与数据库表之间的关系,以下是 JPA 常用的注解:
@Entity:将实体类映射到数据库表上。
@Table:指定实体类映射到的数据库表名。
@Id:指定实体类中的属性为主键。
@GeneratedValue:指定主键的生成策略。
@Column:指定属性与数据库表中的字段的映射关系。
@OneToMany:指定一对多关系。
@ManyToOne:指定多对一关系。
@ManyToMany:指定多对多关系。
@MappedSuperclass:注解用于标识一个类是一个超类,不会映射到数据库表中,但其属性会被子类继承。当多个实体类具有相同的属性时,可以创建一个@MappedSuperclass注解的抽象类,将这些共同属性定义在超类中,然后子类使用@Inheritance(strategy = InheritanceType.JOINED)注解指定继承关系,从而避免重复定义属性。子类不需要额外的映射信息,而是通过继承的方式自动继承超类的属性,避免了重复性的代码编写。
使用@MappedSuperclass注解主要可以达到以下几点目的:
@EnableJpaRepositories:用于启用JPA存储库接口,以便Spring Boot应用程序能够自动扫描并管理这些接口。