DAO总结

 

实体类

package com.xtu.entity;

import java.util.Date;

public class Student {
	
	private int id;
	private String name;
	private Date birthday;
	
	
	public Student() {
		super();
	}


	public Student(String name, Date birthday) {
		this.name = name;
		this.birthday = birthday;
	}
	
	
	public Student(int id, String name, Date birthday) {
		this.id = id;
		this.name = name;
		this.birthday = birthday;
	}


	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((birthday == null) ? 0 : birthday.hashCode());
		result = prime * result + id;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}


	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (birthday == null) {
			if (other.birthday != null)
				return false;
		} else if (!birthday.equals(other.birthday))
			return false;
		if (id != other.id)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}


	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", birthday="
				+ birthday + "]";
	}
	
	
	
	
}

 

常量类

package com.xtu.manager;

public class ConstantManager {
	
	public final static String DRIVERCLASS = "oracle.jdbc.driver.OracleDriver";
	public final static String URL = "jdbc:oracle:thin:@172.17.141.131:1521:myoracle";
	public final static String USER = "scott";
	public final static String PASSWORD = "tiger";
}

 

数据库管理类

 

package com.xtu.manager;

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;
import java.util.List;

import com.xtu.mapping.interfaces.ResultSetMapping;

public class DatabaseManager {
	
	Connection connection = null;
	Statement statement = null;
	PreparedStatement pres = null;
	ResultSet rs = null;
	
	/**
	 * 连接数据库
	 */
	
	public void connectionOracle() {
		try {
			Class.forName(ConstantManager.DRIVERCLASS);
			connection = DriverManager.getConnection(ConstantManager.URL,ConstantManager.USER,ConstantManager.PASSWORD);
			statement = connection.createStatement();
		} catch (ClassNotFoundException e) {
			System.out.println("加载驱动类失败!!");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("数据库连接失败!!");
			e.printStackTrace();
		}
	}
	
	/**
	 * 执行查询,直接返回包装对象构成的集合
	 */
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public List query(String sql,ResultSetMapping mapping,Object[] args) {
		
		System.out.println(sql);
		
		List list = new ArrayList();
		
		this.connectionOracle();
		
		try {
			pres = connection.prepareStatement(sql);
			for(int i=0;i<args.length;i++) {
				pres.setObject(i + 1,args[i]);
			}
			
//			pres.execute();
//			rs = pres.getResultSet();
			//这一行代码与上面两行等价
			rs = pres.executeQuery();
			while(rs.next()) {
				list.add(mapping.mapping(rs));
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			closeSource();
		}
		
		return list;
	}
	
	/**
	 * update实现
	 */
	
	public int update(String sql,Object[] args) {

		System.out.println(sql);
		//连接数据库
		connectionOracle();
		try {
			pres = connection.prepareStatement(sql);
			for(int i=0;i<args.length;i++) {
				pres.setObject(i + 1,args[i]);
			}
			
			//用这个方法,返回影响的行数
			int result = pres.executeUpdate();
			
//			pres = connection.prepareStatement("commit");
//			pres.execute();
			return result;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			closeSource();
		}
		return 0;
	}
	/**
	 * 关闭打开的资源
	 */
	
	public void closeSource() {
		
		try {
			if(rs != null) {
				rs.close();
				rs = null;
			}
			
			if(statement != null) {
				statement.close();
				statement = null;
			}
			
			if(connection != null) {
				connection.close();
				connection = null;
			}
			
		} catch(SQLException e) {
			
		}
	}
}


实体类对应的DAO类

package com.xtu.dao;

import java.sql.ResultSet;
import java.util.List;

import com.xtu.entity.Student;
import com.xtu.manager.DatabaseManager;
import com.xtu.mapping.implement.StudentMapping;

public class StudentDAO {
	
	private String sql = "";
	private DatabaseManager dbm = new DatabaseManager();
	ResultSet rs = null;
	StudentMapping studentMapping = new StudentMapping();
	/**
	 *查出表中所以的学生信息 
	 */
	@SuppressWarnings("unchecked")
	public List<Student> selectAll() {
		
		sql = "select id,name,birthday from student";
    	List<Student> list = dbm.query(sql,studentMapping,new Object[]{});
		return list;
	}
	
	/**
	 * 从表中找出指定id的学生信息
	 */
	@SuppressWarnings("unchecked")
	public Student seleteByID(int id) {
		
		sql = "select id,name,birthday from student where id = ?";
		List<Student> list = dbm.query(sql,studentMapping,new Object[]{id});
		//注意下面主要是考虑到程序的健壮性,不能用list != null 判断 因为list总是不是空 只是有可能没有任何元素
		if(list.size() != 0) {
			return list.get(0);
		} else {
			return null;
		}
		
	}
	
	/**
	 * 根据给的学生信息,将其学生信息插入表中
	 */
	public boolean insert(Student student) {
		
		sql = "insert into student(id,name,birthday) values(?,?,?)";
		
		//Oracle只认识java.sql.Date这个日期,所以要进行一个转换!
		Object[] args = {student.getId(),student.getName(),new java.sql.Date(student.getBirthday().getTime())};
//		System.out.println(dbm.update(sql,args));
		return dbm.update(sql,args) == 1;
	}
	
	/**
	 * 根据给的id,删除表中学生信息
	 */
	public boolean deleteByID(int id) {
		
		sql = "delete from student where id = ?";
		Object[] args = {id};
		//System.out.println(dbm.update(sql,args));
		return dbm.update(sql,args) == 1;
	}
	
	/**
	 * 删除表中所以的学生信息
	 */
	
	public boolean deleteAll() {
		
		//注意这里要重修生成一个变量。
		//因为如果还是sql = "delete from student"的话 那么在selectAll()时就把sql的内容改变了
		String deleteAllSQL = "delete from student";
		if(this.selectAll().size() == 0) {
			System.out.println("表中没有任何记录!!");
			return false;
		} else {
			System.out.println("删除的记录条数是:" + dbm.update(deleteAllSQL,new Object[]{}));
		}
		
		//再次查询整张表,如果记录条数为零了 说明删除成功了
		return this.selectAll().size() == 0;
	}
}


用于包装实体类的接口

package com.xtu.mapping.interfaces;

import java.sql.ResultSet;
import java.sql.SQLException;

public interface ResultSetMapping {
	
	public Object mapping(ResultSet rs) throws SQLException;
}


 

用于实现包装student对象的类

package com.xtu.mapping.implement;

import java.sql.ResultSet;
import java.sql.SQLException;

import com.xtu.entity.Student;
import com.xtu.mapping.interfaces.ResultSetMapping;

public class StudentMapping implements ResultSetMapping{

	@Override
	public Student mapping(ResultSet rs) throws SQLException {
		
		int i = 1;
		Student student = new Student(rs.getInt(i++),rs.getString(i++),rs.getDate(i++));
		return student;
	}

}


测试类

 

import java.util.Date;
import java.util.List;

import com.xtu.dao.StudentDAO;
import com.xtu.entity.Student;

public class TestStudentDAO {

	private StudentDAO studentDAO = new StudentDAO();
	public static void main(String[] args) {
		TestStudentDAO test = new TestStudentDAO();
		test.testSelectAll();
		System.out.println("==========================");
		test.testDeleteByID();
		test.testInsert();
		test.testDeleteByID();
		test.testInsert();
		test.testSelectAll();
		test.testSelectByID();
		System.out.println("==========================");
		test.testDeleteAll();
	}
	
	/**
	 * 测试插入
	 */
	public void testInsert() {
		Student student = new Student(6,"科比",new Date());
		System.out.println(studentDAO.insert(student));
	}
	
	/**
	 * 测试通过指定id,删除表中记录
	 */
	
	public void testDeleteByID() {
		System.out.println(studentDAO.deleteByID(6));
	}
	
	
	
	/**
	 * 测试删除表中所有的元素
	 */
	
	public void testDeleteAll() {
		System.out.println(studentDAO.deleteAll());
	}
	
	/**
	 * 测试通过指定的id,查询记录
	 */
	
	public void testSelectByID() {
		Student student = studentDAO.seleteByID(2);
		System.out.println(student);
	}
	/**
	 * 测试查询表中所有的元素
	 */
	
	public void testSelectAll() {
		List<Student> list = studentDAO.selectAll();
		for(Object o : list) {
			System.out.println(o);
		}
	}
}


 

只写了一个类的DAO,求指导!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值