JDBC(3) JAVA 연결 데이터베이스의 추상적인 DAO 작업

추상적인 DAO 작업
  • 모든 테이블 조작은 일부 조작에 대응하고 우리는 이것들을 대응하는DAO에 추출할 것이다.그러면 대량의 중복 조작이 존재하는데 통용되는 부분을 추출하여 모두가 계승하여 사용할 수 있는지의 여부가 있다.
  • DAO의 조작을 먼저 인터페이스로 쓰고 통용되는 조작을 추출한다.
  • 운영
  • 키에 따른 쿼리
  • 모두 조회
  • 증가, 삭제, 수정, 기록

  • DAO 작업의 인터페이스 추상
    package lesson2.dao;
    
    import java.io.Serializable;
    import java.util.List;
    
    /**
     *    DAO     
     * @author hh
     *
     * @param 
     */
    public interface Dao<T> {
        public T findById(Serializable id,String sql,RowMapper rm);
        public List find(String sql,RowMapper rm,Object...obj);
        public int saveOrUpdateOrDelete(String sql,Object...obj);
    }
    

    실현 인터페이스
    package lesson2.dao;
    
    import java.io.Serializable;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.List;
    import lesson2.JdbcUitl;
    
    /**
     *     ,    DAO   
     * @author hh
     *
     * @param 
     */
    public class DaoSupport<T> implements Dao<T>{
    
        /**
         *   ID    
         */
        @Override
        public T findById(Serializable id,String sql,RowMapper rm) {
            Connection con = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            T t=null;
            try {
                con = JdbcUitl.getConn();
                pstmt = con.prepareStatement(sql);
                pstmt.setObject(1, id);
                rs = pstmt.executeQuery();
                if(rs.next()){
                    //    -->             
                    t = rm.getRow(rs);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUitl.close(pstmt, rs);
            }
            return t;
        }
    
        /**
         *     
         */
        @Override
        public List find(String sql, RowMapper rm, Object... obj) {
            List lists = new ArrayList();
            Connection con = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            try {
                con = JdbcUitl.getConn();
                pstmt = con.prepareStatement(sql);
                for(int i = 0;i1, obj[i]);
                }
                rs=pstmt.executeQuery();
                while(rs.next()){
                    T t = rm.getRow(rs);
                    lists.add(t);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUitl.close(pstmt, rs);
            }
            return lists;
        }
    
        /**
         *     
         */
        @Override
        public int saveOrUpdateOrDelete(String sql, Object... obj) {
            Connection con = null;
            PreparedStatement pstmt = null;
            int n = 0;
            try {
                con = JdbcUitl.getConn();
                pstmt = con.prepareStatement(sql);
                for(int i=0;i1,obj[i]);
                }
                n=pstmt.executeUpdate();
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUitl.close(pstmt, null);
            }
            return n;
        }
    }
    

    RowMapper 커넥터
    구체적인 반환값 유형을 얻을 수 없기 때문에 구체적인 두께가 데이터베이스 반환값을 얻은 후에 결정해야 한다.먼저 인터페이스를 정의하고 다음 프로그램에서 실현합니다.
    ackage lesson2.dao;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public interface RowMapper <T> {
        public T getRow(ResultSet rs)throws SQLException;
    }
    

    테스트 클래스 1 Account 클래스
    package lesson2.dao;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.List;
    
    import lesson2.Account;
    import lesson2.User;
    import lesson2.dao.UserTest.UserMapper;
    
    public class AccountTest {
        public static void main(String[] args) {
            DaoSupport dao = new DaoSupport();
            //    id  
    //      Account account=dao.findById(1001, "select*from account where id = ?",new AccountMapper());
    //      System.out.println(account);
            //      
    //      List accounts = dao.find("select * from account where money=?and id=?", new AccountMapper(), 100,1010);
    //      for (Account account : accounts) {
    //          System.out.println(account);
    //      }
            //      
            Account account = new Account(4000, 1000, "hh");
            int n = dao.saveOrUpdateOrDelete("insert into account(id,money,name)values(?,?,?)", account.getId(),account.getMoney(),account.getName());
            System.out.println(n);
    
    
        }
    
        /**
         *       
         * @author hh
         *
         */
        static class AccountMapper implements RowMapper{
    
            @Override
            public Account getRow(ResultSet rs) throws SQLException {
                Account account = new Account();
                account.setId(rs.getInt("id"));
                account.setMoney(rs.getInt("money"));
                account.setName(rs.getString("name"));
                return account;
            }
        }
    }
    

    테스트 클래스 2 User 클래스
    package lesson2.dao;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.List;
    
    import lesson2.User;
    
    public class UserTest {
        public static void main(String[] args) {
            DaoSupport dao= new DaoSupport();
            //    id  
    //      User u = dao.findById(1001,"select * from bb_user where id = ?",new UserMapper());
    //      System.out.println(u);
            //      
    //      List users = dao.find("select * from bb_user where username=?", new UserMapper(), "zhangsan");
    //      for (User user : users) {
    //          System.out.println(user);
    //      }
            //      
            User user = new User(3000, "XXX", "YYY", "ZZZ");
            int n =dao.saveOrUpdateOrDelete("insert into bb_user(id,username,userpass,email)values(?,?,?,?)",user.getId(),user.getUsername(),user.getUserpass(),user.getEmail());
            System.out.println(n);
        }
    
        /**
         *       
         * @author hh
         *
         */
        static class UserMapper implements RowMapper{
    
            @Override
            public User getRow(ResultSet rs) throws SQLException {
                // TODO Auto-generated method stub
                User u = new User();
                u.setId(rs.getInt("id"));
                u.setUsername(rs.getString("username"));
                u.setUserpass(rs.getString("userpass"));
                u.setEmail(rs.getString("email"));
                return u;
            }
    
        }
    }
    

    좋은 웹페이지 즐겨찾기