SpringBoot整合Spring Data JPA

SpringBoot整合Spring Data JPA

  •  2019 年 6 月 13 日
  •  941
  •  Java SpringBoot JPA 

介绍

Spring Data JPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架,底层使用了Hibernate的JPA技术实现,可使开发者用极简的代码即可实现对数据的访问和操作!

话不多说,开始~

Maven

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

application.properties

# 数据库
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# jpa
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true

配置很简单,介绍一下spring.jpa.properties.hibernate.hbm2ddl.auto的几种属性:

  • create:每次加载Hibernate时都会删除上一次生成的表,然后重新生成新表。
  • create-drop:每次加载Hibernate时都会生成表,但当SessionFactory关闭时,所生成的表将自动删除。
  • update:最常用的属性值,第一次加载Hibernate时创建数据表,以后加载Hibernate时不会删除上一次生成的表,会根据实体更新,只新增字段,不会删除字段(即使实体中已经删除)。
  • validate:每次加载Hibernate时都会验证数据表结构,只会和已经存在的数据表进行比较,根据model修改表结构,但不会创建新表。

如果不配置该属性的话自动建表功能就不会被启动。

Entity

@Data
@Entity
public class User {

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false, unique = true)
    private String name;

    @Column(nullable = false)
    private Integer age;

}

如果没有使用Lombok的话使用是不能使用@Data注解的,没关系,生成Getter和Setter方法也是一样的

Repository

创建UserRepository接口继承JpaRepository,默认就支持简单的CRUD操作,还可以自定义SQL查询。

public interface UserRepository extends JpaRepository<User, Long> {

    User findUserById(Long id);

    User findUserByName(String name);

    void deleteUserById(Long id);

    @Modifying
    @Query("UPDATE User SET name = :name WHERE id = :id")
    void updateUser(@Param("id") Long id, @Param("name") String name);

}

注意:在进行更新或删除操作的时候必须使用@Transactional进行事务控制,否则会报错~

Test

public void test() {
    User user = new User();
    user.setName("张三");
    user.setAge(20);

    // 添加
    userRepository.save(user);

    // 查询
    User userByName = userRepository.findUserByName("张三");
    System.out.println(userByName);

    // 修改
    userByName.setName("李四");
    userRepository.save(userByName);
    User userById = userRepository.findUserById(userByName.getId());
    System.out.println(userById);

    // 删除
    userRepository.deleteUserById(userById.getId());
    System.out.println(userRepository.findUserById(userById.getId()));
}

源码地址

https://github.com/chenpeidong/spring-boot-demo

详细信息请看https://docs.spring.io/spring-data/jpa/docs/2.1.8.RELEASE/reference/html/

扫一扫分享到微信

已有 条评论
写评论