SpringBoot 2.2.0 SpringData JPA使用示例(一)

mac2024-07-09  55

SpringData Jpa使用步骤

SpringData简介:SpringData是Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。 其主要目标是使数据库的访问变得方便快捷。

建立springboot工程

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <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> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies>

注意设置: spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect,自动生成表时数据库引擎为InnoDB,默认生成为MyISAM,MySQL8Dialect为MySQL版本为8.0,如果版本为5.7 则改为MySQL57Dialect。

spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://192.168.1.11:3306/SpringData?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true spring.jpa.show-sql=true spring.jpa.database=mysql spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto=update spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

建立实体类

@Data @Entity @Table public class Article { /** * 主键 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String title; private String name; private LocalDateTime createDateTime; }

建立Repository

/** * 继承springdata jpa 提供的JpaRepository<实体类型,主键参数类型> */ public interface ArticleRepository extends JpaRepository<Article, Integer> { }

测试使用

添加或更新

@Autowired private ArticleRepository articleRepository; @Test public void saveTest() { //保存单个 Article article = new Article(); article.setName("felix"); article.setTitle("SpringData"); article.setId(2); article.setCreateDateTime(LocalDateTime.now()); Article article1 = articleRepository.save(article); log.info("Article:{}", article1); Article article2 = new Article(); article2.setName("felix"); article2.setTitle("SpringData"); article2.setCreateDateTime(LocalDateTime.now()); //批量保存多个 List<Article> articles = new ArrayList<>(); articles.add(article); articles.add(article2); List<Article> articles1 = articleRepository.saveAll(articles); log.info("articles1:{}", articles1); Article article3 = articleRepository.saveAndFlush(article); log.info("article3:{}", article3); } 保存 三个方法save(),saveAll(),saveAndFlush():先查询后保存:

save():执行保存过程

Hibernate: select article0_.id as id1_0_0_, article0_.create_date_time as create_d2_0_0_, article0_.name as name3_0_0_, article0_.title as title4_0_0_ from article article0_ where article0_.id=? Hibernate: insert into article (create_date_time, name, title) values (?, ?, ?)

saveAll():执行保存过程

Hibernate: select article0_.id as id1_0_0_, article0_.create_date_time as create_d2_0_0_, article0_.name as name3_0_0_, article0_.title as title4_0_0_ from article article0_ where article0_.id=? Hibernate: insert into article (create_date_time, name, title) values (?, ?, ?) Hibernate: insert into article (create_date_time, name, title) values (?, ?, ?)

saveAndFlush():执行保存过程

Hibernate: select article0_.id as id1_0_0_, article0_.create_date_time as create_d2_0_0_, article0_.name as name3_0_0_, article0_.title as title4_0_0_ from article article0_ where article0_.id=? Hibernate: insert into article (create_date_time, name, title) values (?, ?, ?)

更新

只要保存实体时主键不为空, save():执行保存过程

Hibernate: select article0_.id as id1_0_0_, article0_.create_date_time as create_d2_0_0_, article0_.name as name3_0_0_, article0_.title as title4_0_0_ from article article0_ where article0_.id=? Hibernate: update article set create_date_time=?, name=?, title=? where id=?

saveAll():执行保存过程

Hibernate: select article0_.id as id1_0_0_, article0_.create_date_time as create_d2_0_0_, article0_.name as name3_0_0_, article0_.title as title4_0_0_ from article article0_ where article0_.id=? Hibernate: select article0_.id as id1_0_0_, article0_.create_date_time as create_d2_0_0_, article0_.name as name3_0_0_, article0_.title as title4_0_0_ from article article0_ where article0_.id=? Hibernate: update article set create_date_time=?, name=?, title=? where id=?

saveAndFlush():执行保存过程

Hibernate: select article0_.id as id1_0_0_, article0_.create_date_time as create_d2_0_0_, article0_.name as name3_0_0_, article0_.title as title4_0_0_ from article article0_ where article0_.id=? Hibernate: update article set create_date_time=?, name=?, title=? where id=?

删除

@Test public void deleteTest() { //根据ID删除 articleRepository.deleteById(1); //根据实体删除 Article article = new Article(); article.setId(1); articleRepository.delete(article); //批量删除 articleRepository.deleteAllInBatch(); //删除所有 articleRepository.deleteAll(); List<Article> articles = new ArrayList<>(); articles.add(article); //删除所有 articleRepository.deleteAll(articles); //批量删除 articleRepository.deleteInBatch(articles); } deleteById(id) 根据主键删除,执行过程先查询在删除, Hibernate: select article0_.id as id1_0_0_, article0_.create_date_time as create_d2_0_0_, article0_.name as name3_0_0_, article0_.title as title4_0_0_ from article article0_ where article0_.id=? Hibernate: delete from article where id=?

如果Id不存在会出现异常org.springframework.dao.EmptyResultDataAccessException: No class com.felix.springdata.model.Article entity with id 1 exists!, 2. delete(S s) 根据实体删除,执行过程同deleteById ,先查询Id是否存在,存再删除,不存在不执行删除 3. deleteAllInBatch() 直接删除

Hibernate: delete from article

4.deleteAll() 删除全部,先查询,再删除,没有数据,只执行查询语句

Hibernate: select article0_.id as id1_0_, article0_.create_date_time as create_d2_0_, article0_.name as name3_0_, article0_.title as title4_0_ from article article0_ Hibernate: delete from article where id=? Hibernate: delete from article where id=? Hibernate: delete from article where id=? Hibernate: delete from article where id=?

5.deleteAll(S s) 删除全部, 先查询id是否存在,再删除

Hibernate: select article0_.id as id1_0_0_, article0_.create_date_time as create_d2_0_0_, article0_.name as name3_0_0_, article0_.title as title4_0_0_ from article article0_ where article0_.id=? Hibernate: delete from article where id=?

6.deleteInBatch() 删除全部,主要是根据id删除

Hibernate: delete from article where id=? or id=?
最新回复(0)