DAO设计模式-1
2014-02-21 22:12
344 查看
DAO设计模式简介
DAO(Data Access Object,数据访问对象),主要的功能就是用于进行数据操作的,在程序的标准开发框架中属于数据层的操作。
企业分层架构
1):客户层:因为现在都采用了B/S开发架构,所以一般都使用浏览器进行访问。
2):显示层:使用JSP/Servlet进行页面效果的显示。
3):业务层:(Business Object,业务对象):会将多个原子性的DAO操作进行组合,组合
成一个完整的业务逻辑。
4):数据层:(DAO):提供多个原子性的DAO操作,例如:增加、修改、删除等,都属
于原子性的操作。
资源层主要是数据库的操作层,里面可以进行各种的数据存储,但是这些数据存储操作的时候肯定依靠SQL语句,之前也发现了,如果在一个程序中出现了过多的SQL语句的直接操作,则JSP页面变得相当的复杂,而且也不便于程序的可重用性。
可以通过一个专门的数据库的操作组件完成,那么这个就是数据层的功能。
业务层是整个项目的核心。
DAO组成
在整个DAO中,实际上都是以接口为操作标准的,即:客户端依靠DAO实现的接口进行操作,而服务器端要将接口进行具体的实现,DAO由以下几个部分组成:
1):DatabaseConnection:专门负责数据库的打开与关闭的操作的类;
2):VO:主要由属性、setter、getter方法组成,VO类中的属性与表中的字段相对应,每一个VO类的对象都表示表中的每一条记录;
3):DAO:主要定义操作的接口,定义一系列数据库的原子性操作,例如:增加、修改、删除、按ID查询等;
4):Impl:DAO接口的真实实现类,完成具体的数据库操作,但是不负责数据库的打开和关闭。
5):Proxy:代理实现类,主要完成数据库的打开和关闭并且调用真实实现类对象的操作。
6):Factory:工厂类,通过工厂类取得一个DAO的实例化对象。
在本程序之中,由于操作较多,下面只讲解核心部分的操作,核心部分就是增加数据,查询全部数据,根据关键字查询。
在接口中的命名是很有规律的,以后的所有编写的程序一定要注意开头:
1):数据库的更新操作:doXXX;
2):查询:findXXX、getXXX。
下面有一张表:
DROP TABLE user ; -- 删除表
CREATE TABLE user(
id INT PRIMARY KEY ,
name VARCHAR(30) NOT NULL ,
password VARCHAR(32) NOT NULL ,
age INT NOT NULL ,
sex VARCHAR(2) DEFAULT '男' ,
birthday DATE
) ;
插入数据的格式如下:
INSERT INTO user(id,name,password,age,sex,birthday) VALUES (001,'斜雨','skewrain
',23,'男','2013-08-27') ;
按照以上的DAO组成的顺序,我们给出的代码如下:
【DatabaseConnection.java的内容如下:】
package com.skewrain.demo1.dbc;
import java.sql.Connection;
import java.sql.DriverManager;
public class DatabaseConnection{
private static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
private static final String DBURL = "jdbc:mysql://localhost:3306/skewrain";
private static final String DBUSER = "root";
private static final String DBPASSWORD = "mysqladmin";
private Connection conn;
public DatabaseConnection() throws Exception{
Class.forName(DBDRIVER);
this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
}
public Connection getConnection(){
return this.conn;
}
public void close() throws Exception{
if(this.conn != null){
try{
this.conn.close();
}catch(Exception e){
throw e;
}
}
}
}
【User.java的内容如下:】
package com.skewrain.demo1.vo;
import java.util.Date;
public class User{
private int id;
private String name;
private String password;
private int age;
private String sex;
private Date birthday;
public void setId(int id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
public void setPassword(String password){
this.password = password;
}
public void setAge(int age){
this.age = age;
}
public void setSex(String sex){
this.sex = sex;
}
public void setBirthday(Date birthday){
this.birthday = birthday;
}
public int getId(){
return this.id;
}
public String getName(){
return this.name;
}
public String getPassword(){
return this.password;
}
public int getAge(){
return this.age;
}
public String getSex(){
return this.sex;
}
public Date getBirthday(){
return this.birthday;
}
}
【IUserDAO.java的内容如下:】
package com.skewrain.demo1.dao;
import java.util.*;
import com.skewrain.demo1.vo.*;
public interface IUserDAO{
public boolean doCreate(User user)throws Exception;
public List<User> findAll(String keyWord) throws Exception;
public User findById(int id) throws Exception;
}
有了接口之后,下面要定义的肯定是具体的实现类。
【UserDAOImpl.java的内容如下:】
package com.skewrain.demo1.impl;
import java.util.*;
import java.sql.*;
import com.skewrain.demo1.dao.*;
import com.skewrain.demo1.vo.*;
public class UserDAOImpl implements IUserDAO {
private Connection conn = null;
private PreparedStatement pstmt = null;
public UserDAOImpl(Connection conn){
this.conn = conn;
}
public boolean doCreate(User user) throws Exception{
boolean flag = false;
String sql = "INSERT INTO
user(id,name,password,age,sex,birthday) VALUES(?,?,?,?,?,?)";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setInt(1,user.getId());
this.pstmt.setString(2,user.getName());
this.pstmt.setString(3,user.getPassword());
this.pstmt.setInt(4,user.getAge());
this.pstmt.setString(5,user.getSex());
this.pstmt.setDate(6,new java.sql.Date(user.getBirthday().getTime()));
if(this.pstmt.executeUpdate() > 0){
flag = true;
}
this.pstmt.close();
return flag;
}
public List<User> findAll(String keyWord) throws Exception{
List<User> all = new ArrayList<User>();
String sql = "SELECT id,name,password,age,sex,birthday
FROM user WHERE id LIKE ? OR name LIKE ?";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setString(1,"%"+keyWord+"%");
this.pstmt.setString(2,"%"+keyWord+"%");
ResultSet rs = this.pstmt.executeQuery();
User user = null;
while(rs.next()){
user = new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPassword(rs.getString(3));
user.setAge(rs.getInt(4));
user.setSex(rs.getString(5));
user.setBirthday(rs.getDate(6));
all.add(user);
}
this.pstmt.close();
return all;
}
public User findById(int id) throws Exception{
User user = null;
String sql = "SELECT id,name,password,age,sex,birthday
FROM user WHERE id LIKE ?";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setInt(1,id);
ResultSet rs = this.pstmt.executeQuery();
if(rs.next()){
user = new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPassword(rs.getString(3));
user.setAge(rs.getInt(4));
user.setSex(rs.getString(5));
user.setBirthday(rs.getDate(6));
}
this.pstmt.close();
return user;
}
}
【UserDAOProxy.java的内容如下:】
package com.skewrain.demo1.proxy;
import java.util.*;
import java.sql.*;
import com.skewrain.demo1.dbc.*;
import com.skewrain.demo1.impl.*;
import com.skewrain.demo1.vo.*;
import com.skewrain.demo1.dao.*;
public class UserDAOProxy implements IUserDAO {
private DatabaseConnection dbc = null;
private IUserDAO dao = null;
public UserDAOProxy() throws Exception {
this.dbc = new DatabaseConnection();
this.dao = new UserDAOImpl(this.dbc.getConnection());
}
public boolean doCreate(User user) throws Exception{
boolean flag = false;
try{
if(this.dao.findById(user.getId())== null){
flag = this.dao.doCreate(user);
}
}catch(Exception e){
throw e;
}finally{
this.dbc.close();
}
return flag;
}
public List<User> findAll(String keyWord) throws Exception{
List<User> all = null;
try{
all = this.dao.findAll(keyWord);
}catch(Exception e){
throw e;
}finally{
this.dbc.close();
}
return all;
}
public User findById(int id) throws Exception{
User user = null;
try{
user = this.dao.findById(id);
}catch(Exception e){
throw e;
}finally{
this.dbc.close();
}
return user;
}
}
【DAOFactory.java的内容如下所示:】
package com.skewrain.demo1.factory;
import com.skewrain.demo1.dao.IUserDAO;
import com.skewrain.demo1.proxy.UserDAOProxy;
public class DAOFactory {
public static IUserDAO getIUserDAOInstance() throws Exception{
return new UserDAOProxy();
}
}
下面是两个测试程序:
【TestDAOInsert.java的内容如下:】
package com.skewrain.demo1.test;
import com.skewrain.demo1.factory.DAOFactory;
import com.skewrain.demo1.vo.*;
public class TestDAOInsert {
public static void main(String args[])throws Exception{
User user = null;
for(int x=0;x<5;x++){
user = new User();
user.setId(1000 + x);
user.setName("斜雨-" + x);
user.setPassword("123-" + x);
user.setAge(18 + x);
user.setSex("男");
user.setBirthday(new java.util.Date());
DAOFactory.getIUserDAOInstance().doCreate(user);
}
}
}
执行此程序后,可以向数据库表中增加记录。
原始的数据库表中的数据如下:
执行TestDAOInsert.java的结果如下:
【TestDAOSelect.java的内容如下:】
package com.skewrain.demo1.test;
import java.util.*;
import com.skewrain.demo1.factory.DAOFactory;
import com.skewrain.demo1.vo.*;
public class TestDAOSelect {
public static void main(String args[])throws Exception{
List<User> all = DAOFactory.getIUserDAOInstance().findAll("");
Iterator<User> iter = all.iterator();
while(iter.hasNext()){
User user = iter.next();
System.out.println(user.getId() + "、" + user.getName() + "-->" + user.getPassword());
}
}
}
执行此程序,可以将数据库表中的内容在终端输出。
当DAO开发完成之后,下面就可以利用JSP完成DAO的程序的调用。
一个JSP页面绝对不允许导入SQL包,如果有可能,最好一个包都不导入。
【user_insert.jsp的内容如下:】
<%@page contentType = "text/html" pageEncoding="GBK"%>
<html>
<head><title>www.baidu.com</title></head>
<body>
<form action="user_insert_do.jsp" method="post">
用户编号:<input type="text" name="id"><br>
用户姓名:<input type="text" name="name"><br>
用户密码:<input type="text" name="password"><br>
用户年龄:<input type="text" name="age"><br>
用户性别:<input type="text" name="sex"><br>
用户生日:<input type="text" name="birthday"><br>
<input type="submit" value="注册">
<input type="reset" value="重置">
</body>
</html>
【user_insert_do.jsp的内容如下:】
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="com.skewrain.demo1.factory.*,com.skewrain.demo1.vo.*"%>
<%@ page import="java.text.*"%>
<html>
<head><title>www.baidu.com</title></head>
<% request.setCharacterEncoding("GBK"); %>
<body>
<%
User user = new User();
user.setId(Integer.parseInt(request.getParameter("id")));
user.setName(request.getParameter("name"));
user.setPassword(request.getParameter("password"));
user.setAge(Integer.parseInt(request.getParameter("age")));
user.setSex(request.getParameter("sex"));
user.setBirthday(new SimpleDateFormat("YYYY-MM-DD").parse(request.getParameter("birthday")));
try{
if(DAOFactory.getIUserDAOInstance().doCreate(user)){
%>
<h3>雇员信息添加成功!</h3>
<%
}else{
%>
<h3>雇员信息添加失败!</h3>
<%
}
%>
<%
}catch(Exception e){
e.printStackTrace();
}
%>
</body>
</html>
执行user_insert.jsp的结果如下:
点击“注册”后,在浏览器和数据库表中分别发现如下记录:
数据库表中增加的记录如下:
【user_list.jsp的内容如下:】
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="com.skewrain.demo1.factory.*,com.skewrain.demo1.vo.*"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.baidu.com</title></head>
<% request.setCharacterEncoding("GBK"); %>
<body>
<%
String keyWord = request.getParameter("kw");
if(keyWord == null){
keyWord = ""; //如果没有查询关键字,则查询全部。
}
List<User> all = DAOFactory.getIUserDAOInstance().findAll(keyWord);
Iterator<User> iter = all.iterator();
%>
<center>
<form action="user_list.jsp" method="post">
请输入查询关键字:<input type="text" name="kw">
<input type="submit" value="查询">
</form>
<table border="1" width="80%">
<tr>
<td>用户编号</td>
<td>用户姓名</td>
<td>用户密码</td>
<td>用户年龄</td>
<td>用户性别</td>
<td>用户生日</td>
</tr>
<%
while(iter.hasNext()){
User user = iter.next();
%>
<tr>
<td><%=user.getId()%></td>
<td><%=user.getName()%></td>
<td><%=user.getPassword()%></td>
<td><%=user.getAge()%></td>
<td><%=user.getSex()%></td>
<td><%=user.getBirthday()%></td>
</tr>
<%
}
%>
</table>
</center>
</body>
</html>
执行此段代码的结果如下:
当在查询栏中输入“斜雨”,点击“查询”之后的结果如下:
可以发现,使用JSP+DAO的开发后,程序变得更加的清晰,而且以后所有的数据层操作也可以任意的移植,不一定非要在JSP上使用了。
使用JSP+JavaBean的开发模式也称为Model1,通过JSP显示,通过JSP完成功能,达到显示和数据操作的相分离。
小结:
1.DAO属于数据层操作;
2.DAO的各个组成部分;
3.使用JSP+DAO可以将数据操作交给JavaBean完成。
DAO(Data Access Object,数据访问对象),主要的功能就是用于进行数据操作的,在程序的标准开发框架中属于数据层的操作。
企业分层架构
1):客户层:因为现在都采用了B/S开发架构,所以一般都使用浏览器进行访问。
2):显示层:使用JSP/Servlet进行页面效果的显示。
3):业务层:(Business Object,业务对象):会将多个原子性的DAO操作进行组合,组合
成一个完整的业务逻辑。
4):数据层:(DAO):提供多个原子性的DAO操作,例如:增加、修改、删除等,都属
于原子性的操作。
资源层主要是数据库的操作层,里面可以进行各种的数据存储,但是这些数据存储操作的时候肯定依靠SQL语句,之前也发现了,如果在一个程序中出现了过多的SQL语句的直接操作,则JSP页面变得相当的复杂,而且也不便于程序的可重用性。
可以通过一个专门的数据库的操作组件完成,那么这个就是数据层的功能。
业务层是整个项目的核心。
DAO组成
在整个DAO中,实际上都是以接口为操作标准的,即:客户端依靠DAO实现的接口进行操作,而服务器端要将接口进行具体的实现,DAO由以下几个部分组成:
1):DatabaseConnection:专门负责数据库的打开与关闭的操作的类;
2):VO:主要由属性、setter、getter方法组成,VO类中的属性与表中的字段相对应,每一个VO类的对象都表示表中的每一条记录;
3):DAO:主要定义操作的接口,定义一系列数据库的原子性操作,例如:增加、修改、删除、按ID查询等;
4):Impl:DAO接口的真实实现类,完成具体的数据库操作,但是不负责数据库的打开和关闭。
5):Proxy:代理实现类,主要完成数据库的打开和关闭并且调用真实实现类对象的操作。
6):Factory:工厂类,通过工厂类取得一个DAO的实例化对象。
在本程序之中,由于操作较多,下面只讲解核心部分的操作,核心部分就是增加数据,查询全部数据,根据关键字查询。
在接口中的命名是很有规律的,以后的所有编写的程序一定要注意开头:
1):数据库的更新操作:doXXX;
2):查询:findXXX、getXXX。
下面有一张表:
DROP TABLE user ; -- 删除表
CREATE TABLE user(
id INT PRIMARY KEY ,
name VARCHAR(30) NOT NULL ,
password VARCHAR(32) NOT NULL ,
age INT NOT NULL ,
sex VARCHAR(2) DEFAULT '男' ,
birthday DATE
) ;
插入数据的格式如下:
INSERT INTO user(id,name,password,age,sex,birthday) VALUES (001,'斜雨','skewrain
',23,'男','2013-08-27') ;
按照以上的DAO组成的顺序,我们给出的代码如下:
【DatabaseConnection.java的内容如下:】
package com.skewrain.demo1.dbc;
import java.sql.Connection;
import java.sql.DriverManager;
public class DatabaseConnection{
private static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
private static final String DBURL = "jdbc:mysql://localhost:3306/skewrain";
private static final String DBUSER = "root";
private static final String DBPASSWORD = "mysqladmin";
private Connection conn;
public DatabaseConnection() throws Exception{
Class.forName(DBDRIVER);
this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
}
public Connection getConnection(){
return this.conn;
}
public void close() throws Exception{
if(this.conn != null){
try{
this.conn.close();
}catch(Exception e){
throw e;
}
}
}
}
【User.java的内容如下:】
package com.skewrain.demo1.vo;
import java.util.Date;
public class User{
private int id;
private String name;
private String password;
private int age;
private String sex;
private Date birthday;
public void setId(int id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
public void setPassword(String password){
this.password = password;
}
public void setAge(int age){
this.age = age;
}
public void setSex(String sex){
this.sex = sex;
}
public void setBirthday(Date birthday){
this.birthday = birthday;
}
public int getId(){
return this.id;
}
public String getName(){
return this.name;
}
public String getPassword(){
return this.password;
}
public int getAge(){
return this.age;
}
public String getSex(){
return this.sex;
}
public Date getBirthday(){
return this.birthday;
}
}
【IUserDAO.java的内容如下:】
package com.skewrain.demo1.dao;
import java.util.*;
import com.skewrain.demo1.vo.*;
public interface IUserDAO{
public boolean doCreate(User user)throws Exception;
public List<User> findAll(String keyWord) throws Exception;
public User findById(int id) throws Exception;
}
有了接口之后,下面要定义的肯定是具体的实现类。
【UserDAOImpl.java的内容如下:】
package com.skewrain.demo1.impl;
import java.util.*;
import java.sql.*;
import com.skewrain.demo1.dao.*;
import com.skewrain.demo1.vo.*;
public class UserDAOImpl implements IUserDAO {
private Connection conn = null;
private PreparedStatement pstmt = null;
public UserDAOImpl(Connection conn){
this.conn = conn;
}
public boolean doCreate(User user) throws Exception{
boolean flag = false;
String sql = "INSERT INTO
user(id,name,password,age,sex,birthday) VALUES(?,?,?,?,?,?)";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setInt(1,user.getId());
this.pstmt.setString(2,user.getName());
this.pstmt.setString(3,user.getPassword());
this.pstmt.setInt(4,user.getAge());
this.pstmt.setString(5,user.getSex());
this.pstmt.setDate(6,new java.sql.Date(user.getBirthday().getTime()));
if(this.pstmt.executeUpdate() > 0){
flag = true;
}
this.pstmt.close();
return flag;
}
public List<User> findAll(String keyWord) throws Exception{
List<User> all = new ArrayList<User>();
String sql = "SELECT id,name,password,age,sex,birthday
FROM user WHERE id LIKE ? OR name LIKE ?";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setString(1,"%"+keyWord+"%");
this.pstmt.setString(2,"%"+keyWord+"%");
ResultSet rs = this.pstmt.executeQuery();
User user = null;
while(rs.next()){
user = new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPassword(rs.getString(3));
user.setAge(rs.getInt(4));
user.setSex(rs.getString(5));
user.setBirthday(rs.getDate(6));
all.add(user);
}
this.pstmt.close();
return all;
}
public User findById(int id) throws Exception{
User user = null;
String sql = "SELECT id,name,password,age,sex,birthday
FROM user WHERE id LIKE ?";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setInt(1,id);
ResultSet rs = this.pstmt.executeQuery();
if(rs.next()){
user = new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPassword(rs.getString(3));
user.setAge(rs.getInt(4));
user.setSex(rs.getString(5));
user.setBirthday(rs.getDate(6));
}
this.pstmt.close();
return user;
}
}
【UserDAOProxy.java的内容如下:】
package com.skewrain.demo1.proxy;
import java.util.*;
import java.sql.*;
import com.skewrain.demo1.dbc.*;
import com.skewrain.demo1.impl.*;
import com.skewrain.demo1.vo.*;
import com.skewrain.demo1.dao.*;
public class UserDAOProxy implements IUserDAO {
private DatabaseConnection dbc = null;
private IUserDAO dao = null;
public UserDAOProxy() throws Exception {
this.dbc = new DatabaseConnection();
this.dao = new UserDAOImpl(this.dbc.getConnection());
}
public boolean doCreate(User user) throws Exception{
boolean flag = false;
try{
if(this.dao.findById(user.getId())== null){
flag = this.dao.doCreate(user);
}
}catch(Exception e){
throw e;
}finally{
this.dbc.close();
}
return flag;
}
public List<User> findAll(String keyWord) throws Exception{
List<User> all = null;
try{
all = this.dao.findAll(keyWord);
}catch(Exception e){
throw e;
}finally{
this.dbc.close();
}
return all;
}
public User findById(int id) throws Exception{
User user = null;
try{
user = this.dao.findById(id);
}catch(Exception e){
throw e;
}finally{
this.dbc.close();
}
return user;
}
}
【DAOFactory.java的内容如下所示:】
package com.skewrain.demo1.factory;
import com.skewrain.demo1.dao.IUserDAO;
import com.skewrain.demo1.proxy.UserDAOProxy;
public class DAOFactory {
public static IUserDAO getIUserDAOInstance() throws Exception{
return new UserDAOProxy();
}
}
下面是两个测试程序:
【TestDAOInsert.java的内容如下:】
package com.skewrain.demo1.test;
import com.skewrain.demo1.factory.DAOFactory;
import com.skewrain.demo1.vo.*;
public class TestDAOInsert {
public static void main(String args[])throws Exception{
User user = null;
for(int x=0;x<5;x++){
user = new User();
user.setId(1000 + x);
user.setName("斜雨-" + x);
user.setPassword("123-" + x);
user.setAge(18 + x);
user.setSex("男");
user.setBirthday(new java.util.Date());
DAOFactory.getIUserDAOInstance().doCreate(user);
}
}
}
执行此程序后,可以向数据库表中增加记录。
原始的数据库表中的数据如下:
执行TestDAOInsert.java的结果如下:
【TestDAOSelect.java的内容如下:】
package com.skewrain.demo1.test;
import java.util.*;
import com.skewrain.demo1.factory.DAOFactory;
import com.skewrain.demo1.vo.*;
public class TestDAOSelect {
public static void main(String args[])throws Exception{
List<User> all = DAOFactory.getIUserDAOInstance().findAll("");
Iterator<User> iter = all.iterator();
while(iter.hasNext()){
User user = iter.next();
System.out.println(user.getId() + "、" + user.getName() + "-->" + user.getPassword());
}
}
}
执行此程序,可以将数据库表中的内容在终端输出。
当DAO开发完成之后,下面就可以利用JSP完成DAO的程序的调用。
一个JSP页面绝对不允许导入SQL包,如果有可能,最好一个包都不导入。
【user_insert.jsp的内容如下:】
<%@page contentType = "text/html" pageEncoding="GBK"%>
<html>
<head><title>www.baidu.com</title></head>
<body>
<form action="user_insert_do.jsp" method="post">
用户编号:<input type="text" name="id"><br>
用户姓名:<input type="text" name="name"><br>
用户密码:<input type="text" name="password"><br>
用户年龄:<input type="text" name="age"><br>
用户性别:<input type="text" name="sex"><br>
用户生日:<input type="text" name="birthday"><br>
<input type="submit" value="注册">
<input type="reset" value="重置">
</body>
</html>
【user_insert_do.jsp的内容如下:】
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="com.skewrain.demo1.factory.*,com.skewrain.demo1.vo.*"%>
<%@ page import="java.text.*"%>
<html>
<head><title>www.baidu.com</title></head>
<% request.setCharacterEncoding("GBK"); %>
<body>
<%
User user = new User();
user.setId(Integer.parseInt(request.getParameter("id")));
user.setName(request.getParameter("name"));
user.setPassword(request.getParameter("password"));
user.setAge(Integer.parseInt(request.getParameter("age")));
user.setSex(request.getParameter("sex"));
user.setBirthday(new SimpleDateFormat("YYYY-MM-DD").parse(request.getParameter("birthday")));
try{
if(DAOFactory.getIUserDAOInstance().doCreate(user)){
%>
<h3>雇员信息添加成功!</h3>
<%
}else{
%>
<h3>雇员信息添加失败!</h3>
<%
}
%>
<%
}catch(Exception e){
e.printStackTrace();
}
%>
</body>
</html>
执行user_insert.jsp的结果如下:
点击“注册”后,在浏览器和数据库表中分别发现如下记录:
数据库表中增加的记录如下:
【user_list.jsp的内容如下:】
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="com.skewrain.demo1.factory.*,com.skewrain.demo1.vo.*"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.baidu.com</title></head>
<% request.setCharacterEncoding("GBK"); %>
<body>
<%
String keyWord = request.getParameter("kw");
if(keyWord == null){
keyWord = ""; //如果没有查询关键字,则查询全部。
}
List<User> all = DAOFactory.getIUserDAOInstance().findAll(keyWord);
Iterator<User> iter = all.iterator();
%>
<center>
<form action="user_list.jsp" method="post">
请输入查询关键字:<input type="text" name="kw">
<input type="submit" value="查询">
</form>
<table border="1" width="80%">
<tr>
<td>用户编号</td>
<td>用户姓名</td>
<td>用户密码</td>
<td>用户年龄</td>
<td>用户性别</td>
<td>用户生日</td>
</tr>
<%
while(iter.hasNext()){
User user = iter.next();
%>
<tr>
<td><%=user.getId()%></td>
<td><%=user.getName()%></td>
<td><%=user.getPassword()%></td>
<td><%=user.getAge()%></td>
<td><%=user.getSex()%></td>
<td><%=user.getBirthday()%></td>
</tr>
<%
}
%>
</table>
</center>
</body>
</html>
执行此段代码的结果如下:
当在查询栏中输入“斜雨”,点击“查询”之后的结果如下:
可以发现,使用JSP+DAO的开发后,程序变得更加的清晰,而且以后所有的数据层操作也可以任意的移植,不一定非要在JSP上使用了。
使用JSP+JavaBean的开发模式也称为Model1,通过JSP显示,通过JSP完成功能,达到显示和数据操作的相分离。
小结:
1.DAO属于数据层操作;
2.DAO的各个组成部分;
3.使用JSP+DAO可以将数据操作交给JavaBean完成。
相关文章推荐
- 1013 这个题中用到stack<int> st 需要学习
- 三天的努力,只弄懂了一个多位数相加
- 做事情要放下面子,拿起责任
- 反射技术
- Linear Decoders
- struts2标签
- codeforces 394B Very Beautiful Number
- WINCE5.0/6.0开发环境配置与SDK下载
- php ajax学习
- SDP协议分析
- cvDFT
- GDT/IDT
- CAP理论
- 关于六度分割理论的一点认识
- 用Matlab来将分层制造过程中G代码所表示的单层的加工路径显示出来
- 手把手教程: CentOS 6.5 LVS + KeepAlived 搭建 负载均衡 高可用 集群
- 如何在apache官网下载将将jar包
- 解决protobuf数据丢失bug
- 实现zip压缩解压
- Digital Image Processing 学习笔记3