# demo-jpa
**Repository Path**: cugjack/demo-jpa
## Basic Information
- **Project Name**: demo-jpa
- **Description**: 测试JPA的各项API和配置
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-05-13
- **Last Updated**: 2023-05-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: demo
## README
# JPA
## 引入方式
```
org.springframework.boot
spring-boot-starter-data-jpa
mysql
mysql-connector-java
5.1.44
```
## 创建实体类
```
@Data
@Table(name = "electron_url")
@Entity
public class ElectronUrl {
@Id
private int id;
private String url;
@Column(name = "title")
private String title;
}
```
## 创建dao
```
public interface ElectronUrlDao extends JpaRepository {
@Query(value = "SELECT * FROM electron_url WHERE url LIKE CONCAT('%',:ip,'%')", nativeQuery = true)
List findByUrlLike(@Param("ip") String ip);
}
```
## 使用
### 1.使用JPA原生的函数
#### findAll
(1) findAll不带参数
查询出所有的记录
(2) findAll(Sort var1) 排序
```
public List findAllBySort() {
// 按照某个字段倒排
Sort sort = new Sort(Sort.Direction.DESC, "id");
return electronUrlDao.findAll(sort);
}
```
(3) Page findAll(Pageable var1) 分页
```
public List findAllByPage() {
// page 默认从0开始,1 则表示第二页
Pageable pageable = PageRequest.of(1, 2);
Page page = electronUrlDao.findAll(pageable);
int totalPages = page.getTotalPages();
long totalElements = page.getTotalElements();
List electronUrlList = page.getContent();
int number = page.getNumber();
int size = page.getSize();
log.info("totalPages:{}", totalPages);
log.info("totalElements:{}", totalElements);
log.info("number:{}", number);
log.info("size:{}", size);
log.info("electronUrlList:{}", electronUrlList);
return electronUrlList;
}
```
### save
插入比较简单,没什么好记录的
### delete
删除就更简单了
### update
待完善
## 使用原生SQL语句
### 冒号
```
@Query(value = "SELECT * FROM electron_url WHERE title = :title", nativeQuery = true)
List findByTitleSql(String title);
```
### 问号
```
@Query(value = "SELECT * FROM electron_url WHERE id = ?1", nativeQuery = true)
List findByIdSql(Integer id);
```
### spEL表达式
```
@Query(value = "SELECT * FROM electron_url WHERE id = :#{#electronUrl.id} OR title = :#{#electronUrl.title}", nativeQuery = true)
List findByEntitySql(ElectronUrl electronUrl);
```
### 带引号
带引号的时候,是无法直接使用冒号或者问号的,需要使用函数 CONCAT
例如,使用 `like` 的时候
```
@Query(value = "SELECT * FROM electron_url WHERE url LIKE CONCAT('%',:ip,'%')", nativeQuery = true)
List findByUrlLike(@Param("ip") String ip);
```
### SQL 中的 IN
IN函数需要使用集合,所以参数就传入集合
```
@Query(value = "SELECT * FROM electron_url WHERE id in (?1)", nativeQuery = true)
List findByIdsSql(List idList);
```