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