BaseDao与StudentDao

先编写Student实体类,因为用到了BeanUtils,所以得用setter和getter方法对成员属性进行封装,一般的实体类都是这样来写的。

package BeanUtils;

public class Student {
	
	private int id;
	private String name;
	private String sex;
	private int age;
	
	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 String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}
	
}

 

BaseDao

package com.ydwj.metaData;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.beanutils.BeanUtils;

import com.ydwj.utils.JDBCUtils;

/**
 * 通用的DAO层,主要负责数据库的增删改查 这个类定义两个方法 1.数据更新 2.数据查询
 * 
 * @author liujinfei
 *
 */
public class BaseDao {
	// 三个初始化参数
	private Connection conn;
	private PreparedStatement pStmt;
	private ResultSet rs;

	/**
	 * 主要针对增,删,改的通用方法
	 * @param sql         要执行的sql语句(insert,delete,update)
	 * @param paramsValue 参数数组,用来处理sql语句中的占位符参数,如果没有参数,请传入NULL
	 */
	public void update(String sql, Object[] paramsValue) {
		try {
			// 1. 数据库连接
			conn = JDBCUtils.getConnection();
			// 2. 获取PreparedStatement
			pStmt = conn.prepareStatement(sql);
			int count = pStmt.getParameterMetaData().getParameterCount(); // 获取sql语句中参数个数
			// 3. 利用参数元数据给SQL语句的占位符需要的参数赋值
			if (paramsValue != null && paramsValue.length > 0) {
				for (int i = 0; i < count; i++) {
					// 循环结束,就可以给SQL语句完整赋值
					pStmt.setObject(i + 1, paramsValue[i]);
				}
			}
			// 5. 执行
			pStmt.executeUpdate();

		} catch (SQLException e) {
			throw new RuntimeException(e);
		} finally {
			JDBCUtils.close(conn, pStmt);
		}
	}

	/**
	 * 查询的通用方法
	 * 
	 * @param sql         查询需要的SQL语句
	 * @param paramsValue 查询需要参数,如果没有参数,设置为null
	 * @param cls         List集合中保存的类型
	 * @return List集合,返回一个带有指定数据类型List集合
	 */
	public  List query(String sql, Object[] paramsValue, Class cls) {
		try {
			// 1. 要返回的数据集合
			List list = new ArrayList();

			// 2. 确定List集合中要保存的对象
			T t = null;

			// 3. 连接数据库
			conn = JDBCUtils.getConnection();
			pStmt = conn.prepareStatement(sql);

			// 4. 给SQL语句的占位符赋值参数
			if (paramsValue != null && paramsValue.length > 0) {
				for (int i = 0; i < pStmt.getParameterMetaData().getParameterCount(); i++) {
					pStmt.setObject(i + 1, paramsValue[i]);
				}
			}

			// 5. 执行,返回ResultSet
			rs = pStmt.executeQuery();

			// 6. 获取结果集元数据
			ResultSetMetaData rsmd = rs.getMetaData();
			// 数据库列的个数
			int columnCount = rsmd.getColumnCount();

			// 7. 遍历ResultSet数据集
			while (rs.next()) {
				// 创建要保存的对象
				t = cls.newInstance();

				// 8. 遍历数据行的每一列,得到每一列的名字,再获取到数据,保存到T对象中
				for (int i = 0; i < columnCount; i++) {
					// 获取每一列的名字
					String columnName = rsmd.getColumnName(i + 1);
					// 获取每一列的数据
					Object value = rs.getObject(columnName);

					// 利用BeanUtils给T对象赋值
					BeanUtils.setProperty(t, columnName, value);

				}

				// 把创建好的T对象,放入到List集合中
				list.add(t);
			}

			return list;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JDBCUtils.close(conn, pStmt, rs);
		}
		return null;
	}
}

StudentDao

package com.ydwj.metaData;

import java.util.List;

import BeanUtils.Student;

public class StudentDao extends BaseDao {

	/**
	 * 删除测试
	 * 
	 * @param id 要删除的id号
	 */
	public void deleteById(int id) {

		String sql = "delete from tb_user where id = ?";
		Object[] paramsValue = { id };

		super.update(sql, paramsValue);
	}

	/**
	 * 插入测试
	 * 
	 * @param stu 要插入的对象
	 */
	public void addStudent(Student stu) {
		String sql = "insert into tb_user values(?,?,?,?)";

		Object[] paramsValue = { stu.getId(), stu.getName(), stu.getSex(), stu.getAge() };

		super.update(sql, paramsValue);
	}

	/**
	 * 更新测试
	 * @param stu	要更新的对象
	 */
	public void updateStudent(Student stu) {
		String sql = "update tb_user set name=?,sex=?,age=? where id=?";

		Object[] paramsValue = { stu.getName(), stu.getSex(), stu.getAge(), stu.getId() };
		super.update(sql, paramsValue);
	}
	
	/**
	 * 查询所有
	 */
	public List getAll(){
		String sql = "select * from tb_user";
		List list = super.query(sql, null, Student.class);
		return list;
	}
	
	/**
	 * 获取指定ID的学生
	 */
	public Student findById(int id) {
		String sql = "select * from tb_user where id = ?";
		Object[] paramsValue = {id};
		List list = super.query(sql, paramsValue, Student.class);
		return (list != null && list.size() > 0) ? list.get(0) : null;
	}
}

测试类

package com.ydwj.metaData;

import java.util.List;

import BeanUtils.Student;

public class StudentTest {
	public static void main(String[] args) {
		StudentDao dao = new StudentDao();

		Student stu = new Student();

		stu.setName("刘嘻嘻");
		stu.setAge(24);
		stu.setSex("男");
		stu.setId(6);

//		dao.addStudent(stu);
		stu.setName("天王盖地虎");
//		dao.updateStudent(stu);
		
//		dao.deleteById(6);
		List list = dao.getAll();
		for (Student student : list) {
			System.out.println(student);
		}
	
		Student stu1 = dao.findById(3);
		System.out.println(stu1);
	}
}

 

你可能感兴趣的:(Java)