标签:col mave lease drop center ignore 接口 class void
springBoot整合JPA
JPA官网: https://docs.spring.io/spring-data/jpa/docs/2.3.1.RELEASE/reference/html/#jpa.repositories
maven 依赖:
<!--spring-data-jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
yml:
spring:
application:
name: jpa-study
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# mysql 8.0 以下
# url: jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf8&autoReconnect=true
# driver-class-name: com.mysql.jdbc.Driver
# mysql 8.0 以上使用
url: jdbc:mysql://localhost:3306/my-study?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
jpa:
hibernate:
# 自动更新ddl-auto是hibernate的配置属性,其主要作用是:自动创建、更新、验证数据库表结构。该参数的几种配置如下:
# ·create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
# ·create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
# ·update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
# ·validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
ddl-auto: update
# 开启驼峰_转换
naming:
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
# 日志中显示sql语
show-sql: true
新建实体Person类:
@Entity
@Data
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", length = 20)
private String name;
@Column(name = "age", length = 4)
private int age;
}
Dao:
@Repository
public interface PersonRepository extends JpaRepository<Person, Long> {
}
controller:
@RestController public class PersonController { @Autowired private PersonRepository personRepository; @PostMapping(path = "addPerson") public void addPerson(Person person) { personRepository.save(person); } @DeleteMapping(path = "deletePerson") public void deletePerson(Long id) { personRepository.deleteById(id); } @GetMapping("getPerson") public Object getPerson(){ Optional<Person> byId = personRepository.findById(1L); return personRepository.findById(1L); } }
自定义查询--根据方法名创建查询
方法名称中受支持的关键字
关键词 | 示例 | JPQL片段 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Query
使用@Query注解在接口方法之上自定义执行SQL。
eg:
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.emailAddress = ?1")
User findByEmailAddress(String emailAddress);
}
like
@Query中的高级表达式
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.firstname like %?1")
List<User> findByFirstnameEndsWith(String firstname);
}
本地查询
该 @Query
注释允许通过设定运行的原生查询 nativeQuery
标志设置为true,如图以下示例:
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery = true)
User findByEmailAddress(String emailAddress);
}
通过使用以下方法在查询方法中声明本机计数查询以进行分页 @Query
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
nativeQuery = true)
Page<User> findByLastname(String lastname, Pageable pageable);
}
排序可以通过提供PageRequest
或Sort
直接使用来完成
修改查询
@Modifying
,如以下示例所示:
标签:col mave lease drop center ignore 接口 class void
原文地址:https://www.cnblogs.com/dw3306/p/13162537.html