DAO设计模式

DAO设计模式

DAO设计模式包括5个部分:

(1)数据库连接类

package com.mipo.dao.dbutil;

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

/**
 * 数据库连接类,主要功能是连接数据库并获得连接对象,以及关闭数据库。
 * 通过创建数据库连接类,可以大大简化开发,当需要连接数据库时,只须创建该类的实例,调用其方法即可;而不必每次操作都要写相同的代码。
 * @author Administrator
 *
 */
public class DatabaseConnection {
	private static final String DB_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";//驱动
	private static final String DB_CONNECTION = "jdbc:sqlserver://localhost:1433;Database=student";//SQLServer的连接URL
	private static final String USER = "sa";//数据库用户名
	private static final String PWD = "sasa";//数据库密码
	
	//获得连接对象
	public static Connection getConnection(){
		Connection conn = null;
		try {
			//加载驱动
			Class.forName(DB_DRIVER);
			//创建连接对象
			conn = DriverManager.getConnection(DB_CONNECTION,USER,PWD);
			//检验连接是否成功
			System.out.println(conn);
		} catch (ClassNotFoundException e) {			
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	//关闭连接对象
	public static void closeConn(Connection conn) {
		if (null != conn) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	//关闭陈述对象
	public static void closePs(PreparedStatement ps) {
		if (null != ps) {
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}	
		
	//关闭结果集
	public static void closeRs(ResultSet rs) {
		if (null != rs) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}			
		
	
	//关闭连接对象,陈述对象,结果集
	public static void close(Connection conn,PreparedStatement ps, ResultSet rs) {
		try {
			if (null != conn) {
				conn.close();
			}
			if (null != ps) {
				ps.close();
			}
			if (null != rs) {
				rs.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	
	
	
	
}

(2)vo类

package com.mipo.dao.vo;
/**
 * vo类是数据库中表的映射实体类,一个vo类代表数据库中一张表,其属性和表中字段是一一对应的,
 * 并提供了setters和getters方法来设置和获取该类中的属性。
 * @author Administrator
 *
 */
public class Student {
	private String name;
	private int id;
	private int age;
	
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
}

(3)DAO接口

package com.mipo.dao.daointerface;

import java.util.Vector;
import com.mipo.dao.vo.Student;

/**
 * DAO接口定义了所有对数据库的操作,如增删改查等,
 * 因为是接口,只定义了抽象方法,需要子类实现。
 * @author Administrator
 *
 */
public interface StudentInterface {
	public int insert(Student stu);
	public int delete(int id);
	public int update(Student stu);
	public Vector<Vector<Object>> select(int id);
	public Vector<Vector<Object>> selectAll();
}
(4)DAO实现类

package com.mipo.dao.implementclass;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Vector;

/**
 * DAO实现类实现了DAO接口,并实现了接口中定义的所有方法
 */
import com.mipo.dao.daointerface.StudentInterface;
import com.mipo.dao.dbutil.DatabaseConnection;
import com.mipo.dao.vo.Student;

public class StudentDAO implements StudentInterface{

	@Override
	public int insert(Student stu) {//增加方法
		int i = 0;
		PreparedStatement ps=null;
		String sql ="insert into Student(name,id,age) values(?,?,?)";
		Connection conn=DatabaseConnection.getConnection();
		try {
			ps=conn.prepareStatement(sql);
			ps.setString(1, stu.getName());
			ps.setInt(1, stu.getId());
			ps.setInt(1, stu.getAge());
			i=ps.executeUpdate();
		} catch (SQLException e) {
			
			e.printStackTrace();
		}finally{
			DatabaseConnection.closePs(ps);
			DatabaseConnection.closeConn(conn);
		}
		return i;
		
	}

	@Override
	public int delete(int id) {//删除方法
		int i=0;
		Connection conn=DatabaseConnection.getConnection();
		PreparedStatement ps=null;
		String sql="delete from Student where id=?";
		try {
			ps=conn.prepareStatement(sql);
			ps.setInt(1,id);
			i=ps.executeUpdate();
		} catch (SQLException e) {
			
			e.printStackTrace();
		}finally{
			DatabaseConnection.closePs(ps);
			DatabaseConnection.closeConn(conn);
		}
		return i;
	}
		
	

	@Override
	public int update(Student stu) {//修改方法
		int i=0;
		Connection conn=DatabaseConnection.getConnection();
		PreparedStatement ps=null;
		String sql="update Student set name=?,id=?,age=? where id=?";
		try {
			ps=conn.prepareStatement(sql);
			ps.setString(1, stu.getName());
			ps.setInt(2, stu.getId());
			ps.setInt(3,stu.getAge());
			ps.setInt(4,stu.getId());

			i=ps.executeUpdate();	
		} catch (SQLException e) {
			
			e.printStackTrace();
		}finally{
			DatabaseConnection.closePs(ps);
			DatabaseConnection.closeConn(conn);
		}
		
		return i;
	}

	@Override
	public Vector<Vector<Object>> select(int id) {//查询方法
		Vector<Vector<Object>> vvc=new Vector<Vector<Object>>();
		Connection conn=DatabaseConnection.getConnection();
		PreparedStatement ps=null;
		ResultSet rs=null;
		String sql="select name,id,age from Student where id = ?";
		try {
			ps=conn.prepareStatement(sql);
			ps.setInt(1,id);			
			rs=ps.executeQuery();
			while(rs!=null&&rs.next()){
				Vector<Object> vc=new Vector<Object>();
				vc.add(rs.getString(1));
				vc.add(rs.getInt(2));
				vc.add(rs.getInt(3));

				vvc.add(vc); 
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DatabaseConnection.close(conn, ps, rs);
		}
		return vvc;
	}

	@Override
	public Vector<Vector<Object>> selectAll() {//查询所有
		Vector<Vector<Object>> vvc=new Vector<Vector<Object>>();
		Connection conn=DatabaseConnection.getConnection();
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			//查询所有数据
			String sql="select name, id, age from Student";
			ps = conn.prepareStatement(sql);
			rs=ps.executeQuery();
			while(rs!=null&&rs.next()){
				Vector<Object> vc=new Vector<Object>();
				vc.add(rs.getString(1));//添加gpID
				vc.add(rs.getInt(2));
				vc.add(rs.getInt(3));			
				
				vvc.add(vc);
			}
		} catch (SQLException e) {
			
			e.printStackTrace();
		}finally{
			DatabaseConnection.close(conn, ps, rs);
		}
		
		return vvc;
	}

}

(5)DAO工厂类

package com.mipo.dao.factoryclass;

import com.mipo.dao.implementclass.StudentDAO;

/**
 * DAO工厂类:  
 * 在没有DAO工厂类的情况下,必须通过创建DAO实现类的实例才能完成数据库操作。
 * 这样调用时,需要知道接口和各个具体的实现类,比较麻烦。
 * 
 * 使用DAO工厂类,可以比较方便地对代码进行管理,而且可以很好地解决后期修改的问题,通过该DAO工厂类的一个静态方法来获取DAO实现类实例。
 * 这时如果要替换DAO实现类,只需要修改该Dao工厂类中的方法代码,而不必邀修改所有的操作数据库代码。
 * 调用时,只需要知道接口和DAO工厂类即可,比价方便。
 * @author Administrator
 *
 */
public class StudentFactory {//通过DAO工厂类获取各个实现类
	
	//获取DAO实现类实例
	public static StudentDAO getStudentDAO () {
		return new StudentDAO();
	}
	//获取xx实现类实例
	/*
	public static xx getxx () {
		return new xx;
	}
	*/
}




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值