MySQL의 쿼리 데이터베이스 테이블 필드 목록 정보를 동적으로 분류
배경 설명
데이터 아이템리스트 표시 페이지는, 전단에 사용 표 컴포넌트 각 컬럼에 관해서 이 페이지 데이터 행한다 오름차순 또는 내림차순 정렬.
그러나 고객의 기대는 : 무작위로 열을 클릭 경우 에 쿼리 모든 데이터를 정렬 할 수 있습니다.
예를 들면 :
(100) 10 페이지 10 페이지, 데이터를 조회 할 수 있습니다. 표 프론트 엔드 어셈블리는이 페이지의 데이터를 10 월, 정렬, 정렬 다른 구에 참여하지 않습니다.
그러나 실제 기대는 정렬에 참여하는 (10)의 데이터를 쿼리하는 것입니다.
그리고 특정 열 아니라, 각 열은 오름차순 또는 내림차순으로 할 수있다, 쿼리의 결과를 다시 정렬 할 수 있습니다.
치료
때문에 프런트 엔드 기술, 백엔드 처리를 위해 필요, 쿼리 인터페이스의 제한 목록을 수정합니다.
1, 쿼리의 개체 클래스를 수정
먼저 요청하는 개체를 쿼리해야, 두 개의 추가 필드 orderField 및 OrderType , 필드 이름 및 들어오는 분류 모드를 저장 (ASC를 오름차순, DESC 내림차순)에 대한
orderField는 : 정렬 할 필드를 수신하기위한 수단
orderType는 : 정렬, ASC, DESC, 오름차순, 내림차순의 수신 모드
다음과 같이 코드입니다 :
// 对字段进行排序 개인 문자열 orderField; // 存放排序字段 개인 문자열 orderType; // ASC의 DESC 공공 문자열 getOrderField는 () { 반환 orderField을; } 공공 공극 setOrderField (문자열 orderField) { 이 .orderField = orderField; } 공공 문자열 getOrderType는 () { 반환 orderType을; } 공공 공극 setOrderType (문자열 orderType) { 이 .orderType = orderType; }
2, 파일 mapper.xml을 수정
MyBatis로는 방법의 목록에서 매퍼 파일, SQL 쿼리를 찾을 수 있습니다.
다음 코드를 추가합니다 :
< 만약 테스트 = "orderField ! = null이 와 orderField ! = '' 와 orderType ! = null이 와 orderType ! = '' " > ORDER BY $ {orderField} $ {orderType} </ 경우 >
[참고] 특히 : SQL의 두 개의 매개 변수, 여기 사용해야합니다 {}는 $ 접수를하지만, 사용할 수 없습니다 #을 {} . 그렇지 않으면 원하는 효과에 도달하지 않습니다.
$ {} : 입력 문자열을 처리하지 않습니다 . 예를 들어 : 수신 및 CREATE_TIME 내림차순, 치료 효과 후 $는 {} 주문이 CREATE_TIME 내림차순에 의해입니다 역순 CREATE_TIME 전계 효과로 구현 될 수있다.
# {} : 그것은 들어오는 문자열을 처리합니다 . 예를 들어 : 수신 및 CREATE_TIME 내림차순, 치료 효과 후 #은 {} ORDER은 'CREATE_TIME' '내림차순'에 의해입니다문자열 상수가 CREATE_TIME 전계 효과에 따라 역순에 도달하지 않으므로.
물론, $는 {} SQL 주입 될 수 있습니다. 일반적으로, #은 {}로 사용된다. 이 시나리오는 변환 값에 전달 될 필요가 없습니다, $는 {} 사용됩니다.
기능 제목을 실현하기 위해, 단지 $ {}에만이 기능을 사용합니다.
3, 인터페이스를 증가 시키면 필드 호출
경우 기준 송신 증가 orderField 및 OrderType , 이하의 효과
{ "pageNum"1 , "pageSize가"5 , " orderField ": "CREATE_TIME" , " orderType ": "소계" }
지금까지,이 함수는 입력 필드의 이름으로 주문하고 종류 깨달았다.