32 Dao层和impl层
生活随笔
收集整理的這篇文章主要介紹了
32 Dao层和impl层
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Dao層是啥
dao層又稱數(shù)據(jù)訪問層,全稱為dataAccessobject ,屬于一種比較底層,比較基礎(chǔ)的操作,具體到對(duì)某個(gè)表、某個(gè)實(shí)體的增刪改查。
在java項(xiàng)目中,我們通常單獨(dú)使用一個(gè)包來代表dao層,例如:com.xxx.xxx.dao
dao層主要用來對(duì)數(shù)據(jù)庫(kù)的表進(jìn)行增刪改查,每一個(gè)表用一個(gè)類來操作。通常還會(huì)把dao層細(xì)分為兩個(gè)子層,一個(gè)inter包用來做接口,一個(gè)impl包用來實(shí)現(xiàn)inter包中的各接口。
來我們做個(gè)實(shí)例
有一個(gè)學(xué)生表如:
我們?cè)趀clipse中寫相應(yīng)的dao層如:
優(yōu)化代碼請(qǐng)?zhí)D(zhuǎn)
package com.xiaohei.daoimpl;
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 com.xiaohei.pojo.Student;
public class StudentDaoImpl {
private Connection conn =null;
private PreparedStatement stmt = null;
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:XE";
private String user;
private String password;
private ArrayList<Student> list;
public StudentDaoImpl(String user, String password) {
super();
this.user = user;
this.password = password;
//執(zhí)行加載驅(qū)動(dòng) 建立連接 創(chuàng)建statement對(duì)象的方法
init(url,user,password);
}
/**
* 初始化數(shù)據(jù)庫(kù)連接
* @param url
* @param user
* @param password
*/
private void init(String url, String user, String password) {
//加載驅(qū)動(dòng)
try {
Class.forName(driver);
//建立連接
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch(SQLException e) {
e.printStackTrace();
}
}
/**
* 增加一個(gè)學(xué)生通過姓名,年齡和金錢
* @param sname 學(xué)生姓名,sage 學(xué)生年齡,money 錢
* @return i 返回-1表示失敗,返回其它值表示成功執(zhí)行的SQL語句條數(shù)
*/
public int insertStu(String sname,int sage,double money) {
try {
//sql語句
String sql = "insert into student values(stu_seq.nextval,?,?,?)";
//創(chuàng)建執(zhí)行對(duì)象
stmt = conn.prepareStatement(sql);
//設(shè)置占位符
stmt.setString(1, sname);
stmt.setInt(2, sage);
stmt.setDouble(3, money);
//執(zhí)行SQL語句
int i = stmt.executeUpdate();
//手動(dòng)提交
conn.commit();
//處理結(jié)果
return i;
}catch(SQLException e) {
e.printStackTrace();
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return -1;
}
/**
* 刪除學(xué)生按指定的學(xué)號(hào)
* @param sno 學(xué)生學(xué)號(hào)
* @return i 返回-1表示失敗,返回其它值表示成功執(zhí)行的SQL語句條數(shù)
*/
public int deleteStu(int sno) {
try {
//SQL語句
String sql ="delete student where sno=?";
//stmt對(duì)象
stmt= conn.prepareStatement(sql);
//占位符賦值
stmt.setInt(1, sno);
//執(zhí)行SQL
int i = stmt.executeUpdate();
//手動(dòng)提交
conn.commit();
//處理結(jié)果
return i;
}catch(SQLException e) {
e.printStackTrace();
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return -1;
}
/**
* update操作:修改學(xué)生姓名,年齡和金錢 通過 學(xué)生sno
* @param sno 學(xué)生學(xué)號(hào)
* @return
*/
public int updateStu(int sno,String sname,int sage,double money) {
try {
//sql語句
String sql = "update student set sname=?,sage=?,money=? where sno=?";
//stmt對(duì)象
stmt=conn.prepareStatement(sql);
//占位符賦值
stmt.setString(1,sname);
stmt.setInt(2,sage);
stmt.setDouble(3,money);
stmt.setInt(4,sno);
//執(zhí)行sql
int i = stmt.executeUpdate();
//手動(dòng)提交
conn.commit();
//處理結(jié)果
return i;
}catch(SQLException e) {
e.printStackTrace();
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return -1;
}
/**
* 查詢
* @return 返回一個(gè)ArrayList<Student>對(duì)象
*/
public ArrayList<Student> queryStu(){
list = new ArrayList<>();
try {
//SQL語句
String sql = "select * from student order by sno";
//stmt對(duì)象
stmt = conn.prepareStatement(sql);
//占位符賦值
//執(zhí)行SQL
ResultSet set = stmt.executeQuery();
//處理結(jié)果
while(set.next()) {
Student s = new Student();
s.setSno(set.getInt("sno"));
s.setSage(set.getInt("sage"));
s.setSname(set.getString("sname"));
s.setMoney(set.getDouble("money"));
list.add(s);
}
return list;
}catch(SQLException e) {
e.printStackTrace();
}
return list;
}
}
以上代碼中,我們看到driver、url、user和password這四個(gè)數(shù)據(jù),將來很容易變動(dòng),我們建議使用一個(gè)配置文件properties來保存它們,如果要修改他們,只需要修改配置文件即可。
這樣也方便使用專門的一個(gè)工具(類)來獲取它們。這個(gè)我們將在后面的文章中詳解。
總結(jié)
以上是生活随笔為你收集整理的32 Dao层和impl层的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库防火墙如何防范SQL注入行为
- 下一篇: 启迪协信地产怎么样(启迪协信公寓30年产