先编写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 <T> List<T> query(String sql, Object[] paramsValue, Class<T> cls) {
try {
// 1. 要返回的数据集合
List<T> list = new ArrayList<T>();
// 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<Student> getAll(){
String sql = "select * from tb_user";
List<Student> 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<Student> 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<Student> list = dao.getAll();
for (Student student : list) {
System.out.println(student);
}
Student stu1 = dao.findById(3);
System.out.println(stu1);
}
}