자바 사용자 정의 주 해 를 사용 하여 ORM 프레임 워 크 실현 (Mybatis 바 텀 실현 원리)
사용 할 설명 만 들 기
표 이름 설명 만 들 기
정의 표 이름
// ( )
@Target(value = { ElementType.TYPE })
//
@Retention(RetentionPolicy.RUNTIME)
public @interface SetTable {
//
String value();
}
표 속성 설명 만 들 기
필드 이름과 필드 길 이 를 정의 합 니 다.
@Retention(RetentionPolicy.RUNTIME)
public @interface SetProperty {
//
String name();
//
int len();
}
주 해 를 사용 하여 실체 클래스 만 들 기
클래스 의 이름, 속성 을 주석 을 통 해 대응 하 는 표 이름, 클래스 이름 을 설명 합 니 다.
package com.ymk.test.annotation;
@SetTable("user_table")
public class UserEntity {
@SetProperty(name = "user_name", len = 10)
private String userName;
@SetProperty(name = "user_age", len = 10)
private Integer userAge;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
}
아 날로 그 ORM
반 사 를 통 해 클래스 를 얻 고 클래스 의 주해 속성 을 얻 으 며 StringBuffer 를 통 해 sql 문 구 를 연결 합 니 다.
Mybatis 에서 selection 문장의 조합 을 모 의 합 니 다.
public static void main(String[] args) throws ClassNotFoundException {
//
Class> forName = Class.forName("com.ymk.test.annotation.UserEntity");
Field[] declaredFields = forName.getDeclaredFields();
// sql
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append(" select ");
for (int i = 0; i < declaredFields.length; i++) {
//
SetProperty setProperty = declaredFields[i].getAnnotation(SetProperty.class);
String property = setProperty.name();
sqlBuffer.append(property);
if (i == declaredFields.length - 1) {
sqlBuffer.append(" from ");
} else {
sqlBuffer.append(" , ");
}
}
//
SetTable setTable = forName.getAnnotation(SetTable.class);
//
String tableName = setTable.value();
sqlBuffer.append(" " + tableName);
// orm sql
System.out.println(sqlBuffer.toString());
}
맞 춤 형 sql 구문:
select user_name , user_age from user_table
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.