DAO는 JDBC 레이어를 통해 데이터베이스에 액세스하여 객체의 간단한 패키지를 가져옵니다.
package com.etc.utils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @Title: DAO.java
* @Package com.etc.utils
* @Description: DAO
* @author dc
* @date 2012-11-28 10:09:43
* @version V1.0
*/
public class DAOUtil {
/**
*
*
* @param clazz
* : Class
* @param rs
* :JDBC
* @return
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
public static synchronized <T> T enityEncapsulation(Class<T> clazz,
ResultSet rs) throws SQLException, InstantiationException,
IllegalAccessException, InvocationTargetException {
ResultSetMetaData rsm = rs.getMetaData();
Method[] methods = clazz.getDeclaredMethods();
int column = rsm.getColumnCount();//
T obj = null;
while (rs.next()) {
obj = clazz.newInstance();//
for (int i = 1; i <= column; i++) {
String set = "set" + rsm.getColumnName(i);
for (Method method : methods) {
// ( ) set
if (method.getName().toLowerCase()
.equals(set.toLowerCase())) {
// set
// ( 3 3 )
if (method.getGenericParameterTypes()[0]
.equals(Integer.TYPE)) {
method.invoke(obj, rs.getInt(i));
} else if (method.getGenericParameterTypes()[0]
.equals(Date.class)) {
method.invoke(obj, rs.getDate(i));
} else {
method.invoke(obj, rs.getString(i));
}
}
}
}
}
return obj;
}
/**
*
*
* @param clazz
* : Class
* @param rs
* :JDBC
* @return list ( )
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
public static synchronized <T> List<T> enitysEncapsulation(Class<T> clazz,
ResultSet rs) throws SQLException, InstantiationException,
IllegalAccessException, InvocationTargetException {
ResultSetMetaData rsm = rs.getMetaData();
Method[] methods = clazz.getDeclaredMethods();
int column = rsm.getColumnCount();
List<T> list = new ArrayList<T>();
while (rs.next()) {
T obj = clazz.newInstance();
for (int i = 1; i <= column; i++) {
String set = "set" + rsm.getColumnName(i);
for (Method method : methods) {
if (method.getName().toLowerCase()
.equals(set.toLowerCase())) {
if (method.getGenericParameterTypes()[0]
.equals(Integer.TYPE)) {
method.invoke(obj, rs.getInt(i));
} else if (method.getGenericParameterTypes()[0]
.equals(Date.class)) {
method.invoke(obj, rs.getDate(i));
} else {
method.invoke(obj, rs.getString(i));
}
}
}
}
list.add(obj);
}
return list;
}
}
사용 방법은 매우 간단하다.
1. 리스트 컬렉션 받기
/**
*
*
* @return List
*/
@Override
public List<Department> selAllDept() {
List<Department> depts = null;
conn = DButil.getConnection();
try {
ps = conn.prepareStatement("select dt1.dept_id,dt1.dept_name,dt2.dept_name as sup_dept_name,dt1.dept_dspt from t_department dt1,t_department dt2 where dt1.sup_dept_id = dt2.dept_id order by dt1.dept_id");
rs = ps.executeQuery();
Class<Department> clazz=Department.class;
depts=DAOUtil.enitysEncapsulation(clazz, rs);
} catch (Exception e) {
e.printStackTrace();
} finally {
DButil.close(rs, ps, conn);
}
return depts;
}
2.단일 솔리드 가져오기
public Department selDept(int dept_id) {
Connection conn = DButil.getConnection();
Department dept=null;
try {
ps= conn.prepareStatement("select t1.*,t2.dept_name as sup_dept_name from t_department t1,t_department t2 where t1.sup_dept_id=t2.dept_id and t1.dept_id=?");
ps.setInt(1, dept_id);
rs = ps.executeQuery();
Class<Department> clazz =Department.class;
dept=DAOUtil.enityEncapsulation(clazz, rs);
} catch (Exception e) {
e.printStackTrace();
}finally{
DButil.close(rs, ps, conn);
}
return dept;
}
주의: 데이터베이스에 있는 열 이름과 실체 클래스의 속성 이름과 유형은 이상적인 데이터에 대응해야 합니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring에서 DAO가 순환 호출될 때 데이터가 실시간으로 업데이트되지 않는 해결 방법문제를 설명하기 전에 몇 가지 전제 사항을 설명하십시오. Spring의 구성 파일에서 다음과 같은 방식으로 데이터베이스 트랜잭션을 구성했다고 가정하십시오. 현재 UserDao 및 Security Service가 있습...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.