轉載自https://www.runoob.com/note/27029mysql
DAO 模式sql
DAO (DataAccessobjects 數據存取對象)是指位於業務邏輯和持久化數據之間實現對持久化數據的訪問。通俗來說,就是將數據庫操做都封裝起來。數據庫
對外提供相應的接口編程
在面向對象設計過程當中,有一些"套路」用於解決特定問題稱爲模式。工具
DAO 模式提供了訪問關係型數據庫系統所需操做的接口,將數據訪問和業務邏輯分離對上層提供面向對象的數據訪問接口。url
從以上 DAO 模式使用能夠看出,DAO 模式的優點就在於它實現了兩次隔離。spa
一個典型的DAO 模式主要由如下幾部分組成。設計
DAO 接口:code
public interface PetDao { /** * 查詢全部寵物 */ List<Pet> findAllPets() throws Exception; }
DAO 實現類:對象
public class PetDaoImpl extends BaseDao implements PetDao { /** * 查詢全部寵物 */ public List<Pet> findAllPets() throws Exception { Connection conn=BaseDao.getConnection(); String sql="select * from pet"; PreparedStatement stmt= conn.prepareStatement(sql); ResultSet rs= stmt.executeQuery(); List<Pet> petList=new ArrayList<Pet>(); while(rs.next()) { Pet pet=new Pet( rs.getInt("id"), rs.getInt("owner_id"), rs.getInt("store_id"), rs.getString("name"), rs.getString("type_name"), rs.getInt("health"), rs.getInt("love"), rs.getDate("birthday") ); petList.add(pet); } BaseDao.closeAll(conn, stmt, rs); return petList; } }
寵物實體類(裏面get/set方法就不列出了)
public class Pet { private Integer id; private Integer ownerId; //主人ID private Integer storeId; //商店ID private String name; //姓名 private String typeName; //類型 private int health; //健康值 private int love; //愛心值 private Date birthday; //生日 }
鏈接數據庫
public class BaseDao { private static String driver="com.mysql.jdbc.Driver"; private static String url="jdbc:mysql://127.0.0.1:3306/epet"; private static String user="root"; private static String password="root"; static { try { Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } public static void closeAll(Connection conn,Statement stmt,ResultSet rs) throws SQLException { if(rs!=null) { rs.close(); } if(stmt!=null) { stmt.close(); } if(conn!=null) { conn.close(); } } public int executeSQL(String preparedSql, Object[] param) throws ClassNotFoundException { Connection conn = null; PreparedStatement pstmt = null; /* 處理SQL,執行SQL */ try { conn = getConnection(); // 獲得數據庫鏈接 pstmt = conn.prepareStatement(preparedSql); // 獲得PreparedStatement對象 if (param != null) { for (int i = 0; i < param.length; i++) { pstmt.setObject(i + 1, param[i]); // 爲預編譯sql設置參數 } } ResultSet num = pstmt.executeQuery(); // 執行SQL語句 } catch (SQLException e) { e.printStackTrace(); // 處理SQLException異常 } finally { try { BaseDao.closeAll(conn, pstmt, null); } catch (SQLException e) { e.printStackTrace(); } } return 0; } }