Spring(Boot中使用Spring data jpa的配置方法详解)

导读 大家好,综合小编来为大家讲解下Spring,Boot中使用Spring data jpa的配置方法详解这个很多人还不知道,现在让我们一起来看看吧!(资料图片

大家好,综合小编来为大家讲解下Spring,Boot中使用Spring data jpa的配置方法详解这个很多人还不知道,现在让我们一起来看看吧!

(资料图片)

为了解决抽象各种Java实体的基本“添加、删除、更改和查询”操作,我们通常会用泛型的方式封装一个模板Dao来简化抽象,但这仍然不是很方便。我们需要为每个实体编写一个从通用模板Dao继承的接口。

然后写接口的实现。尽管一些基本的数据访问可以很好地重用,但是代码结构中的每个实体都会有一堆Dao接口和实现。

由于模板Dao的实现,这些具体实体的Dao层变得很薄。一些具体实体的Dao实现可能只是模板Dao的代理,并且这样的实现类可能经常出现在许多实体中。

spring-data-jpa的出现,可以让这样一个已经很“薄”的数据访问层,变成只是一个接口编程层。例如,下面的例子:

公共接口用户知识库扩展JpaRepositoryUser,Long { User find by name(字符串名);@ Query(' from User u where u . name=:name ')User find User(@ Param(' name ')String name);}我们只需要通过编写一个继承自JpaRepository的接口就能完成数据访问,

使用示例

因为Spring-data-jpa依赖于Hibernate。如果你对Hibernate有所了解,你可以很容易地理解和使用Spring-data-jpa。如果你不熟悉冬眠,

可以从以下几个方面入手,然后建议回去学习Hibernate,帮助理解和进一步使用这部分。

工程配置

在pom.xml中添加相关依赖项,并添加以下内容:

Dependency groupIdorg.springframework.boot/groupId Artifact ID Spring-Boot-Starter-Data-JPA/Artifact ID/Dependency Configuration in application.xml: database connection information (not required if using embedded database), setting for automatically creating table structure,

春天。数据来源。URL=JDBC:MySQL://localhost:3306/test spring。数据来源。用户名=root spring。数据来源。密码=根弹簧。数据来源。driver-class-name=comMySQL。JDBC。驾驶员弹簧。JPA。属性。冬眠。hbm 2 DDL。auto=创建-丢弃弹簧。JPA。属性。冬眠。hbm 2 DDL。汽车是冬眠的配置属性,

创建:每次加载hibernate,最后生成的表都会被删除,然后根据你的模型类生成一个新的表,即使两次都没有变化。这是数据库表数据丢失的重要原因。

Create-drop:每次加载hibernate时,都会根据model类生成表,但是sessionFactory一关闭,表就会自动删除。更新:最常用的属性,

第一次加载hibernate时,会根据模型类自动建立表结构(前提是先建立数据库),以后加载hibernate时,会根据模型类自动更新表结构。

即使表结构发生变化,表中的行仍然存在,前面的行不会被删除。需要注意的是,当部署到服务器时,表结构不会立即建立,而是在应用程序第一次运行后才建立。验证:每次加载hibernate时,

验证会创建一个数据库表结构,它只会与数据库中的表进行比较。不会创建新表,但会插入新值。至此,基本配置完成。如果你在Spring下集成了它,

我相信你已经感受到了Spring Boot的便利:JPA的传统配置在persistence.xml文件中,但是我们在这里不需要它。当然,最好是按照前面提到的最佳实践工程结构来组织项目。

这确保了框架可以扫描所有的配置。

创建实体

创建一个用户实体,包括id(主键)、name(姓名)和age(年龄)属性,通过ORM框架映射到数据库表中。由于配置了hibernate.hbm2ddl.auto,

当应用程序启动时,框架会自动转到数据库创建相应的表。

@Entitypublic class user {@ id @ generatedvalue private long id; @Column(nullable=false) private string name; @Column(nullable=false) private integer age; //Omit the constructor//Omit the getter and setter} Create a data access interface

下面为用户实体创建相应的存储库接口,实现对实体的数据访问,代码如下:

public interface UserRepository extends JpaRepositoryUser, Long { User findByName(String name); User findByNameAndAge(String name, Integer age); @Query('from User u where u.name=:name') User findUser(@Param('name') String name);}在Spring-data-jpa中,

下面对上面的UserRepository做一些解释,该接口继承自JpaRepository,通过查看JpaRepository接口的API文档,

可以看到该接口本身已经实现了创建(save)、更新(save)、删除(delete)、查询(findAll、findOne)等基本操作的函数,因此对于这些基础操作的数据访问就不需要开发者再自己定义。

在我们实际开发中,JpaRepository接口定义的接口往往还不够或者性能不够优化,我们需要进一步实现更复杂一些的查询或操作。

由于本文重点在spring boot中整合spring-data-jpa,在这里先抛砖引玉简单介绍一下spring-data-jpa中让我们兴奋的功能,

后续再单独开篇讲一下spring-data-jpa中的常见使用。

在上例中,我们可以看到下面两个函数:

User findByName(String name)

User findByNameAndAge(String name, Integer age)它们分别实现了按name查询User实体和按name和age查询User实体,

可以看到我们这里没有任何类SQL语句就完成了两个条件查询方法。这就是Spring-data-jpa的一大特性:通过解析方法名创建查询。

总结

本文[高级伪原创标题]到此分享完毕,希望对大家有所帮助。

免责声明:本文由用户上传,如有侵权请联系删除!