本文介绍一下JPA常见的两种查询方式。
注:数据库为Oracle
1.前置准备
1.引入jar包
使用JPA,首先引入jar包,一个是JPA,另一个是数据库驱动,我使用的是Oracle数据库。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
2.定义Entity
@Entity
@Data
@Table(name = "TEST_TABLE_01", schema = "LOCAL")
public class Table01Entity {
@Id
private long id;
private String fileType;
private String fileSize;
private String fileName;
}
2.数据查询
方式一:使用自带的方法进行查询
此方法只适用于简单sql,优点是不需要写sql,直接在service里调用方法就好,代码比较简单。
service类
@Service
public class Table01ServiceImpl {
@Autowired
Table01Repository table01Repository;
public Table01Entity findById(long id) {
Table01Entity entity = table01Repository.findById(id);
return entity;
}
}
repository类,继承JpaRepository即可,不需要写任何方法。
@Repository
public class Table01Repository extends JpaRepository<Table01Entity, Long>, JpaSpecificationExecutor {
}
方式二:使用@query自定义sql
这种方式允许你自己写sql,方便实现比较复杂的查询。
service类
@Service
public class Table01ServiceImpl {
@Autowired
Table01Repository table01Repository;
public Table01Entity findByIdOnYourOwn(long id) {
Table01Entity entity = table01Repository.findByIdOnYourOwn(id);
return entity;
}
}
repository类,定义findByIdOnYourOwn()方法。
@Repository
public class Table01Repository extends JpaRepository<Table01Entity, Long>, JpaSpecificationExecutor {
@Query(value = "select * from Table01Entity " +
"where fileName=''123.txt")
public List<Table01Entity> findByIdOnYourOwn();
}
你可能发现了,上面跟在from后面的并不是表名,而是Entity的名字,这是默认的写法,如果你想使用原生的sql,在@Query里加上nativeQuery = true就可以了
@Repository
public class Table01Repository extends JpaRepository<Table01Entity, Long>, JpaSpecificationExecutor {
@Query(value = "select * from TEST_TABLE_01 t1" +
"where t1.file_name=''123.txt", nativeQuery = true)
public List<Table01Entity> findByIdOnYourOwn();
}
结束。