java persistence with jpa 2.1_SpringBoot2.x-整合JPA一

pom.xml配置

org.springframework.boot

spring-boot-starter-data-jdbc

org.springframework.boot

spring-boot-starter-web

mysql

mysql-connector-java

org.springframework.boot

spring-boot-devtools

runtime

true

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

org.springframework.boot

spring-boot-starter-data-jpa

application.properties配置

spring.datasource.url=jdbc:mysql://localhost:3306/v_chat?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.username=root

spring.datasource.password=123456

# JPA配置

spring.jpa.database=mysql

# 在控制台打印SQL

spring.jpa.show-sql=true

# 数据库平台

spring.jpa.database-platform=mysql

# 每次启动项目时,数据库初始化策略

spring.jpa.hibernate.ddl-auto=update

# 指定默认的存储引擎为InnoDB

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect

#遇到大写字母 加”_”的命名, 驼峰命名

spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

实体类对象

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

/**

*

 
 

* User -> 用户实体类

*

*

* @author 撸小鱼

* Copyright (c) lofish@foxmail.com

*/

@Entity(name = "t_user")

public class User{

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

private String username;

private String address;

public Long getId(){

return id;

}

public void setId( Long id ){

this.id = id;

}

public String getUsername(){

return username;

}

public void setUsername( String username ){

this.username = username;

}

public String getAddress(){

return address;

}

public void setAddress( String address ){

this.address = address;

}

}

dao接口定义

import net.lofish.xpra.model.User;

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.data.jpa.repository.Query;

import java.util.List;

/**

*

 
 

* UserDao -> dao层

*

*

* @author 撸小鱼

* Copyright (c) lofish@foxmail.com

*/

public interface UserDao extends JpaRepository{

List getUserByAddressEqualsAndIdLessThanEqual( String address, Long id );

//SQL nativeQuery的值是true 执行的时候不用再转化

@Query( value = "select * from t_user where id=(select max(id) from t_user)", nativeQuery = true )

User maxIdUser();

}

测试

@SpringBootTest

class SpringbootXpraApplicationTests{

@Autowired

UserDao userDao;

@Test

void contextLoads(){

}

@Test

void testUserDao(){

userDao.getUserByAddressEqualsAndIdLessThanEqual( "abc", 1l );

}

}

结果

Hibernate: select user0_.id as id1_0_, user0_.address as address2_0_, user0_.username as username3_0_ from t_user user0_ where user0_.address=? and user0_.id<=?

按照规范命名方法, jpa自动转换层对应的查询sql语句

Keyword

Sample

JPQL snippet

And

findByLastnameAndFirstname

... where x.lastname = ?1 and x.firstname = ?2

Or

findByLastnameOrFirstname

... where x.lastname = ?1 or x.firstname = ?2

"Is

Equals"

"findByFirstname,findByFirstnameIs,findByFirstnameEquals"

... where x.firstname = ?1

Between

findByStartDateBetween

... where x.startDate between ?1 and ?2

LessThan

findByAgeLessThan

... where x.age < ?1

LessThanEqual

findByAgeLessThanEqual

... where x.age <= ?1

GreaterThan

findByAgeGreaterThan

... where x.age > ?1

GreaterThanEqual

findByAgeGreaterThanEqual

... where x.age >= ?1

After

findByStartDateAfter

... where x.startDate > ?1

Before

findByStartDateBefore

... where x.startDate < ?1

IsNull

findByAgeIsNull

... where x.age is null

"IsNotNull

NotNull"

findByAge(Is)NotNull

... where x.age not null

Like

findByFirstnameLike

... where x.firstname like ?1

NotLike

findByFirstnameNotLike

... where x.firstname not like ?1

StartingWith

findByFirstnameStartingWith

... where x.firstname like ?1?(parameter bound with appended?%)

EndingWith

findByFirstnameEndingWith

... where x.firstname like ?1?(parameter bound with prepended?%)

Containing

findByFirstnameContaining

... where x.firstname like ?1?(parameter bound wrapped in?%)

OrderBy

findByAgeOrderByLastnameDesc

... where x.age = ?1 order by x.lastname desc

Not

findByLastnameNot

... where x.lastname <> ?1

In

findByAgeIn(Collection ages)

... where x.age in ?1

NotIn

findByAgeNotIn(Collection ages)

... where x.age not in ?1

TRUE

findByActiveTrue()

... where x.active = true

FALSE

findByActiveFalse()

... where x.active = false

IgnoreCase

findByFirstnameIgnoreCase

... where UPPER(x.firstame) = UPPER(?1)

Repository接口

CrudRepository 提供CRUD的功能

PagingAndSortingRepository 提供分页和排序功能

JpaRepository 提供JPA相关的方法,如刷新持久化数据、批量删除

Spring Data中的每个repository都继承自Repository接口,但是,除此之外,它们每个又有不同的功能

CrudRepository和PagingAndSortingRepository由Spring Data提供;JpaRepository 由Spring Data JPA提供,而Spring Data JPA又是Spring Data的一个子项目

,这就是两者的关系

25d60cacd30e21ac6b786de73269e1e0.png

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值