자바 사용자 정의 주 해 를 사용 하여 ORM 프레임 워 크 실현 (Mybatis 바 텀 실현 원리)

2234 단어 JavaMybatis
개미 교실
사용 할 설명 만 들 기
표 이름 설명 만 들 기
정의 표 이름
//      (     )
@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

좋은 웹페이지 즐겨찾기