Jpa 프레임 워 크 에서 원생 sql 을 연결 하고 실행 하 는 작업
그 중:
EntityManager.createNativeQuery(SQL)
Object 대상 으로 돌 아 왔 습 니 다.
entityManager.createNativeQuery(SQL,WebInfo.class)
맵 후의 인 스 턴 스 대상 을 되 돌려 줍 니 다.4.567914.SQL 문 구 를 실행 하고 조회 결 과 를 되 돌려 줍 니 다.자주 사용 하 는 방법 은 다음 과 같 습 니 다.
Query.getSingleResult()
SQL 문 구 를 실행 하고 List 집합 을 되 돌려 줍 니 다.4.567914.SQL 문 구 를 실행 하고 일련의 결과 집합 첫 번 째 를 되 돌려 줍 니 다.
직접 예:
1.EntityManager.createNativeQuery(SQL)는 Object 대상 을 되 돌려 줍 니 다.
enity Manager.createNativeQuery(SQL,WebInfo.class)는 매 핑 된 인 스 턴 스 대상 을 되 돌려 줍 니 다.
public List<User> getByCompanyFinanceRoleManager(Long companyID , String authorityName){
StringBuffer querySql = new StringBuffer("select a.* from art_user a , art_user_authority b where a.id = b.user_id and a.company_id = :companyId " +
" and b.authority_name = :authorityName");
Query query = entityManager.createNativeQuery(querySql.toString() , User.class);
query.setParameter("companyId" , companyID);
query.setParameter("authorityName" , authorityName);
List<User> list = query.getResultList();
return list;
}
2.Query.getSingleResult()에서 SQL 문 구 를 실행 하고 검색 결 과 를 되 돌려 줍 니 다.
public Long getByFinanceRoleApplicationCount(ApplicationSearchParamDTO param){
StringBuffer queryCount = new StringBuffer("select count(er.id) from atl_application er , atl_loan_application b where er.application_oid = b.application_oid and er.status not in (1010 ,1011)");
getSql(queryCount , param);
Query count = entityManager.createNativeQuery(queryCount.toString() );
setQueryParam(count , param);
Object obj = count.getSingleResult();
Long countNum = ((BigInteger) obj).longValue();
return countNum;
}
public void getSql(StringBuffer querySql , ApplicationSearchParamDTO param ){
// oid
if (!StringUtils.isEmpty(param.getCompanyOID())) {
querySql.append(" and er.company_oid = :companyOID ");
}
// oid
if (CollectionUtils.isNotEmpty(param.getApplicantOIDs())){
querySql.append(" and er.applicant_oid in ( :applicantOID ) ");
}
if (!StringUtils.isEmpty(param.getBusinessCode())){
querySql.append(" and b.business_code like CONCAT('%' , :businessCode , '%') ");
}
if (CollectionUtils.isNotEmpty(param.getDepartmentOIDs()) && CollectionUtils.isNotEmpty(param.getFinanceRoleCorporationOids()) && CollectionUtils.isEmpty(param.getCorporationOIDs())) {
querySql.append(" and ( b.department_oid in ( :departmentOID ) or er.corporation_oid in ( :corporationOID ) OR b.department_oid is null OR er.corporation_oid is null )");
}else if(CollectionUtils.isNotEmpty(param.getDepartmentOIDs()) && CollectionUtils.isEmpty(param.getCorporationOIDs())){
querySql.append(" and ( b.department_oid in ( :departmentOID ) OR b.department_oid is null ) ");
}else if(CollectionUtils.isNotEmpty(param.getFinanceRoleCorporationOids()) && CollectionUtils.isEmpty(param.getCorporationOIDs())){
querySql.append(" and ( er.corporation_oid in ( :corporationOID ) OR er.corporation_oid is null ) ");
}
if (CollectionUtils.isNotEmpty(param.getCorporationOIDs())){
querySql.append(" and er.corporation_oid in ( :corporationOID ) ");
}
//
if (param.getStartDate() != null) {
querySql.append(" and er.last_modified_date >= :startDate ");
}
//
if (param.getEndDate() != null) {
querySql.append(" and er.last_modified_date <= :endDate ");
}
//
if (CollectionUtils.isNotEmpty(param.getType())) {
querySql.append(" and er.type in ( :type ) ");
}
//
if (CollectionUtils.isNotEmpty(param.getStatus())) {
querySql.append(" and er.status in ( :status )");
}
/* // oid
if (CollectionUtils.isNotEmpty(param.getApplicationOIDs())) {
querySql.append(" and er.application_oid in ( :applicationOID )");
}*/
//
if(CollectionUtils.isNotEmpty(param.getExcludedApplicationOIDs())){
querySql.append(" and er.application_oid not in ( :excludedApplicationOID )");
}
}
3、Query.getResultList()
public List<DepartmentDTO> getDepartmentsOfReportLine(UUID reportLineOID) {
String sql = "SELECT d.department_oid, d.`name` FROM art_department d INNER JOIN art_report_obj ro on ro.obj_oid = d.department_oid AND ro.obj_type = '2' "
+ "and ro.report_line_oid = '" + reportLineOID + "'";
Query query = entityManager.createNativeQuery(sql);
List<DepartmentDTO> list = new ArrayList<>();
List<Object[]> rtList = query.getResultList();
for (Object[] objects : rtList) {
DepartmentDTO departmentDTO = new DepartmentDTO();
departmentDTO.setDepartmentOID(UUID.fromString(objects[0].toString()));
departmentDTO.setName(objects[1].toString());
list.add(departmentDTO);
}
return list;
}
```
예 를 직접 참고 하여 정확 한 sql 을 맞 추 면 됩 니 다.Springboot JPA 는 네 이 티 브 SQL 을 실행 하고 SQL 대체 자 를 사용자 정의 하여 파 라 메 터 를 추가 합 니 다.
JPA 는 사실상 Hibernate 의 패키지 입 니 다.Interface 방법 명 에 따라 대응 하 는 방법 을 생 성하 고 Query 주해 방식 과 원생 SQL 도 지원 합 니 다.원생 SQL 은 다음 과 같 습 니 다.
1.주석@Query 방식 으로 원생 SQL 문 구 를 실행 합 니 다.
@Query(value = "select * from table_car_mark limit 0,10",nativeQuery = true)
List<CarsMark> findTop10();
주석 방식 은"nativeQuery=true"를 추가 하여 원생 SQL 임 을 표시 해 야 합 니 다.2.EntityManager.Query 방식:
String sql = "insert t_car_mark_v2(id,car_mark,trigger_event,operate_state,gps_time,gps_longtitude,gps_latitude,gps_speed,gps_direction,gps_state) VALUES(1379000,204819,4,1,20121101012203,116.4130173,39.8860664,0,0,1),(1378501,162481,4,0,20121101012202,116.3074417,39.8848457,54,240,1)";
Query query = em.createNativeQuery(sql);
3.복잡 한 원생 SQL,차지 식:
...
import javax.persistence.EntityManager;
import javax.persistence.Query;
....
@Autowired
private EntityManager em;
String sql = "insert t_car_mark_v2(id,car_mark,trigger_event,operate_state,gps_time,gps_longtitude,gps_latitude,gps_speed,gps_direction,gps_state) values(?,?,?,?,?,?,?,?,?)";
query = em.createNativeQuery(sql);
query.setParameter(1,1);
query.setParameter(2,'values');
query.setParameter(3,1);
query.setParameter(4,1);
query.setParameter(5,'values');
query.setParameter(6,'values');
query.setParameter(7,'values');
query.setParameter(8,'values');
query.setParameter(9,'values');
query.executeUpdate();
query.setParameter(index,parms)사용 하기;방식매개 변수 점 위 보충 을 진행 하 다.Query.getResultList()
반환 값:insert 작업 이기 때문에 성공 하면 작업 의 줄 수 를 되 돌려 주 고 데이터 변경 없 이 0 을 되 돌려 줍 니 다.'jpa Executing an update/delete query'이상 이 발생 하면'@Modifying'과 비교 하지 않 았 기 때문에 주 해 를 추가 하면 됩 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel 에서 네 이 티 브 sql 문 구 를 사용 하고 호출 하 는 방법일부 sql 문 구 는 비교적 복잡 합 니 다.구조 기 를 사용 하 는 것 이 sql 로 직접 사용 하 는 것 보다 편리 합 니 다.우 리 는 laravel 에서 원생 문 구 를 사용 합 니 다.먼저 처음에 use ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.