자바 의 반사 메커니즘 을 이용 하여 이 루어 진 ORM 데이터베이스 조회
여기 서 저 는 ORM 의 조작 을 간단하게 실현 하 는 방법 을 썼 습 니 다. 여러분 의 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.
1. 우선 우 리 는 자바 주석 류 를 Id 라 고 정의 해 야 한다. 자바 1.5 이후 우 리 는 예전 에 XML 로 정 의 했 던 이런 방법 을 주석 으로 대체 할 수 있다.
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface Id {
public String name = "id";
}
이 주석 클래스 가 있 으 면 우 리 는 실체의 ID 가 어떤 속성 인지 정의 할 수 있 습 니 다.
2. 그 다음 에 우 리 는 실체 류 를 정의 할 수 있다.내 가 사용 하 는 데 이 터 는 SQLServer 2005 이지 만 사실은 데이터 베 이 스 를 적용 할 수 있 을 것 이다.
데이터베이스 의 표 구 조 는 다음 과 같다.
CREATE TABLE [dbo].[newsclass](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](45) COLLATE Chinese_PRC_CI_AS NOT NULL,
CONSTRAINT [PK__newsclass__7F60ED59] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
우 리 는 이 표 에 대응 하기 위해 뉴스 클래스 를 정의 합 니 다.
public class NewsClass {
@Id
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
다음 에 우 리 는 Dao 의 종 류 를 ORMDao 라 고 정의 할 수 있다.
public class ORMDao {
/**
* ID
*
* @param entity
* @return
*/
public String getIdField(Object entity) {
String idField = null;
try {
Field[] fields = Class.forName("com.trip.info.entity.News")
.getDeclaredFields();
System.out.println(fields.length);
Annotation[] annotations;
for (Field field : fields) {
annotations = field.getDeclaredAnnotations();
for (Annotation a : annotations) {
if (a.annotationType().getSimpleName().equals("Id")) {
idField = field.getName();
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return idField;
}
/**
*
*
* @param entity
* @param pageNo
* @param pageSize
* @param orderType
* @return
* @throws Exception
*/
public void query(Object entity){
Field[] fields = entity.getClass().getDeclaredFields();
String sqlSelect = "";
String sqlWhere = "";
String sql = "";
Class cl = entity.getClass();
boolean firstFlag = true;
ArrayList<String> cols = new ArrayList<String>();
String id = this.getIdField(entity);
String className = entity.getClass().getSimpleName();
for (int i = 0; i < fields.length; i++) {
String fieldName = fields[i].getName();
if (i != fields.length - 1) {
sqlSelect += fieldName + ",";
} else {
sqlSelect += fieldName;
}
cols.add(fieldName);
String methodName = "get" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1, fieldName.length());
try{
if (cl.getMethod(methodName).invoke(entity) != null) {
if (firstFlag) {
sqlWhere += " where " + fieldName + "='"
+ cl.getMethod(methodName).invoke(entity) + "'";
firstFlag = false;
} else {
sqlWhere += " and " + fieldName + "='"
+ cl.getMethod(methodName).invoke(entity) + "'";
}
}
}catch(Exception e){
e.printStackTrace();
}
}
sql = "select " + sqlSelect + " from "
+ className + sqlWhere;
System.out.println("the final sql :" + sql);
}
public static void main(String[] args) {
ORMDao dao = new ORMDao();
NewsClass newsclass = new NewsClass();
newsclass.setId("1");
newsclass.setName(" ");
dao.query(newsclass);
}
}
4. 이런 방법 으로 우 리 는 단일 표 에 대한 조 회 는 스스로 SQL 코드 를 쓰 지 않 고 자바 대상 으로 대응 하여 SQL 코드 를 자동 으로 생 성하 여 개발 의 난이도 와 개 발 량 을 크게 줄 였 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.