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) [email protected] */ @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) [email protected] */ 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的一个子项目
,这就是两者的关系

SpringBoot2.x-整合JPA一_第1张图片

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

你可能感兴趣的:(spring)