È ansible utilizzare SQL raw all’interno di un repository primaverile

Ho bisogno di usare SQL raw all’interno di un repository Spring Data, è ansible? Tutto ciò che vedo in giro @Query è sempre basato sull’ quadro.

L’annotazione @Query consente di eseguire query native impostando il flag nativeQuery su true.

Citazione dai documenti di riferimento JPA di Spring Data.

Inoltre, vedere questa sezione su come farlo con una query nativa con nome.

È ansible ottenere questo su modi muggiti:

1. Da CrudRepository (Projection)

I Data Reporter di spring in genere restituiscono il modello di dominio quando si utilizzano i metodi di query. Tuttavia, a volte, potrebbe essere necessario modificare la visualizzazione di quel modello per vari motivi.

Supponiamo che la tua quadro sia così:

  import javax.persistence.*; import java.math.BigDecimal; @Entity @Table(name = "USER_INFO_TEST") public class UserInfoTest { private int id; private String name; private String rollNo; public UserInfoTest() { } public UserInfoTest(int id, String name) { this.id = id; this.name = name; } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID", nullable = false, precision = 0) public int getId() { return id; } public void setId(int id) { this.id = id; } @Basic @Column(name = "name", nullable = true) public String getName() { return name; } public void setName(String name) { this.name = name; } @Basic @Column(name = "roll_no", nullable = true) public String getRollNo() { return rollNo; } public void setRollNo(String rollNo) { this.rollNo = rollNo; } } 

Ora la tua class di proiezione è come un muggito. Può quei campi che ti servivano.

 public interface IUserProjection { int getId(); String getName(); String getRollNo(); } 

E il Your Data Access Object(Dao) is like bellow :

 import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import java.util.ArrayList; public interface UserInfoTestDao extends CrudRepository { @Query(value = "select id,name,roll_no from USER_INFO_TEST where rollNo = ?1", nativeQuery = true) ArrayList findUserUsingRollNo(String rollNo); } 

Ora ArrayList findUserUsingRollNo(String rollNo) ti darà la lista degli utenti.

2. Utilizzo di EntityManager

Supponiamo che la tua query sia ” select id, name from users where roll_no = 1001 “.

Qui la query restituirà un object con id e nome colonna. La tua class di risposta è simile a un muggito:

La tua class di risposta è come:

 public class UserObject{ int id; String name; String rollNo; public UserObject(Object[] columns) { this.id = (columns[0] != null)?((BigDecimal)columns[0]).intValue():0; this.name = (String) columns[1]; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getRollNo() { return rollNo; } public void setRollNo(String rollNo) { this.rollNo = rollNo; } } 

qui il costruttore UserObject otterrà una matrice di oggetti e imposterà i dati con l’object.

 public UserObject(Object[] columns) { this.id = (columns[0] != null)?((BigDecimal)columns[0]).intValue():0; this.name = (String) columns[1]; } 

La tua funzione di esecuzione della query è simile a quella seguente:

 public UserObject getUserByRoll(EntityManager entityManager,String rollNo) { String queryStr = "select id,name from users where roll_no = ?1"; try { Query query = entityManager.createNativeQuery(queryStr); query.setParameter(1, rollNo); return new UserObject((Object[]) query.getSingleResult()); } catch (Exception e) { e.printStackTrace(); throw e; } } 

Qui devi importare i pacchetti di soffietto:

 import javax.persistence.Query; import javax.persistence.EntityManager; 

Ora la tua class principale, devi chiamare questa funzione. Per prima cosa prendi EntityManager e chiama questa funzione getUserByRoll(EntityManager entityManager,String rollNo) . La procedura di chiamata è data sotto:

Ecco le importazioni

 import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; 

ottenere EntityManager in questo modo:

 @PersistenceContext private EntityManager entityManager; UserObject userObject = getUserByRoll(entityManager,"1001"); 

Ora hai dati in questo userObject.

Nota:

query.getSingleResult () restituisce un array di oggetti. È necessario mantenere la posizione della colonna e il tipo di dati con la posizione della colonna di query.

 select id,name from users where roll_no = 1001 

la query restituisce un array ed è [0] --> id and [1] -> name .

Maggiori informazioni visita questa discussione e questa discussione

Grazie 🙂

È anche ansible utilizzare il repository JDBC di Spring Data , che è un progetto di comunità basato su Spring Data Commons per accedere ai database con SQL raw, senza utilizzare JPA.

È meno potente di Spring Data JPA, ma se vuoi una soluzione leggera per progetti semplici senza usare un ORM come Hibernate, è una soluzione che vale la pena provare.

possiamo usare createNativeQuery (“Qui Nagitive SQL Query”);

per esempio :

 Query q = em.createNativeQuery("SELECT a.firstname, a.lastname FROM Author a"); List authors = q.getResultList();