DBUtils的使用:
在使用開源框架DBUtils時,它只是幫我們簡化了CRUD的代碼,但是它不負責連接的創建以及獲取工作。
1.和使用開源框架都一樣的一個步驟,先導入jar文件
2.在這裏採用的是開源數據庫連接池C3P0進行連接
3.編寫CRUD代碼
使用其功能實現的操作:
QueryRunner QR=new QueryRunner(CPDS);
- 增加操作:QR.update("insert into account values(null,?,?)","wew",1000);
- 刪除操作:QR.update("delete from account where id=?",3);
- 修改操作:QR.update("update account set money=? where id=?", 10000,5);
- 查詢操作(一):直接創建ResultSetHandler接口的匿名實現類方式
- 去執行查詢,查詢到的數據還是在result裏面,然後調用handle方法,由用戶手動封裝
- 查詢操作(二):直接使用框架已經寫好的實現類ResultSetHandler的方式
- 查詢出來的是一個對象,用BeanHandler
- 查詢出來的是很多對象則用BeanListHandler
常用的實現類
BeanHandler:查詢到的單個數據封裝成一個對象
BeanListHandler:查詢到的多個數據封裝成一個List<對象>
ArrayHandler:查詢到的單個數據封裝成一個數組
ArrayListHandler:查詢道德多個數據封裝成一個集合,集合裏面的元素是數組
MapHandler:查詢到的單個數據封裝成一個Map
MapListHandler:查詢到的多個數據封裝成一個集合,集合裏面的元素是map
ColumnListHandler:查詢具體某一列
KeyedHandler:查詢具體某一個值
ScalarHandler:查詢一些聚合函數(count總數)
TestDBUtils.java
package dbutil;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;
import bean.Account;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class TestDBUtils {
@Test
public void testInsert() throws SQLException{
ComboPooledDataSource CPDS=new ComboPooledDataSource();
QueryRunner QR=new QueryRunner(CPDS);
/*
//增加操作
QR.update("insert into account values(null,?,?)","wew",1000);
//刪除操作
QR.update("delete from account where id=?",3);
//修改操作
QR.update("update account set money=? where id=?", 10000,5);
*/
//查詢操作(一)直接創建ResultSetHandler接口的匿名實現類方式
//去執行查詢,查詢到的數據還是在result裏面,然後調用handle方法,由用戶手動封裝
Account account=QR.query("select *from account where id=?", new ResultSetHandler<Account>(){
@Override
public Account handle(ResultSet rs) throws SQLException {
Account account=new Account();
while(rs.next()){
String name=rs.getString("name");
int money=rs.getInt("money");
account.setName(name);
account.setMoney(money);
}
return account;
}
},6);
System.out.println(account.toString()); //Account [name=abc, money=2345]
//查詢操作(二)直接使用框架已經寫好的實現類ResultSetHandler的方式
//查詢單個對象
Account account2=QR.query("select *from account where id=?",
new BeanHandler<Account>(Account.class) ,6);
//Account.class通過類的字節碼得到該類的實例
System.out.println(account2.toString());
//查詢多個對象
List<Account> list = QR.query("select *from account",
new BeanListHandler<Account>(Account.class));
for (Account account3 : list) {
System.out.println(account3.toString());
}
}
}
Account.java
package bean;
public class Account {
private String name;
private int money;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
@Override
public String toString() {
return "Account [name=" + name + ", money=" + money + "]";
}
}
爲了避免一些麻煩,所以給出目錄結構,並標出用到的jar文件,配置文件等等...
JSP開發模式,三層架構與MVC設計模式的認識:
-
JSP的開發模式:
開發模式1:JavaBean+JSP
在jsp裏直接寫java代碼,維護起來困難,且jsp的頁面代碼會變成臃腫
開發模式2:JavaBean+JSP+Servlet
實際上是MVC模式:
M(Model)模型層: 封裝數據,數據處理JavaBean java類 EJB
V(View)視圖層: JSP jsp專注於顯示
C(Controller)控制層: Servlet,接受頁面的請求,找模型層去處理,然後響應數據出去
對於大型項目:分層,邏輯比較清楚,便於維護,擴展方便。(適合)
對於小型項目:嚴格遵守MVC,比較麻煩,代碼會比較多
-
三層架構:
Web層:Servlet/jsp
業務邏輯層:EJB 會話bean JavaBean
數據訪問層:DAO
-
MVC設計模式:
M:對應於三層架構裏的業務邏輯層和數據訪問層;實現數據的封裝和數據的處理
V:對應於三層架構裏的Web層;實現顯示
C:對應於三層架構裏的Web層;實現了接受請求,調用模型層處理數據,反饋給View