Spring Boot – JPA配置使用[通俗易懂]

1.JPA是什么JPA顾名思义就是JavaPersistenceAPI的意思,是JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。2.使用JPA的优势2.1标准化JPA是JCP组织发布的JavaEE标准之一,因此任何声称符合JPA标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的…

大家好,又见面了,我是你们的朋友全栈君。

1.JPA是什么

JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

2.使用JPA的优势

2.1标准化
JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。
2.2容器级特性的支持
JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。
2.3简单方便
JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity进行注释,JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易的掌握。JPA基于非侵入式原则设计,因此可以很容易的和其它框架或者容器集成。
2.4查询能力
JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
2.4高级特性
JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

更多的JPA知识可以自己相关学习下.

3.配置Spring Boot 数据源和JPA配置

Jpa配置

  1. 配置Spring Boot的maven依赖

    <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>
    
  2. Spring Boot的JPA配置

    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.show-sql=true
    
  3. Spring Boot数据库连接配置

    spring.datasource.url=jdbc:mysql://localhost:3306/springboottest?useUnicode=true&characterEncoding=utf-8
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    

4.创建测试实体类和测试方法

  1. 创建实体类User类(图1位置)

    @Entity
    @Table(name = "User")
    public class User {
    
    	public User() {
    		
    	}
    	
    	public User(String username, int age) {
    		this.username = username;
    		this.age = age;
    	}
    	
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	private Integer id;
    	
    	@Column
    	private String username;
    	
    	@Column
    	private int age;
    
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    
    	public String getUsername() {
    		return username;
    	}
    
    	public void setUsername(String username) {
    		this.username = username;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    }
    
  2. 定义接口,继承JpaRepository(图2位置)

    public interface TestUserDao extends JpaRepository<User, Integer> {}
    
  3. 写入增删改查代码于测试类中(图3所示)

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringBootDemo8ApplicationTests {
    
    	@Test
    	public void contextLoads() {
    	}
    
    	@Autowired
    	private TestUserDao testUserDao;
    	
    	@Test
    	public void insert() {
    		User user= new User();
    		user.setUsername("zhang san");
    		user.setAge(23);
    		testUserDao.save(user);
    	}
    
    	@Test
    	public void update() {
    		User user = new User();
    		user.setId(1);
    		user.setAge(18);
    		user.setUsername("李四");
    		testUserDao.save(user);
    	}
    	
    	@Test
    	public void select() {
    		Optional<User> user = testUserDao.findById(1);
    		System.out.println(user);
    	}
    	
    	@Test
    	public void delete() {
    		testUserDao.deleteById(1);
    	}
    }
    

    执行insert方法,可以看到console面板输出sql语句;查看数据库,能看到表已经被创建,同时插入了一条信息

    insert输出sql

    这里写图片描述
    依次执行以下几个测试方法,都能看到修改、查询和删除生效,此处配置已经都OK.

4. Spring JpaRepository其他查询方式

  1. 除了以上基础的CRUD操作外,我们可以查询Spring Data JPA文档中找到很多使用方法,例如拼接两个条件的查询,我们可以在TestUserDao中创建接口方法User findByUsernameAndAge(String string, int i);,然后使用中调用此方法传入用户名和年龄查询.

  2. 如果在API中提供的查询仍然无法满足我们的查询的话,我们可以在TestUserDao写入如下方法

    @Query("select t from User t where t.username = ?1")
    User findByUsername(String username);
    

    在测试类中,写入方法

    @Test
    public void findByUsername() {
    	User user = testUserDao.findByUsername("李四");
    	System.out.println(user);
    }
    

    执行结果
    自定义jpa查询
    此外,Spring JpaRepository还有其他很多方便的使用方法,有时间可以多了解下,这里就不多说.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124654.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux下修改配置文件内容

    Linux下修改配置文件内容文件操作之修改配置文件内容在一些系统或者游戏运行时经常遇到一些情况需要修改一下配置文件的内容,比如游戏中任务升级了,需要修改人物等级,那么这是怎么完成的呢?好,我还是老规矩先来介绍一个函数,strstr一样的查看手册可以看到,该函数有两个参数,第一个参数要查询的字符串,第二个参数是目标子字符串,返回值是一个指针,指向子字符串的开头,如果没有那么返回NULL,什么意思呢,举个例子,比如CHINAENGLISH字符串,我要查找ENGLISH,使用strstr后,返回一个字符指针,指到E位置。好,介绍完

    2022年7月26日
  • Cannot get a STRING value from a NUMERIC cell poi异常解决[通俗易懂]

    Cannot get a STRING value from a NUMERIC cell poi异常解决[通俗易懂]ref:http://www.tpyyes.com/a/kuozhan/2017/0902/199.html poi导入excel表格数据时报java.lang.IllegalStateException:CannotgetaSTRINGvaluefromaNUMERICcell异常是因为在读取cell单元格字符串时,有number类型的数据,因此需要把它转化为纯String类型…

    2022年10月29日
  • JavaScript高级程序设计(读书笔记)(七)[通俗易懂]

    JavaScript高级程序设计(读书笔记)(七)[通俗易懂]本笔记汇总了作者认为“JavaScript高级程序设计”这本书的前七章知识重点,仅供参考。第七章函数表达式小结:在JavaScript编程中,函数表达式是一种非常有用的技术。使用函数表达式可以无须对函数命名,从而实现动态编程。匿名函数,也称为拉姆达函数,是一种使用JavaScript函数的强大方式。以下总结了函数表达式的特点。函数表达式不同于函数声明。

    2022年8月20日
  • python的for循环是什么循环_while循环的用法举例

    python的for循环是什么循环_while循环的用法举例在本篇博客中,我们将讨论Python中for循环的原理。我们将从一组基本例子和它的语法开始,还将讨论与for循环关联的else代码块的用处。然后我们将介绍迭代对象、迭代器和迭代器协议,还会学习如何创建自己的迭代对象和迭代器。之后,我们将讨论如何使用迭代对象和迭代器实现for循环,以及利用while循环通过迭代器协议实现for循环逻辑。最后,我们将反编译一…

    2022年8月12日
  • java工程师青春饭吗_Java工程师是青春饭吗?

    java工程师青春饭吗_Java工程师是青春饭吗?首先来说说,为什么会有些开发人员会被裁掉呢?因为Java行业是竞争力比较大的行业,由于现在社会上的各种对Java行业的宣传,现在越来也多的年轻人学习Java技能并想找Java相关的工作,这就使得一些人如果找到工作后不好好工作浑水摸鱼就很容易被别的年轻人挤掉工作岗位。其次Java开发并不是一门熟能生巧的工作,Java开发技术日新月异,更新换代很快,所以并不是你掌握好几项Java技术并找到工作后就能安…

    2022年7月7日
  • cuDNN安装教程(Windows)「建议收藏」

    cuDNN安装教程(Windows)「建议收藏」简介NVIDIACUDA®深度神经网络库(cuDNN)是一个用于深度神经网络的GPU原始加速库。cuDNN为标准例程(如前向和反后卷积、池化、归一化和激活层)提供了高度调整的实现。世界各地的深度学习研究人员和框架开发人员依靠cuDNN获得高性能GPU加速。它允许他们专注于培训神经网络和开发软件应用程序,而不是花时间在低级别的GPU性能调整上。cuDNN加速广泛使用的深度学习框架,包括Caffe2、Chainer、Keras、MATLAB、MxNet、PaddlePaddle、PyTorch和T

    2022年6月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号