반사적으로 쓴 Dao층 추상적인 부류를 이용하여 간단한 조회와 수정을 해결합니다.
7376 단어 Java 학습 노트
예를 들면 다음과 같습니다.
/**
* @author howroad
* @Date 2018 3 15
* @version 1.0
*/
public class UserDaoImpl extends ABaseDao implements IUserDao{
@Override
public int add(UserBean user) {
return excuteUpdate("insert into tb_user values(null,?,?,?,now())",user.getUsername(),user.getPassword(),user.getNickname());
}
@Override
public UserBean findById(int id) {
return fetchSingleEntity("select * from tb_user where id=?", id);
}
public List listByNickname(String nickName){
return fetchList("select * from tb_user where nickname=?",nickName);
};
}
추상 클래스는 아래와 같다(Java 9). 공부하고 있습니다. 문제를 지적해 주셔서 감사합니다.
package com.project.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.project.bean.PageBean;
/**dao sql javaBean/List/PageBean/
* @author howroad
* @Date 2018 3 18
* @version 1.1 count long
* @version 1.2 time
* @version 1.3 PagePean
* @version 1.4 null Bug
* @version 1.5 pageBean
* @version 1.6 ResultSet preparedStatement , limit pageBean, pageBean , ,pageBean int , !!
* @version 1.7 pgaeBean bug
*/
public abstract class ABaseDao {
private final static String URL="jdbc:mysql://127.0.0.1:3306/db_forest_disaster?useUnicode=true&characterEncoding=UTF-8";
private final static String USER="root";
private final static String PASSWORD="luhao123";
static {
try {
//
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private Connection conn=null;
private Class entityClass=null;
//java9 newInstance()
private Constructor constructor=null;
private Field[] fields=null;
@SuppressWarnings("unchecked")
protected ABaseDao() {
//
ParameterizedType pt=(ParameterizedType)this.getClass().getGenericSuperclass();
//
entityClass= (Class) pt.getActualTypeArguments()[0];
//
try {
constructor= entityClass.getDeclaredConstructor();
} catch (Exception e) {
e.printStackTrace();
}
// Field
fields=entityClass.getDeclaredFields();
}
/**
*
* @return
*/
protected Connection getConn() {
try {
conn=DriverManager.getConnection(URL,USER,PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
*
*/
protected void close() {
try {
if(conn!=null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
*
* @param rs
* @param ps sql PreparedStatement
* @param sql
* @param objs
* @return
* rs ps rs ps
*/
private ResultSet excuteQuery(ResultSet rs,PreparedStatement ps,String sql,Object...objs) {
try {
ps=conn.prepareStatement(sql);
for(int i=0;i fetchList(String sql,Object...objs){
List list = new ArrayList();
PreparedStatement ps =null;
ResultSet rs =null;
//
getConn();
rs=excuteQuery(rs,ps,sql, objs);
try {
while(rs.next()) {
E entity=constructor.newInstance();
// E
setField(entity, fields, rs);
//
list.add(entity);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
close();
}
return list;
}
/**
*
* @param pageSize
* @param pageNo
* @param sql
* @param objs
* @return PageBean
* : !!
*/
protected PageBean fetchPageBean(int pageNo,int pageSize,String sql,Object...objs){
getConn();
// pageBean
PreparedStatement ps = null;
ResultSet rs = null;
rs = excuteQuery(rs,ps,sql, objs);
int countRecord=countRs(rs);
// limit sql
PreparedStatement ps2 = null;
ResultSet rs2 = null;
int position = pageSize * (pageNo-1);
String sql2=sql+" limit "+position+","+pageSize;
rs2=excuteQuery(rs2,ps2,sql2, objs);
//
List list = new ArrayList();
try {
while(rs2.next()) {
//
E entity=constructor.newInstance();
setField(entity, fields, rs2);
//
list.add(entity);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
// ...
try {
if(rs2!=null) rs2.close();
if(rs!=null) rs.close();
if(ps2!=null) ps2.close();
if(ps!=null) ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
close();
}
return new PageBean(list, pageNo, pageSize, countRecord);
}
// : , ...
public PageBean fetchPageBean2(int pageNo,int pageSize,String sql,Object...objs){
//
PreparedStatement ps = null;
ResultSet rs = null;
getConn();
rs = excuteQuery(rs,ps,sql, objs);
// list
List list = new ArrayList();
int countRecord = 0;
int start = pageSize * (pageNo-1);
int end = start+pageSize;
try {
while(rs.next()) {
// end, countRecord
if(countRecord>=end) {
rs.last();
countRecord=rs.getRow();
break;
}
//
if(countRecord>=start) {
//
E entity=constructor.newInstance();
setField(entity, fields, rs);
list.add(entity);
}
//
countRecord++;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
close();
}
return new PageBean(list, pageNo, pageSize, countRecord);
}
/**
* , javaBean
* @param entity
* @param fields
* @param rs
* @throws Exception
* @throws Exception
*/
private void setField(E entity,Field[] fields,ResultSet rs) throws Exception{
// ( )
int countRow = rs.getMetaData().getColumnCount();
// javaBean , javaBean
for (int i=0;i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
반사적으로 쓴 Dao층 추상적인 부류를 이용하여 간단한 조회와 수정을 해결합니다.dao층은 클래스가 이 추상적인 클래스를 계승하는 것을 실현하고 간단한 조회 수정 코드를 간소화할 수 있다. 예를 들면 다음과 같습니다. 추상 클래스는 아래와 같다(Java 9). 공부하고 있습니다. 문제를 지적해 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.