概述
前面文章记录了Springboot整合Mybatis以及Spingboot整合JDBCTemlate的过程,这篇文章记录Springboot整合JPA操作过程。jpa实际也是用来操作数据库的持久层框架,如何使用jpa操作数据库,和Springboot整合Mybatis以及Spingboot整合JDBCTemlate一样,数据库连接池还是使用默认的连接池tomcat.jdbc.pool,我们不再配置Druid或者其他连接池,关于Springboot如何整合Druid或者其他连接池后面文章会给出。
什么是JPA?
全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。
为我们提供了:
1)ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
如:@Entity、@Table、@Column、@Transient等注解。
2)JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
如:entityManager.merge(T t);
3)JPQL查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
如:from Student s where s.name = ?
但是:
JPA仅仅是一种规范,也就是说JPA仅仅定义了一些接口,而接口是需要实现才能工作的。所以底层需要某种实现,而Hibernate就是实现了JPA接口的ORM框架。
也就是说:
JPA是一套ORM规范,Hibernate实现了JPA规范!如图:
什么是spring data jpa?
spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。
Spring Data JPA 可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现。如图:
接口约定命名规则:
实例:
springboot集成spring data jpa
引入stater
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
编写实体类
对POJO类增加Entity的注解,并指定表名(如果不指定,默认的表名为student),然后指定ID的及其生成策略,这些都是JPA的知识,与Spring boot无关,代码:
//使用jpa注解配置映射关系
@Entity//告诉jpa这是和数据库映射的类
@Table(name="tb_student")//table指明和哪个表映射 如果省略默认就是student表
public class Student {
//属性id
@Id//这是一个主键
@GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键
private Integer id;
//属性name
@Column(name = "name",length = 50)//默认属性就是列名
private String name;
编写接口
//继承JpaRepository完成对数据库的操作
public interface StuRepository extends JpaRepository<Student,Integer>{
public int add(Student student);
}
基本配置(能配置的都在都在JpaProperties类中)
#更新或者參加数据表
spring.jpa.hibernate.ddl-auto=update
#打印sql语句控制台
spring.jpa.show-sql=true
测试
@Controller
public class IndexController {
@Autowired
StuRepository stuRepository;
@GetMapping("/index/{id}")
public void index(@PathVariable ("id") Integer id){
//直接使用jpa提供好的方法
Student student = stuRepository.getOne(id);
System.out.println(student);
}
}
前面直接使用的是jpa规范中定义好的接口,我们也可自己在接口中定义方法
//继承JpaRepository完成对数据库的操作
public interface StuRepository extends JpaRepository<Student,Integer>{
@Query("select * from com.guxf.domain.Author au where id=:id")
public List<Student> queryByName(@Param("id") Integer id);
}
至此 Springboot整合jpa完成,有疑问可以关注我的公众号 java一号 联系