저는 Java에 익숙하지 않으며 기본 데이터베이스 액세스 레이어를 구현하려고합니다. JDBC 보일러 플레이트 코드를 줄이기 위해 Apache DBUtils를 사용하고 있습니다.이 코드는 실제로 잘 작동합니다.데이터베이스 액세스 레이어에서 코드 중복을 줄이려면 어떻게해야합니까?
문제는 제 구현에서 데이터베이스의 각 테이블에 대해 CRUD에 대해 별도의 클래스를 사용하고 있으며 많은 기능을 복제하는 것이 잘못되었다고 생각합니다.
허용되는 설계입니까? 그렇지 않은 경우 코드 중복을 줄이려면 어떻게해야합니까?
내 방식으로 제네릭을 사용하도록 내 솔루션을 리팩터링 할 수 있습니까?
해결책으로 ORM (myBatis, Hibernate 등)을 사용할 수 있다는 것을 알았지 만, 도움이된다면 DBUtils 및 일반 JDBC를 사용하려고합니다.
단지 설명을위한:
내가 2 개 테이블이 있다고하자 ... 내 현재 솔루션에
---------------------
User | File
---------------------
userId | fileId
name | path
age | size
---------------------
내가 2 개 클래스 (UserStore, 파일 저장소) 및 을 만들 것입니다 각 클래스는 유사한 기본 CRUD를 구현하는 것이 방법 :
protected boolean Create(User newUser)
{
QueryRunner run = new QueryRunner(dataSource);
try
{
run.update("INSERT INTO User (name, age) " +
"VALUES (?, ?)", newUser.getName(), newUser.getAge());
}
catch (SQLException ex)
{
Log.logException(ex);
return false;
}
return true;
}
protected User Read(int userId)
{
try
{
User user = run.query("SELECT * FROM User WHERE userId = ? ", userId);
return user;
}
catch (SQLException ex)
{
Log.logException(ex);
return null;
}
}
protected update(User user)
{
... perform database query etc
}
protected delete(int userId)
{
... perform database query etc
}
그리고 ... 때문에 템플릿 방법이 작동하지 않습니다 ...? – kutschkem
Spring JDBC 템플릿을 의미합니까? – Fade
아니, 템플릿 패턴 의미 http://en.wikipedia.org/wiki/Template_method_pattern – kutschkem