Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Spring Boot 2.x Ö® Spring Data JPA, Hibernate 5
 
×÷Õߣº CokeCode
  4427  次浏览      27
 2020-7-31
 
±à¼­ÍƼö:
±¾ÎÄÖ÷ÒªÃèÊöÁËSpring Boot³£ÓÃÅäÖÃÏ¿ª·¢³£ÓÃ×¢½â¡ª¡ª±í/ʵÌåÀà¡¢×Ö¶Î/ÓòʹÓã¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ° £¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

1. Spring Boot³£ÓÃÅäÖÃÏî

»ùÓÚSpring Boot 2.0.6.RELEASE

1.1 ÅäÖÃÊôÐÔÀà

spring.jpaǰ׺µÄÏà¹ØÅäÖÃÏÒåÔÚJpaPropertiesÀàÖУ¬

1.2 ×Ô¶¯×°ÅäÀà

Éæ¼°µ½µÄ×Ô¶¯ÅäÖÃÀà°üÀ¨£ºJpaBaseConfiguration£¬HibernateJpaAutoConfiguration

1.3 ³£ÓÃÅäÖÃÏî

# ÊÇ·ñ¿ªÆôJPA Repositories£¬È±Ê¡: true
spring.data.jpa.repositories.enabled=true
# JPAÊý¾Ý¿âÀàÐÍ£¬Ä¬ÈÏ¿ÉÒÔ×Ô¶¯¼ì²â£¬Ò²ÄÜͨ¹ýÉèÖÃ
spring.jpa.database-platform´ïµ½Í¬ÑùЧ¹û
spring.jpa.database=ORACLE
# Êý¾Ý¿âƽ̨£¬³£¼ûµÄÖµÈ磺
# org.hibernate.dialect.Oracle10gDialect
# org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
# ÊÇ·ñʹÓÃJPA³õʼ»¯Êý¾Ý¿â£¬¿ÉÒÔÔÚÆô¶¯Ê±
Éú³ÉDDL´´½¨Êý¾Ý¿â±í£¬È±Ê¡Îªfalse
spring.jpa.generate-ddl = false
# ¸üϸÁ£¶ÈµÄ¿ØÖÆJPA³õʼ»¯Êý¾Ý¿âÌØÐÔ£¬
ÓÃÀ´É趨Æô¶¯Ê±DDL²Ù×÷µÄÀàÐÍ£¬ÏÂÎÄÓÐÏêϸ½éÉÜ
# ÄÚǶÊý¾Ý¿â hsqldb, h2, derbyµÄȱʡֵΪcreate-drop
# ·ÇÄÚǶÊý¾Ý¿âµÄȱʡֵΪnone
spring.jpa.hibernate.ddl-auto = update
# Hibernate²Ù×÷ʱÏÔÊ¾ÕæÊµµÄSQL, ȱʡ£ºfalse
spring.jpa.show-sql = true
# Hibernate 5 Òþº¬ÃüÃû²ßÂÔÀàµÄÈ«ÏÞ¶¨Ãû
spring.jpa.hibernate.naming.implicit-strategy=
# Hibernate 5 ÎïÀíÃüÃû²ßÂÔÀàµÄÈ«ÏÞ¶¨Ãû
spring.jpa.hibernate.naming.physical-strategy=org.
hibernate.boot.model.naming.
PhysicalNamingStrategyStandardImpl
# Use Hibernate's newer IdentifierGenerator for AUTO, TABLE and SEQUENCE.
spring.jpa.hibernate.use-new-id-generator-mappings=
# ¶îÍâÉèÖÃJPAÅäÖÃÊôÐÔ£¬Í¨³£ÅäÖÃÏîÊÇÌØ¶¨ÊµÏÖ
Ö§³ÖµÄ£¬ÈçHibernate³£ÓÐÏÂÃæµÄ¼¸ÌõÅäÖÃÏî
spring.jpa.properties.* =
# ½«SQLÖеıêʶ·û£¨±íÃû£¬ÁÐÃûµÈ£©È«²¿Ê¹ÓÃÒýºÅÀ¨ÆðÀ´
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
# ÈÕÖ¾¼Ç¼ִÐеÄSQL
spring.jpa.properties.hibernate.show_sql = true
# ÊÇ·ñ½«¸ñʽ»¯SQLÈÕÖ¾
spring.jpa.properties.hibernate.format_sql = true
# ÊÇ·ñ×¢²áOpenEntityManagerInViewInterceptor.
°ó¶¨JPA EntityManager µ½ÇëÇóÏß³ÌÖÐ. ĬÈÏΪ: true.
spring.jpa.open-in-view=true
# Hibernate 4 ÃüÃû²ßÂÔµÄÈ«ÀàÃû£¬Hibernate 5²»ÔÙÊÊÓÃ
spring.jpa.hibernate.naming-strategy=

1.4 ÅäÖÃÏî spring.jpa.database

ÅäÖÃÏîspring.jpa.databaseµÄֵͨ³£¿ÉÒÔ×Ô¶¯¼ì²â£¬¿Éȡֵ°üÀ¨ÁË£º

public enum Database {
DEFAULT,
DB2,
DERBY,
H2,
HSQL,
INFORMIX,
MYSQL,
ORACLE,
POSTGRESQL,
SQL_SERVER,
SYBASE
}

1.5 ÅäÖÃÏîspring.jpa.generate-ddl ºÍ spring.jpa.hibernate.ddl-auto

ÅäÖÃÏîspring.jpa.generate-ddl¹ÜÀíÊÇ·ñ¿ªÆô×Ô¶¯³õʼ»¯SchemaÌØÐÔ£¬

ÅäÖÃÏîspring.jpa.hibernate.ddl-auto ½øÒ»²½¿ØÖÆÆô¶¯Ê±³õʼ»¯SchemaµÄÌØÐÔ£¬ÓÐÒÔÏ¿Éѡֵ£º

create, Æô¶¯Ê±É¾³ýÉÏÒ»´ÎÉú³ÉµÄ±í£¬²¢¸ù¾ÝʵÌåÀàÉú³É±í£¬±íÖеÄÊý¾Ý½«±»Çå¿Õ£»

create-drop£¬Æô¶¯Ê±¸ù¾ÝʵÌåÀàÉú³É±í£¬sessionFactory¹Ø±Õʱɾ³ý±í£»

update£¬Æô¶¯Ê±¸ù¾ÝʵÌåÀàÉú³É±í£¬µ±ÊµÌåµÄÊôÐԱ䶯ʱ£¬±í½á¹¹Ò²»á¸üУ¬¿ª·¢½×¶Î¿ÉÒÔʹÓøÃÊôÐÔ£»

validate£¬Æô¶¯Ê±Ñé֤ʵÌåÀàºÍÊý¾Ý±íÊÇ·ñÒ»Ö£¬ÔÚÊý¾Ý½á¹¹Îȶ¨Ê±¿ÉÒÔ²ÉÈ¡¸ÃÑ¡Ï

none£¬²»²ÉÈ¡ÈκβÙ×÷£»

1.6 ÅäÖÃÏîhibernate.globally_quoted_identifiers

ÅäÖÃÏîhibernate.globally_quoted_identifiersÓÃÀ´ÔÚSQLÖмÓÈëÒýºÅ£¬ÒÔ½â¾öijЩ³¡¾°ÖÐSQL±êʶ·û£¨±íÃû£¬ÁÐÃûµÈ£©³öÏÖÁËÊý¾Ý¿â¹Ø¼ü×ÖµÄÇéÐΡ£

OracleÖУ¬¸ÃÊôÐÔ¸ø±êʶ·û¼ÓË«ÒýºÅ£¬×¢ÒâOracleË«ÒýºÅÖеÄÄÚÈÝÇø·Ö´óСд£»

MySQLÖУ¬¸ÃÊôÐÔ¸ø±êʶ·û¼Ó·´ÒýºÅ£¨Ã»´í£¬¾ÍÊǼüÅÌÊý×Ö1×óÃæµÄÄǸö`£©£¬×¢ÒâĬÈÏÇé¿öÏ£¬MySQLµÄ±íÃûÇø·Ö´óСд£¬µ«ÁÐÃû²»Çø·Ö´óСд£¬ÔÚ·´ÒýºÅÖÐÒ²ÊÇÈç´Ë¡£

2. ¿ª·¢³£ÓÃ×¢½â¡ª¡ª±í/ʵÌåÀàʹÓÃ

2.1 @Entity

@EntityÓÃÔÚʵÌåÀàÉÏ£¬±íʾÕâÊÇÒ»¸öºÍÊý¾Ý¿â±íÓ³ÉäµÄʵÌåÀà¡£

2.2 @Table

@TableÓÃÀ´ÉùÃ÷ʵÌåÀà¶ÔÓ¦µÄ±íÐÅÏ¢¡£°üÀ¨±íÃû³Æ¡¢Ë÷ÒýµÈ¡£

2.3 @SQLDelete£¬

@SQLDeleteÓÃÀ´×Ô¶¨Òåɾ³ýÓï¾ä£¬

Èç¹û²»ÏëʹÓÃJPA Repository×Ô´øµÄɾ³ýÓï¾ä£¬¾Í¿ÉÒÔʹÓøÃ×¢½âÖØÐ´£¬Èç³£¼ûµÄÈíɾ³ý£º

@Entity
@Table(name = "App")
@SQLDelete(sql = "Update App set isDeleted = 1 where id = ?")

@WhereÓÃÀ´Ö¸¶¨Ä¬ÈϲéѯÌõ¼þ£¬¿ÉÒÔÓÃÀ´ÅäºÏÈíɾ³ý¡£

@Entity
@Table(name = "App")
@SQLDelete(sql = "Update App set isDeleted = 1 where id = ?")
@Where(clause = "isDeleted = 0")

2.4 @MappedSuperclass

@MappedSuperclassÓÃÀ´¶¨ÒåÈô¸É±íÖй«¹²µÄ×ֶΣ¬½«ËüÃÇ·â×°ÔÚÒ»¸ö»ùÀàÖУ¬»ùÀàÉÏʹÓøÃ×¢½â£¬ÔòÆä×ÓʵÌåÀཫ×Ô¶¯»ñµÃ¸¸ÀàÖеÄ×Ö¶ÎÓ³Éä¹ØÏµ£¬Í¬Ê±²»ÐèÒª¶îÍâΪ¸¸ÀཨÁ¢ÕæÊµµÄ±í£¬Ò²¾ÍÊÇÕæÕýµÄ±íÖ»¶ÔÓ¦@MappedSuperclassµÄ×ÓÀà¡£

2.5 @Inheritance

@MappedSuperclassÖ¸¶¨ÁËʵÌåÀàÖ®¼äÊÇ¿ÉÒÔ´æÔÚ²ã´Î¹ØÏµµÄ£¬Í¨¹ý@Inheritance¿ÉÒÔ½øÒ»²½¹ÜÀí²ã´Î¹ØÏµ£¬ÆäȡֵInheritanceTypeÓÐÒÔÏÂö¾Ù±äÁ¿£º

public enum InheritanceType {
/** A single table per class hierarchy. */
SINGLE_TABLE,
/** A table per concrete entity class. */
TABLE_PER_CLASS,
/**
* A strategy in which fields that are specific to a
* subclass are mapped to a separate table than the fields
* that are common to the parent class, and a join is
* performed to instantiate the subclass.
*/
JOINED
}

ÀýÈç

¸¸ÀàÉùÃ÷ÈçÏ£¬Òâζ×Åÿ¸ö×ÓʵÌåÀà¶ÔÓ¦ÁËÒ»Õűí

@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class BaseEntity

×ÓʵÌåÀิÓø¸ÀàÉùÃ÷µÄÓò/×ֶΣº

@Entity
@Table(name="App")
public class AppEntity entends BaseEntity

3. ¿ª·¢³£ÓÃ×¢½â¡ª¡ª×Ö¶Î/ÓòʹÓÃ

3.1 @Column

@ColumnÉùÃ÷Ò»¸ö±í×Ö¶ÎÓëÓò/·½·¨µÄÓ³É䣬ÆäÊôÐÔ¿ÉÒÔ½øÒ»²½Ö¸¶¨ÊÇ·ñ¿ÉΪNULL£¬ÊÇ·ñΨһµÈϸ½Ú¡£

3.2 @Id

@Id±ê×¢Ò»¸öÊôÐÔ£¬±íʾ¸ÃÊôÐÔÓ³ÉäΪÊý¾Ý¿âµÄÖ÷¼ü¡£

µ¥¶ÀʹÓÃ@IdÀ´±êʶʵÌåÀàµÄµ¥¸öÓòÓ³ÉäΪÊý¾Ý¿â±íµÄÖ÷¼ü£¬¶ÔÓÚÁªºÏÖ÷¼ü¶øÑÔ£¬¾ÍÒªÅäºÏ@IdClassʹÓá£

¶¨ÒåÒ»¸ö£¨Íⲿ£©Ö÷¼üÀ࣬Ö÷¼üÀàÖÐÉùÃ÷ÁËʵÌåÀࣨĿ±ê±í£©ÁªºÏÖ÷¼üÖеÄËùÓÐÖ÷ÊôÐÔ£¬Ö÷¼üÀàÐèʵÏÖSerializable½Ó¿Ú£»

ÔÚÕæÕýµÄʵÌåÀàÉÏʹÓÃ@IdClass£¬ÒÔÉÏÒ»²½¶¨ÒåµÄÖ÷¼üÀà×÷Ϊ²ÎÊý£»

ʵÌåÀàµÄÖ÷ÊôÐÔ±ØÐëºÍÖ÷¼üÀàÖеÄÖ÷ÊôÐÔÍêÈ«¶ÔÓ¦£¨¸öÊý£¬ÀàÐÍ£¬Ãû³Æ£©;

ÔÚʵÌåÀàµÄËùÓÐÖ÷ÊôÐÔÉÏÃæÌí¼Ó@Id×¢½â£»

ʾÀý

ÍⲿÖ÷¼üÀࣺ

public class RoleUserId implements Serializable {
private Long roleId;
private Long userId;
}

ʵÌåÀࣺ

@Entity
@Table(name = "TB_ROLE_USER")
@IdClass(RoleUserId.class)
public class RoleUserDO {
@Id
private Long roleId; @Id
private Long userId;
// ...
}

3.3 @GeneratedValue

@GeneratedValueÉèÖÃ×ֶεÄ×Ô¶¯Éú³É·½Ê½¡£

ÆästrategyÊôÐÔȡֵΪö¾ÙGenerationType£º

/**
* Indicates that the persistence provider must assign
* primary keys for the entity using an underlying
* database table to ensure uniqueness.
*/
TABLE, /**
* Indicates that the persistence provider must assign
* primary keys for the entity using a database sequence.
*/
SEQUENCE, /**
* Indicates that the persistence provider must assign
* primary keys for the entity using a database identity column.
*/
IDENTITY,
/**
* Indicates that the persistence provider should pick an
* appropriate strategy for the particular database. The
* <code>AUTO</code> generation strategy may expect a database
* resource to exist, or it may attempt to create one. A vendor
* may provide documentation on how to create such resources
* in the event that it does not support schema generation
* or cannot create the schema resource at runtime.
*/
AUTO

ʹÓÃ×ÔÔöµÄÊý¾Ý¿âÁÐÉú³ÉÖ÷¼üÊÇÒ»ÖÖ³£¼ûµÄÖ÷¼üÉú³É·½Ê½£¬MySQLÖ§³ÖIdentityÁС£

Oracle 12cÒÔºóÖ§³ÖIdentity Column£¨Éí·ÝÁУ©£¬¿ÉÒÔʹÓÃGenerationType.IDENTITY×÷ΪÉú³É²ßÂÔ£¬´ËʱÎÞÐèÔÙʹÓÃ@SequenceGeneratorÖ¸¶¨¶ÔÓ¦ÐòÁС£´ËǰµÄOracleͨ³£Ê¹ÓÃÐòÁÐʵÏÖ×ÔÔö×ֶΣ¬ÐèÒª½«Éú³É²ßÂÔÖ¸¶¨ÎªGenerationType.SEQUENCE²¢ÅäºÏ@SequenceGenerator£¨ÏÂÎÄ£©Ê¹Óá£

Oracle 12cÐÂÔöIdentity ColumnµÄʹÓÃÇëÔĶÁ£ºhttps://www.cnblogs.com/zyon/p/11067115.html

ʹÓÃÉí·ÝÁÐÉú³É×ÔÔöÖ÷¼üʱ£¬ÔÚÖ÷¼üÊôÐÔÉÏʹÓÃ@IdºÍ@GeneratedValue(strategy = GenerationType.IDENTITY)

@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;

// ¡­
}

@GeneratedValue#generatorÊôÐÔÖ¸¶¨Ö÷¼üÉú³ÉÆ÷µÄÃû³Æ£¬ÐèÒªÓë@SequenceGenerator»ò@TableGeneratorµÄÃû³Æ¶ÔÓ¦ÆðÀ´¡£

3.4 @SequenceGenerator

Èç¹ûʹÓÃÐòÁз½Ê½Éú³ÉÖ÷¼ü£¬@SequenceGeneratorÖ¸¶¨×Ô¶¯Éú³ÉÖ÷¼üʱ¶ÔÓ¦µÄÐòÁУ¨Sequence£©¡£

@SequenceGenerator#nameÖ¸¶¨ÐòÁÐÉú³ÉÆ÷µÄÃû³Æ£¬@GeneratedValue#generatorͨ¹ýÒýÓøÃÖµÓë¾ßÌåµÄÐòÁÐÉú³ÉÆ÷¹ØÁª£¬½ø¶ø¹ØÁª¾ßÌåµÄÐòÁС£

@SequenceGenerator#sequenceNameÖ¸¶¨×Ô¶¯Éú³ÉÖ÷¼üʱµÄÎïÀíÐòÁÐÃû³Æ£»

@SequenceGenerator#initialValueÊôÐÔÖ¸¶¨ÐòÁгõÖµ£»

@SequenceGenerator#allocationSizeÖ¸¶¨×ÔÔö²½³¤£»

ʵÀý£º

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence")
@SequenceGenerator(name = "sequence", sequenceName = "ID_SEQ", allocationSize = 1)
@Column(name = "Id")
private long id;

3.5 JPA´ó¶ÔÏóÖ§³Ö

³£ÓÃÏà¹Ø×¢½â

@Lob

@Basic

3.5.1 ÔÚ×Ö·û´®ÐÍÓòÉÏÓÃ@Lob

@Lob
private String description;

oracleÓ³Éä×ֶεÄÀàÐÍÊÇCLOB£¬java.sql.Clob, Character[], char[] ºÍ java.lang.String ½«±»³Ö¾Ã»¯Îª Clob ÀàÐÍ¡£

mysqlÖÐÓ³Éä×ֶεÄÀàÐÍÊÇlongtext¡£

3.5.2 ÔÚ¶þ½øÖƵÈÀàÐÍÓòÉÏÓÃ@Lob

oracleÖÐjava.sql.Blob, Byte[], byte[] ºÍ SerializableʵÏÖÀཫ±»³Ö¾Ã»¯Îª Blob ÀàÐÍ¡£

mysqlÖжÔÓ¦longblob¡£

@Lob³Ö¾Ã»¯ÎªBlob»òÕßClobÀàÐÍ,¸ù¾Ýget·½·¨µÄ·µ»ØÖµ²»Í¬£¬×Ô¶¯½øÐÐClobºÍBlobµÄת»»¡£

3.5.3 ´ó¶ÔÏó×ֶεÄÑÓ³Ù¼ÓÔØ

@Lob
@Basic(fetch=FetchType.LAZY)
private Byte[] file;

ÒòΪ´ó¶ÔÏóÊý¾ÝÒ»°ãÕ¼ÓõÄÄÚ´æ¿Õ¼ä±È½Ï´ó£¬ËùÒÔͨ³£Ê¹ÓÃÑÓ³Ù¼ÓÔØµÄ·½Ê½£º@Basic×¢½âÉèÖüÓÔØ·½Ê½ÎªFetchType.LAZY¡£

ÎÊÌ⣺

ÑÓ³Ù¼ÓÔØÊÇÑÓ³Ùµ½Ê²Ã´Ê±ºò£¿Õâ¸öÎÊÌâһֱûÓÐÕÒµ½È·ÇеĽâ´ð¡£

4. ³£ÓÃRepository¿ª·¢

4.1 Repository½Ó¿Ú

public interface Repository<T, ID>

×î»ù´¡µÄRepository½Ó¿Ú£¬²»ÌṩÈκβÙ×÷·½·¨¡£

4.2 CrudRepository½Ó¿Ú

public interface CrudRepository<T, ID> extends Repository<T, ID>

ÌṩCRUD»ù±¾²Ù×÷µÄRepository½Ó¿Ú¡£

4.3 PagingAndSortingRepository ½Ó¿Ú

public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID>

Ëü¼Ì³Ð CrudRepository ½Ó¿Ú£¬ÔÚ CrudRepository »ù´¡ÉÏÐÂÔöÁËÁ½¸öÓë·ÖÒ³Óйصķ½·¨¡£

Ò²¿ÉÒÔ²»½«×Ô¶¨ÒåµÄ³Ö¾Ã²ã½Ó¿ÚÖ±½Ó¼Ì³ÐPagingAndSortingRepository£¬¶øÊǼ̳РRepository »ò CrudRepository µÄ»ù´¡ÉÏ£¬ÔÚ×Ô¶¨Òå·½·¨²ÎÊýÁбí×îºóÔö¼ÓÒ»¸ö Pageable »ò Sort ÀàÐ͵IJÎÊý£¬ÓÃÓÚÖ¸¶¨·ÖÒ³»òÅÅÐòÐÅÏ¢£¬¿ÉÒÔʵÏÖ±ÈÖ±½Ó¼Ì³Ð PagingAndSortingRepository ¸ü´óµÄÁé»îÐÔ¡£

4.4 JpaRepository½Ó¿Ú

public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>

JpaRepository ¼Ì³ÐPagingAndSortingRepository£¬ÊÇÕë¶Ô JPA ¼¼ÊõÌṩµÄ½Ó¿Ú£¬ËüÔÚ¸¸½Ó¿ÚµÄ»ù´¡ÉÏ£¬ÌṩÁËÆäËûһЩ·½·¨£¬±ÈÈçflush()£¬saveAndFlush()£¬deleteInBatch() µÈ¡£

4.5 ×Ô¶¨ÒåJPA Repository·½·¨

×Ô¶¨ÒåJPA Repository·½·¨£¬Ó¦²Î¿¼ÒÔϹ淶£º

×¢ÒâÁ½µã£º

³öÏÖÔÚ·½·¨ÃûÖÐÓÃÓÚ×éºÏ²éѯÌõ¼þµÈµÄÊÇʵÌåÀàµÄÓòÃû³Æ£¬¶ø²»ÊÇÊý¾Ý¿âµÄ±í×ֶΣ»

ÕâÖÖ·½Ê½ÓÃÀ´×éºÏһЩ¹Ì¶¨Ä£Ê½µÄSQL£¬Éú³ÉSQLµÄ¹ý³Ì¶Ô³ÌÐòÔ±ÊÇ͸Ã÷µÄ£¬³ÌÐòÔ±²»ÓÃ×Ô¼ºÐ´SQL¡£

4.6 @Query×¢½â

org.springframework.data.jpa.repository.Query×¢½âÓÃÀ´Ö¸¶¨JPA Repository·½·¨¶ÔÓ¦µÄ²éѯHSQL¡£

ʾÀý£º

import org.springframework.data.repository.query.Param; //...
@Query("select a from App a where a.name LIKE %:name%")
List<App> findByName(@Param("name") String name);

ÐèҪעÒâµÄÊÇ£¬@QueryÖеIJÎÊýHQLĬÈϲ»ÊÇÕæÊµµÄSQLÓï¾ä£¬¶øÊÇÃæÏò¶ÔÏóµÄ¡£

ͨ³£ÎÒÃÇ¿ÉÒÔʹÓÃ@TableÖ¸¶¨ÊµÌåÀà¶ÔÓ¦µÄ±íÃû£¬Èç¹ûʵÌåÀàµÄÀàÃûºÍ¶ÔÓ¦µÄ±íÃû²»Í¬£¬@QueryÖÐÓ¦¸ÃʹÓÃÀàÃû£¬Í¬Ê±²ÎÊýHQLÖÐʹÓõÄÊÇʵÌåÀàµÄÓòÃû³Æ¶ø²»ÊÇʵ¼ÊµÄ×Ö¶ÎÃû¡£

Èç²»ÕâÑù£¬ÀýÈçÔÚ@QueryµÄ²ÎÊýHQLÖÐʹÓÃÁËʵ¼ÊµÄ±íÃû¶ø·ÇʵÌåÀàÃû£¬Ôò»á±¨£ºQuerySyntaxException: XXX is not mapped.¡£

Èç¹ûÏ£ÍûʹÓÃÔ­ÉúSQL£¬½«@Query#nativeQueryÉèÖÃΪtrue¼´¿É£º

@Query(nativeQuery = true, value = "SELECT * FROM AUTH_USER WHERE name = :name1 OR name = :name2 ")
List<UserDO> findSQL(@Param("name1") String name1, @Param("name2") String name2);

4.7 @Modifying×¢½â

org.springframework.data.jpa.repository.Modifying×¢½â±êʶһ¸öJPA Repository·½·¨¶ÔÓ¦µÄSQL»áÐÞ¸ÄÊý¾Ý¿â¡£

ʾÀý£º

@Modifying
@Query("update appnamespace set isDeleted=1, dataChangeLastModifiedBy = ?3 where appId = ?1 and name = ?2")
int delete(String appId, String namespaceName, String operator);
 
   
4427 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
JavaÐéÄâ»ú¼Ü¹¹
JVM¡ª¡ªJavaÐéÄâ»ú¼Ü¹¹
JavaÈÝÆ÷Ïê½â
Java½ø½×--ÉîÈëÀí½âArrayListʵÏÖÔ­Àí
Java²¢·¢ÈÝÆ÷£¬µ×²ãÔ­ÀíÉîÈë·ÖÎö
×îпγÌ
java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
SpringBoot&Cloud¡¢JavaSSM¿ò¼Ü
Spring Boot Åàѵ
³É¹¦°¸Àý
¹úÄÚÖªÃûÒøÐÐ Spring+SpringBoot+Cloud+MVC
±±¾© Java±à³Ì»ù´¡ÓëÍøÒ³¿ª·¢»ù´¡
±±¾© Struts+Spring
»ªÏÄ»ù½ð ActiveMQ Ô­Àí
ijÃñº½¹« Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢