`

基于java web的博客平台(六)

 
阅读更多

      Dao类的设计。

      在前面的介绍中,我们在各种action中,好几次提到各种dao类,我们的dao类主要负责数据库的增删查改,我们看看这些dao类是怎么实现的把。

  我们先看ArticleDao

package com.MyBlog.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.List;

import com.MyBlog.common.DB;
import com.MyBlog.entity.ArticleBean;

public class ArticleDao {

	DB connection =new DB();
	ArticleBean articleBean;

	/*
	 * @功能 查询指定类别的文章
	 * @参数 typeID表示文章类别ID值,type为all时显示所有的记录,为sub时只显示前面的5条记录
	 * @返回值 List集合
	 */
	public List queryArticle(int typeID, String type) {
		System.out.println("typeID:"+typeID);
		System.out.println("type:"+type);
		List articleList = new ArrayList();
		String sql = "";
		// 如果typeID <= 0,不按照类别查询
		if(typeID <= 0 ){
			if (type == null || type.equals("") || !type.equals("all")) {
				// 不按照类别查询,根据发表时间,查询出前面的3条记录
				sql = "select * from tb_article order by article_sdTime DESC limit 3";
			}
			else{
				// 不按照类别查询,查询出所有记录
				sql = "select * from tb_article order by article_sdTime DESC";
			}
		}else{
			//typeID >0,按照类别进行查询
			if (!type.equals("all")) {
//				System.out.println("显示该类的前面3条记录");
				// 按照类别查询,显示该类的前面3条记录
				sql = "select * from tb_article where article_typeID=" + typeID
						+ " order by article_sdTime DESC limit 3";
			} else {
				// 显示该类别所对应的ID 下的所有记录
				sql = "select * from tb_article where article_typeID=" + typeID
						+ " order by article_sdTime DESC";
			}
		}
		System.out.println(sql);
		ResultSet rs = connection.executeQuery(sql);
		
		if (rs != null) {
			try {
				while (rs.next()) {
					// 获取文章信息
					articleBean = new ArticleBean();
					articleBean.setId(rs.getInt(1));
					articleBean.setArticleTypeID(rs.getInt(2));
					articleBean.setArticleTitle(rs.getString(3));
					articleBean.setArticleContent(rs.getString(4));
					articleBean.setArticleSdTime(rs.getString(5));
					articleBean.setArticleFrom(rs.getInt(6));
					articleBean.setArticleInfo(rs.getString(7));
					articleBean.setArticleCount(rs.getInt(8));
					articleBean.setMasterID(rs.getInt(9));
//					// 查询tb_review数据表统计当前文章的评论数
//					sql = "select count(id) from tb_review where review_articleID=" + articleBean.getId();
//					ResultSet rsr = connection.executeQuery(sql);
//					if (rsr != null) {
//						rsr.next();
//						articleBean.setReview(rsr.getInt(1));
//						rsr.close();
//					}
					articleList.add(articleBean);
				}
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				connection.closed();
			}
		}
		return articleList;
	}
	/*
	 * @功能   实现对文章进行增删改的操作
	 * @参数   oper为一个String类型变量,用来表示要进行的操作,articleBean为ArticleBean类对象
	 * 用来存储某个文章信息
	 * @返回值   Boolean值
	 */
	public boolean operationArticle(String oper, ArticleBean articleBean) {
		//生成sql语句
		String sql=null;
		//发表文章
		if(oper.equals("add")){
			sql="insert into tb_article(article_typeID,article_title,article_content,"
					+"article_sdTime,article_from,article_info,article_count,article_masterID) values("
					+ articleBean.getArticleTypeID()+",'"+articleBean.getArticleTitle()+"','"
							+ articleBean.getArticleContent()+"','"+articleBean.getArticleSdTime()+"',"
									+ articleBean.getArticleFrom()+",'"+articleBean.getArticleInfo()+"',"
											+ articleBean.getArticleCount()+","+articleBean.getMasterID()+")";
		System.out.println("add article:"+sql);
		}
		//修改文章
		if(oper.equals("modify")){
			sql="update tb_article set article_typeID="+articleBean.getArticleTypeID()
			+",article_title='"+articleBean.getArticleTitle()
			+"',article_content='"+articleBean.getArticleContent()
			+"',article_from='"+articleBean.getArticleFrom()
			+"',article_info='"+articleBean.getArticleInfo()
			+"' where id="+articleBean.getId();
		}
		//删除文章
		if(oper.equals("delete")){
			sql="delete from tb_article where id="+articleBean.getId();
		}
		//累加阅读次数
		if(oper.equals("readTimes")){
			int article_count=articleBean.getArticleCount()+1;
			sql="update tb_article set article_count="+article_count+" where id="+articleBean.getId();
		}
		//执行sql语句
		boolean flag=connection.executeUpdate(sql);
		return flag;
	}
	/*
	 * @功能   查询指定文章的详细内容
	 * @参数   id为文章ID值
	 * @返回值   ArticleBean类对象,封装了文章信息
	 */
	public ArticleBean queryArticleByID(int id) {
		String sql="select * from tb_article where id="+id;
		ResultSet rs=connection.executeQuery(sql);
		try {
			while(rs.next()){
				articleBean=new ArticleBean();
				articleBean.setId(rs.getInt(1));
				articleBean.setArticleTypeID(rs.getInt(2));
				articleBean.setArticleTitle(rs.getString(3));
				articleBean.setArticleContent(rs.getString(4));
				articleBean.setArticleSdTime(rs.getString(5));
				articleBean.setArticleFrom(rs.getInt(6));
				articleBean.setArticleInfo(rs.getString(7));
				articleBean.setArticleCount(rs.getInt(8));
				articleBean.setMasterID(rs.getInt(9));
//				//查询tb_review数据表统计当前文章的评论数
//				sql="select count(id) from tb_review where review_articleID="+articleBean.getId();
//				ResultSet rsr=connection.executeQuery(sql);
//				if(rsr!=null){
//					rsr.next();
//					articleBean.setReview(rsr.getInt(1));
//					rsr.close();
//				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return articleBean;
		
	}
		
	

}

       这个ArticleDao有两个成员,一个是DB,一个是articleBeanarticleBean就不用说了,是一个文章的类,和数据库的文章表相对应。DB是也给连接数据库的类。

 

我们来看DB类:

package com.MyBlog.common;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/*
 * 定义DB类,用于数据库的链接
 */
public class DB {
	private final String url="jdbc:mysql://localhost:3306/MyBlogDB";
	private final String userName="root";
	private final String password="";
	private Connection con=null;
	private Statement stm=null;
	/*通过构造方法加载数据库驱动*/
	public DB(){
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			System.out.println("加载数据库驱动驱动失败!!!");
			e.printStackTrace();
		}
	}
	/*创建数据库连接*/
	public void createCon(){
		try {
			con=DriverManager.getConnection(url,userName,password);
		} catch (SQLException e) {
			System.out.println("创建数据库连接失败!!");
			e.printStackTrace();
		}
	}
	/*获取数据库连接*/
	public Connection getCon(){
		try {
			con=DriverManager.getConnection(url,userName,password);
		} catch (SQLException e) {
			System.out.println("获取数据库连接失败!!!");
			e.printStackTrace();
		}
		return con;
	}
	/*获取Statement对象*/
	public void getStm(){
		createCon();
		try {
			stm=con.createStatement();
		} catch (SQLException e) {
			System.out.println("创建Statement对象失败!!!");
			e.printStackTrace();
		}
		
	}
	/*
	 * 对数据库进行增加、修改、删除操作
	 * 参数SQL为要执行的sql语句
	 * 返回boolean的值
	 */
	public boolean executeUpdate(String sql){
		System.out.println("数据库中正在执行的SQL语句:"+sql);
		boolean mark=false;
		try {
			getStm();
			int iCount=stm.executeUpdate(sql);
			if(iCount>0){
				mark=true;
			}else{
				mark=false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
			mark=false;
		}
		return mark;
	}
	
	/*
	 *查询数据库
	 */
	public ResultSet executeQuery(String sql){
		ResultSet rs=null;
		
		try {
			getStm();
			rs=stm.executeQuery(sql);
		} catch (SQLException e) {
			System.out.println("查询数据库数据失败!!!");
			e.printStackTrace();
		}
		return rs;
	}
	/*
	 *关闭数据库的操作
	 */
	public void closed(){
		if(stm!=null){
			try {
				stm.close();
			} catch (SQLException e) {
				System.out.println("关闭stm对象失败!!!");
				e.printStackTrace();
			}
		}
		if(con!=null){
			try {
				con.close();
			} catch (SQLException e) {
				System.out.println("关闭con对象失败");
				e.printStackTrace();
			}
		}
	}
}

       我们这个DB类的成员有数据库的url,数据库的用户名,数据库的秘密,还有Connection对象和Statement对象。首先,这个DB通过构造函数加载数据库驱动。createCon函数用于进行数据库连接,我们的数据库连接通过DriverManager完成,并返回一个Connection对象,并赋值给DBConnection对象成员:con.

con=DriverManager.getConnection(url,userName,password);

或者getCon直接返回一个Connection对象,同时也复制给DBConnection成员,它和createCon的区别是它会返回这个Connection对象。getStm是获取Statement对象的方法,这个对象的获得是先进行数据库的连接,然后由concreateStatement方法获得。

这几个函数就是对数据库的增删查改用的:

1DB的成员函数excuteUpdate,执行数据库语句,没有返回值的,我们执行数据库语句是由Statement对象来执行的,Statement对象的excuteUpdate方法就是对数据库进行操作,比如增加,删除,修改等等,若是excuteUpdate函数返回-1,则是操作失败,我们返回false,若是操作成功,我们返回true

2DB的成员函数excuteQuery,执行数据库的查询,我们的查询也是由Statement对象来查询的,通过执行Statement对象的excuteQuery函数查询,查询返回ResultSet类型的结果,然后我们这个DB的成员函数excuteQuery函数返回ResultSet类型的结果。

3)最后一个是断开数据库连接的函数,我们通过Statement对象执行close方法来关闭Statement对象,conclose方法端口数据库的连接。

在我们的dao类里面,是要调用DB的方法来和数据库操作的。

我们在dao类里面,范式执行什么操作,我们先要设定好sql语句,我们通过以下判断设置这些操作语句。

我们就拿ArticleDao类来说,比如说我们的查询文章,我们在ArticleDao类里面,queryArticle方法是查询文章的,我们有两个参数,一个是typeID,一个是type,如果typeID-1的话,不按类别查询,那就没有where的判断,然后type是空的话,那么只查询最近的几篇文章,这得加上limit来限制,或type是非空,则查询所有的记录,不加limit。若typeID>0,则按照类别查询,那么就必须用where判断这个类别是否符合要求,typeID就是指定的那个类别的id,然后type如果是空,那么只查询该类别最近的几条记录,用limit来限制,或type非空,查询该类别的所有记录,不用limit

通过以上的设定,我们总能得出我们想要的那一条sql语句,然后我们通过DB对象connectionexcuteQuery(sql)函数来查询,这个sql就是我们在前面通过各种条件判断设置的sql语句。然后这个函数返回的是ResultSet类型的数据。所以我们还要把这个类型的数据取出来,设置到articleBean里面,我们的rs里面的语句可能有很多条,所以我们用while(rs.next())的循环,不断一条一条地读出来。同时我们在这个while循环里面new一个ArticleBean对象,我们在rs里面读出每一条数据,都设置到ArticleBean对象,然后把这个对象添加的articleList容器里面(List articleList = new ArrayList();argicleList是个List容器),最后我们的articleList就存到了很多个ArticleBean对象,都是从rs里面都出来的,这个articleList就是我们这个函数要返回的结果。就这样我们的查询结果出来了。

然后这个ArticleDao类的queryArticle方法就在我们的ArticleAction里面调用,获得我们想要的结果。

除了查询,我们还有一个函数,就是执行sql增删改的函数,operationArticle,这个函数有两个参数,operarticleBean对象。Oper指定我们是增是删还是改,还有一个对于文章所独有的就是增加阅读次数。和查询那边一样,我们要执行相应的操作前,先设定好sql语句。

下面是操作的几个类型:

1)如果operadd,那么是增加,我们就执行insert into 语句,因为我们的数据库的article的表是和articlebean对象是对应的,我们就把这个articlebean内容都添加到这个article表中。

2)然后是opermodify,那么是修改,修改我们执行的是update语句,我们先通过where限定这个的id必须是和articleBeanid是一样的,然后我们再把这个表里面的数据改成和articleBean一样的数据。

3Operdelete的话,这个就比较简单了,我们用where来限定这个id就是articleBeanid,我们就删除这个表里面的这一条数据。

4)还有一个operreadTimes,这个和修改改是是差不多了,只不过我们是吧这个articleBean里面的文章阅读次数加1,然后通过update语句,只修改article_count即文章阅读次数的值。

就这样,我们的sql语句设定好之后,就由DB类的对象connectionexcuteUpdate(sql)函数来执行,执行的结果返回一个boolean值,这个值再由operationArticle返回,然后我们的ArticleAction就可以知道这个操作是否成功了。

5)除了以上的几个,我们还有个快速的查询方法,就是queryArticleById,这个直接通过一个id,查询出这个id的文章所有信息。我们的sql语句就直接设定成:"select * from tb_article where id="+id;然后同样有connection对象执行excuteQuery(sql)函数,结果是返回ResultSet类型。

然后我们在通过while(rs.next())循环把这个数据取出来,设置到articleBean里面,由于这里我们查询的结果只有一条数据,所以我们也就不用articleList了,这个循环也只是执行一次就退出了循环。然后我们的整个queryArticleById也只返回这个articleBean就可以了,最后我们的ArticleAcion会得到这个结果。

文章的dao类也就这些查询,至于其它的dao类的查询也是按照这一种方式,设定了可对相应的数据库的增删查改的函数,我们的相应的action类,可根据需要调用不同的函数,传递不同的参数,得到自己想要的结果。

分享到:
评论

相关推荐

    基于Java Web的博客系统

    这个描述简洁明了地指出了项目的核心内容——一个基于Java Web技术的博客平台。这种类型的系统通常具备用户注册、登录、发布文章、评论互动、分类管理等功能。开发者利用Java Web的特性,如请求处理、数据持久化、...

    基于java web的博客系统

    【基于Java Web的博客系统】是一个综合性的软件开发项目,主要使用Java技术栈构建一个运行在Web环境下的博客平台。这个系统通常包含多个模块,如用户管理、文章发布、评论互动、分类管理、搜索功能等,为用户提供了...

    基于java web芝麻开门博客网设计与实现.zip

    基于java web芝麻开门博客网设计与实现.zip基于java web芝麻开门博客网设计与实现.zip基于java web芝麻开门博客网设计与实现.zip基于java web芝麻开门博客网设计与实现.zip基于java web芝麻开门博客网设计与实现.zip...

    基于 java web编程爱好者博客地带设计与实现.zip

    基于 java web编程爱好者博客地带设计与实现.zip基于 java web编程爱好者博客地带设计与实现.zip基于 java web编程爱好者博客地带设计与实现.zip基于 java web编程爱好者博客地带设计与实现.zip基于 java web编程...

    web课程设计-基于Java web的博客系统(源码+数据库+报告).zip

    因此,基于Java Web技术开发和设计的博客系统,运用MVC开发模式,Eclipse + Myeclipse集成开发环境,数据库技术等设计了博客系统。 本次课程设计主要阐述了不同用户对博客的不同管理,对管理员来说,有博主管理、...

    基于Java Web的博客系统源码.zip

    【标题】"基于Java Web的博客系统源码.zip"是一个包含了一整套使用Java Web技术开发的博客系统源代码的压缩文件。这个博客系统适用于多种场景,如课程设计、大作业、毕业设计、项目练习以及学习演示,为学习者提供了...

    基于Java Web技术博客项目系统的设计 与开发JAVA语言

    基于Java Web技术博客项目系统的设计 与开发

    基于java的博客系统

    【标题】"基于Java的博客系统"是一款使用Java技术栈构建的在线博客平台,它集成了SQL Server 2005数据库、Tomcat应用服务器以及MyEclipse开发环境。这个系统设计精巧,功能全面,提供了后台管理、用户注册、相册管理...

    基于Java web的美食网站系统的设计与实现.rar

    【标题】"基于Java web的美食网站系统的设计与实现"是一个关于构建在线美食分享平台的项目,它利用Java Web技术栈来实现。这个系统旨在提供一个互动的平台,让用户能够浏览、分享、评论各种美食信息,同时可能还包含...

    (原创+源码+论文) 基于Java Web技术开发的BBS论坛系统

    标题中的"(原创+源码+论文) 基于Java Web技术开发的BBS论坛系统"揭示了这个压缩包文件的主要内容,它是一个基于Java Web技术实现的BBS(Bulletin Board System,电子公告板)论坛系统的完整源码和相关论文。...

    基于java的个人博客系统的设计与实现.zip

    本项目“基于Java的个人博客系统的设计与实现”旨在提供一个全面的、易于理解和学习的Java Web开发实例,为初学者提供宝贵的实践机会,同时也适合作为毕业设计的参考。 首先,我们需要理解Java技术栈的基础。Java是...

    基于Java web的个人博客系统文档.doc

    【基于Java Web的个人博客系统】是一个利用Java技术构建的在线平台,允许用户轻松创建、发布和管理他们的个人博客。这种系统充分利用了Web Log的概念,提供了简易的傻瓜化信息发布方式,让不具备专业编程知识的普通...

    个人博客 java web

    首先,Java Web是一种基于Java技术的Web应用开发框架,它提供了强大的服务器端编程能力,使得开发者能够构建功能丰富的动态网站。Java Web开发通常涉及Servlet、JSP(JavaServer Pages)、JSTL(JavaServer Pages ...

    基于Java的博客系统

    【基于Java的博客系统】是一种使用Java Web技术构建的在线平台,它允许用户发布、分享和阅读文章。这种系统的核心特点在于其稳定性和可扩展性,使得它能够处理大量并发访问,同时保持数据的安全和一致性。 Java Web...

    基于Java Web的博客网站.rar

    【标题】: "基于Java Web的博客网站" 是一个使用Java技术栈开发的Web应用程序,主要功能是构建一个在线博客平台。这个项目充分利用了Java Web技术的优势,为用户提供发布、阅读和评论博客的功能。 【描述】: 这个...

    java web 博客

    Java Web 博客系统是一种基于Java技术构建的网络应用程序,主要用于个人或团队发表文章、分享观点、提供互动交流的平台。在这个系统中,用户可以进行登录、注册、发布文章、评论、删除文章等一系列操作。下面我们将...

    基于Java Web的博客系统(含数据库文件)

    这是一个基于Java Web技术开发的博客系统项目,包含了完整的源代码以及相关的数据库文件。这个项目对于学习和理解Java Web开发有着重要的实践价值。下面将详细解释其中涉及的关键知识点。 1. **Java Web技术**:...

    基于Java Web的博客系统【源代码+PPT】

    本篇将深入探讨一个基于Java Web的博客系统,它展示了如何利用Java技术栈构建一个功能完备、用户体验良好的在线博客平台。 一、项目概述 该项目名为"基于Java Web的博客系统",提供了完整的源代码和PPT讲解材料,供...

    基于java的博客系统.zip

    【基于Java的博客系统】是一个使用SSH框架(Struts2、Spring、Hibernate)开发的完整博客平台。这个项目提供了一整套的博客管理功能,包括文章发布、分类管理、评论互动、用户注册与登录等。数据库文件的包含使得...

    基于Java Web的个人博客1

    基于Java Web的个人博客系统设计 本资源摘要信息将详细介绍基于Java Web的个人博客系统的设计和实现,涵盖了前端、后端、前后端通信和会话、网站设计、项目架构等方面的知识点。 一、前端(客户端、浏览器端) 1....

Global site tag (gtag.js) - Google Analytics