SpringBoot JPA常用注解如何使用

发布时间:2023-05-10 17:43:08 作者:iii
来源:亿速云 阅读:174

SpringBoot JPA常用注解如何使用

目录

  1. 引言
  2. JPA简介
  3. Spring Boot与JPA集成
  4. 常用JPA注解
  5. 总结

引言

在现代Java开发中,Spring Boot和JPA(Java Persistence API)的结合已经成为了一种非常流行的技术栈。Spring Boot提供了快速开发和部署的能力,而JPA则为Java开发者提供了一种简单的方式来操作数据库。本文将详细介绍Spring Boot中JPA的常用注解及其使用方法,帮助开发者更好地理解和应用这些注解。

JPA简介

JPA(Java Persistence API)是Java EE的一部分,提供了一种对象关系映射(ORM)的规范。它允许开发者通过Java对象来操作数据库,而不需要编写复杂的SQL语句。JPA的主要实现有Hibernate、EclipseLink等。

Spring Boot与JPA集成

Spring Boot通过spring-boot-starter-data-jpa依赖简化了JPA的集成。只需在pom.xml中添加以下依赖,Spring Boot就会自动配置JPA相关的组件:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

此外,还需要在application.propertiesapplication.yml中配置数据库连接信息:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update

常用JPA注解

@Entity

@Entity注解用于标识一个类是一个JPA实体类,表示该类将映射到数据库中的一张表。

@Entity
public class User {
    // 类中的属性和方法
}

@Table

@Table注解用于指定实体类映射到数据库中的表名。如果不指定,默认使用类名作为表名。

@Entity
@Table(name = "users")
public class User {
    // 类中的属性和方法
}

@Id

@Id注解用于标识实体类中的主键字段。

@Entity
public class User {
    @Id
    private Long id;
    // 其他属性和方法
}

@GeneratedValue

@GeneratedValue注解用于指定主键的生成策略。常用的策略有GenerationType.IDENTITYGenerationType.SEQUENCEGenerationType.TABLEGenerationType.AUTO

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 其他属性和方法
}

@Column

@Column注解用于指定实体类中的字段映射到数据库表中的列名及其属性。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "user_name", nullable = false, length = 50)
    private String userName;
    // 其他属性和方法
}

@Transient

@Transient注解用于标识实体类中的字段不映射到数据库表中的列。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Transient
    private String tempData;
    // 其他属性和方法
}

@Temporal

@Temporal注解用于指定日期类型的字段在数据库中的存储格式。常用的类型有TemporalType.DATETemporalType.TIMETemporalType.TIMESTAMP

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Temporal(TemporalType.DATE)
    private Date birthDate;
    // 其他属性和方法
}

@Enumerated

@Enumerated注解用于指定枚举类型的字段在数据库中的存储方式。常用的方式有EnumType.ORDINALEnumType.STRING

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Enumerated(EnumType.STRING)
    private Gender gender;
    // 其他属性和方法
}

@Lob

@Lob注解用于标识字段为大对象类型,通常用于存储大文本或二进制数据。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Lob
    private String description;
    // 其他属性和方法
}

@OneToOne

@OneToOne注解用于标识实体类之间的一对一关系。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToOne
    private Address address;
    // 其他属性和方法
}

@OneToMany

@OneToMany注解用于标识实体类之间的一对多关系。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "user")
    private List<Order> orders;
    // 其他属性和方法
}

@ManyToOne

@ManyToOne注解用于标识实体类之间的多对一关系。

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
    // 其他属性和方法
}

@ManyToMany

@ManyToMany注解用于标识实体类之间的多对多关系。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToMany
    @JoinTable(name = "user_role",
               joinColumns = @JoinColumn(name = "user_id"),
               inverseJoinColumns = @JoinColumn(name = "role_id"))
    private List<Role> roles;
    // 其他属性和方法
}

@JoinColumn

@JoinColumn注解用于指定外键列的属性。

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "user_id", nullable = false)
    private User user;
    // 其他属性和方法
}

@JoinTable

@JoinTable注解用于指定多对多关系中的中间表。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToMany
    @JoinTable(name = "user_role",
               joinColumns = @JoinColumn(name = "user_id"),
               inverseJoinColumns = @JoinColumn(name = "role_id"))
    private List<Role> roles;
    // 其他属性和方法
}

@Embedded

@Embedded注解用于标识一个嵌入类,表示该类的属性将嵌入到当前实体类中。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Embedded
    private Address address;
    // 其他属性和方法
}

@Embeddable

@Embeddable注解用于标识一个类是可嵌入的,表示该类的属性可以被嵌入到其他实体类中。

@Embeddable
public class Address {
    private String street;
    private String city;
    private String zipCode;
    // 其他属性和方法
}

@MappedSuperclass

@MappedSuperclass注解用于标识一个类是其他实体类的父类,表示该类的属性将被继承到子类中。

@MappedSuperclass
public class BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 其他属性和方法
}

@Entity
public class User extends BaseEntity {
    private String userName;
    // 其他属性和方法
}

@Inheritance

@Inheritance注解用于指定实体类的继承策略。常用的策略有InheritanceType.SINGLE_TABLEInheritanceType.JOINEDInheritanceType.TABLE_PER_CLASS

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 其他属性和方法
}

@Entity
public class Employee extends Person {
    private String department;
    // 其他属性和方法
}

@DiscriminatorColumn

@DiscriminatorColumn注解用于指定单表继承策略中的鉴别器列。

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "person_type", discriminatorType = DiscriminatorType.STRING)
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 其他属性和方法
}

@Entity
@DiscriminatorValue("employee")
public class Employee extends Person {
    private String department;
    // 其他属性和方法
}

@DiscriminatorValue

@DiscriminatorValue注解用于指定单表继承策略中实体类的鉴别器值。

@Entity
@DiscriminatorValue("employee")
public class Employee extends Person {
    private String department;
    // 其他属性和方法
}

@NamedQuery

@NamedQuery注解用于定义命名查询。

@Entity
@NamedQuery(name = "User.findByUserName", query = "SELECT u FROM User u WHERE u.userName = :userName")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String userName;
    // 其他属性和方法
}

@NamedQueries

@NamedQueries注解用于定义多个命名查询。

@Entity
@NamedQueries({
    @NamedQuery(name = "User.findByUserName", query = "SELECT u FROM User u WHERE u.userName = :userName"),
    @NamedQuery(name = "User.findByEmail", query = "SELECT u FROM User u WHERE u.email = :email")
})
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String userName;
    private String email;
    // 其他属性和方法
}

@Query

@Query注解用于在Repository接口中定义自定义查询。

public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.userName = :userName")
    User findByUserName(@Param("userName") String userName);
}

@Modifying

@Modifying注解用于标识一个查询是更新操作。

public interface UserRepository extends JpaRepository<User, Long> {
    @Modifying
    @Query("UPDATE User u SET u.userName = :userName WHERE u.id = :id")
    void updateUserName(@Param("id") Long id, @Param("userName") String userName);
}

@Transactional

@Transactional注解用于标识一个方法需要事务管理。

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @Transactional
    public void updateUserName(Long id, String userName) {
        userRepository.updateUserName(id, userName);
    }
}

总结

本文详细介绍了Spring Boot中JPA的常用注解及其使用方法。通过掌握这些注解,开发者可以更加高效地进行数据库操作,提升开发效率。希望本文能对你在Spring Boot项目中使用JPA有所帮助。

推荐阅读:
  1. SpringBoot中怎么使用FreeMarker
  2. SpringBoot中如何使用Thymeleaf操作

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springboot jpa

上一篇:怎么使用JS实现一个跟随鼠标移动洒落的星星特效

下一篇:Python中JsonPath提取器和正则提取器怎么使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》