Dao設計模式java
阿新 • • 發佈:2018-12-15
Data Access object
我們要在資料庫中加入一種訪問更為方便的物件,它有訪問資料庫的各種方法,它是一個介面 宣告規則
準備
將架包拷入專案下新建的lib資料夾中 並匯入
將我們寫好的工具類加入src下的包中
將我們的properties檔案放入專案下或者src下
編寫
第一步:建立dao
如果我要編寫一個操縱一個表,那麼我就用這個表名力命名一個Dao介面 比如:studentDao
public interface StudentDao{
}
第二步:編寫Dao
我們將需要操縱表的方法都寫在介面中,宣告訪問規則
void findAll();
//這裡可多寫幾個方法
第三步:編寫體格實現Dao的類
也就是編寫方法
我們最後用的時候是會很方便的。
全程式碼小例
Dao
public interface UserDao {
/**
* 根據id去更新具體的使用者名稱
* @param id
* @param name
*/
void update(int id , String name);
void delete(int id);
/**
* 執行新增
* @param userName
* @param password
*/
void insert(String userName , String password);
/**
* 查詢所有
*/
void findAll();
/**
* 登入方法
* @param username
* @param password
*/
void login(String username , String password);
}
public class UserDaoImpl implements UserDao{
@Override
public void findAll() {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JDBCUtil.getConn();
st = conn.createStatement();
String sql = "select * from t_user";
rs = st.executeQuery(sql);
while(rs.next()){
String userName = rs.getString("username");
String password = rs.getString("password");
System.out.println(userName+"="+password);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtil.release(conn, st, rs);
}
}
@Override
public void login(String username, String password) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
//1. 獲取連線物件
conn = JDBCUtil.getConn();
//2. 建立statement物件
String sql = "select * from t_user where username=? and password=?";
//預先對sql語句執行語法的校驗,? 對應的內容,後面不管傳遞什麼進來,都把它看成是字串。
PreparedStatement ps = conn.prepareStatement(sql);
//? 對應的索引從 1 開始。
ps.setString(1, username);
ps.setString(2, password);
rs = ps.executeQuery();
if(rs.next()){
System.out.println("登入成功");
}else{
System.out.println("登入失敗");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtil.release(conn, st, rs);
}
}
@Override
public void insert(String userName, String password) {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = JDBCUtil.getConn();
String sql = "insert into t_user values(null , ? , ?)";
ps = conn.prepareStatement(sql);
//給佔位符賦值 從左到右數過來,1 代表第一個問號。
ps.setString(1, userName);
ps.setString(2, password);
int result = ps.executeUpdate();
if(result>0){
System.out.println("新增成功");
}else{
System.out.println("新增失敗");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtil.release(conn, ps);
}
}
@Override
public void delete(int id) {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = JDBCUtil.getConn();
String sql = "delete from t_user where id = ?";
ps = conn.prepareStatement(sql);
//給佔位符賦值 從左到右數過來,1 代表第一個問號, 永遠你是1開始。
ps.setInt(1, id);
int result = ps.executeUpdate();
if(result>0){
System.out.println("刪除成功");
}else{
System.out.println("刪除失敗");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtil.release(conn, ps);
}
}
@Override
public void update(int id, String name) {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = JDBCUtil.getConn();
String sql = "update t_user set username=? where id =?";
ps = conn.prepareStatement(sql);
//給佔位符賦值 從左到右數過來,1 代表第一個問號, 永遠你是1開始。
ps.setString(1, name);
ps.setInt(2, id);
int result = ps.executeUpdate();
if(result>0){
System.out.println("更新成功");
}else{
System.out.println("更新失敗");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtil.release(conn, ps);
}
}
}