Java Web中访问数据库需要的DAO和VO

1、何为VO和DAO

VO就是一个普通的JavaBean,而对于JavaBean的一个重要的应用就是将数据库查询的代码,从jsp中移植到JavaBean中。使jsp作为真正的表示层,通过在jsp中调用这个特定的类提供的方法,去对数据库进行操作

DAO叫做Data Access Object类,专门负责对数据库的访问,显然,可以将数据库查询的代码写在DAO 中,通常情况下,可以使用VO(value object)来配合DAO来使用,在DAO中,可以每查询到一条记录,就将其封装为VO中的对象,最后将所有实例化的对象放回到一个集合内进行返回,这样就可以实现层次的分开,降低耦合度,在使用DAO时,必须要导入相应的包才能够实现,接着就可以使用DAO类进行实例对数据库的访问

  2、实现:

下面我们实现使用VO和DAO对数据的访问,首先我们确定工作原理,需要将数据库的操作都封装在DAO内,把从数据库查询到的信息实例化为VO,放到ArrayList数组里返回,DAO类的代码如下(此代码用于对Oracle数据库的访问,并且表newmessage结构已构建,实现的功能是基本的新闻发布系统)建立一个类,将其命名为NewsRealese,下图为部分文件的布局,如下:

Java Web中访问数据库需要的DAO和VO_第1张图片

图 建立VO与DAO的部分类

package dao;

import com.lut.beans.NewsRealese;
import static java.lang.System.out;
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;

public class NewsRealeseDao {

    public ArrayList queryAllNews() throws Exception {
        Connection conn = null;
        ArrayList newsRealese = new ArrayList();
        try {
            //获取连接  
            Class.forName("oracle.jdbc.driver.OracleDriver");
            String url = "jdbc:oracle:thin:@localhost:1521:orcl";
            conn = DriverManager.getConnection(url, "scott", "wjk139");
            //运行SQL语句 
            String sql = "select * from newmessage";//获取
            Statement stat = conn.createStatement();
            ResultSet rs = stat.executeQuery(sql);
            while (rs.next()) {   //实例化VO
                NewsRealese news = new NewsRealese();
                news.setNewsId(rs.getString("newsid"));
                news.setClassId(rs.getString("CLASSID"));
                news.setKindId(rs.getString("KINDID"));
                news.setMyOther(rs.getString("MYOTHER"));
                news.setHeadTitle(rs.getString("HEADTITLE"));
                news.setContent(rs.getString("CONTENT"));
                news.setConnectRealtive(rs.getString("CONNECTREALTIVE"));
                news.setAuthor(rs.getString("AUTHOR"));
                news.setEditor(rs.getString("EDITOR"));
                news.setNewsFrom(rs.getString("NEWSFROM"));
                news.setTop(rs.getString("TOP"));
                news.setNewsTime(rs.getString("NEWSTIME"));
                news.setHits(rs.getString("HITS"));
                news.setState(rs.getString("STATE"));
                news.setTag(rs.getString("TAG"));
                newsRealese.add(news);
            }
            rs.close();
            stat.close();
        } catch (Exception e1) {
            e1.printStackTrace();
        } finally {
            try {//关闭连接
                if (conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (Exception ex) {
            }
            return newsRealese;
        }
    }}
下面就是实现VO的代码示例,其中各项都是数据库里边的表项内容,集定义了一个基本的新闻属性要素:,使用封装函数进行封装即可,在这里我们建立一个JavaBean类命名为NewsRealese,并且将其部署到web.xml中

package com.lut.beans;
public class NewsRealese {
private String newsId;
private String classId;
private String kindId;
private String myOther;
private String headTitle;
private String content;
private String connectRealtive;
private String author;
private String editor;
private String newsFrom;
private String top;
private String newsTime;
private String hits;
private String state;
private String tag;
    public String getNewsId() {
        return newsId;
    }
    public void setNewsId(String newsId) {
        this.newsId = newsId;
    }
    public String getClassId() {
        return classId;
    }
    public void setClassId(String classId) {
        this.classId = classId;
    }
    public String getKindId() {
        return kindId;
    }
    public void setKindId(String kindId) {
        this.kindId = kindId;
    }
    public String getMyOther() {
        return myOther;
    }
    public void setMyOther(String myOther) {
        this.myOther = myOther;
    }
    public String getHeadTitle() {
        return headTitle;
    }
    public void setHeadTitle(String headTitle) {
        this.headTitle = headTitle;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getConnectRealtive() {
        return connectRealtive;
    }
    public void setConnectRealtive(String connectRealtive) {
        this.connectRealtive = connectRealtive;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public String getEditor() {
        return editor;
    }
    public void setEditor(String editor) {
        this.editor = editor;
    }
    public String getNewsFrom() {
        return newsFrom;
    }
    public void setNewsFrom(String newsFrom) {
        this.newsFrom = newsFrom;
    }
    public String getTop() {
        return top;
    }
    public void setTop(String top) {
        this.top = top;
    }
    public String getNewsTime() {
        return newsTime;
    }
    public void setNewsTime(String newsTime) {
        this.newsTime = newsTime;
    }
    public String getHits() {
        return hits;
    }
    public void setHits(String hits) {
        this.hits = hits;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    public String getTag() {
        return tag;
    }
    public void setTag(String tag) {
        this.tag = tag;
    } 
}

现在,我们进行建立一个新的jsp页面,将其命名index.jsp为进行对数据库访问,其代码如下所示,当然在使用的过程中需要导入必要的包文件,对于具体的布局就不细讲了:
<%@page contentType="text/html" import="java.util.*,java.sql.*,com.lut.beans.NewsRealese,dao.NewsRealeseDao" 
        pageEncoding="UTF-8" language="java"%>


    
        
        新闻发布系统--最前沿的时尚信息、最有看点的社会聚焦、最富得浪漫的殿堂
          
    

    

        管理员登录

最新资讯


  <% NewsRealeseDao newsRealeseDao = new NewsRealeseDao(); ArrayList newsRealese = newsRealeseDao.queryAllNews(); %> <% for (int i = 0; i < newsRealese.size(); i++) { NewsRealese newRealese = (NewsRealese) newsRealese.get(i); %>

此处假设无图片

此处假设无等级信息

原创或转载: <%=newRealese.getMyOther()%> 新闻标题: <%=newRealese.getHeadTitle()%>
新闻内容:
<%=newRealese.getContent()%>
作者: <%=newRealese.getAuthor()%> 新闻发布时间: <%=newRealese.getNewsTime()%> 新闻点击次数: <%=newRealese.getHits()%>

<% } %>
 
     

 下面就是其实现的效果: 
  

Java Web中访问数据库需要的DAO和VO_第2张图片
图1 对数据库访问的实现效果

不过,用了DAO和VO,似乎也没有从jsp页面中完全消除Java代码,但是与之前直接写JDBC代码来讲,还是好多了,另外在jsp页面没有出现任何与jdbc相关的代码,并且由于编程人员不需要知道数据库的细节和构架,便于分工开发

以上就是使用DAO和VO实现对数据库的访问。

你可能感兴趣的:(Java,EE,Java,EE企业应用开发)