BaseDao与StudentDao

本文主要介绍Java编程中BaseDao基类的使用,并通过实例讲解StudentDao的具体实现,涉及到BeanUtils工具类的setter和getter方法在实体类中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先编写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);
	}
}

 

public class StudentDomain:BaseDomain { public string Name public int Age { get; set; } } public class GradeDomain:BaseDomain { public string Desc { get; set; } } public class ClassDomain:BaseDomain { public string Desc { get; set; } } public abstract class BaseController { public DataStore dataStore; public Operate Oper public BaseController() { Oper = Operate.Instance; } public void Insert(BaseDomain _baseDomain) { //年级 班级 学生 增加业务都要到这里 Oper.Op(_baseDomain, 1); } public void Delete(BaseDomain _baseDomain) { Oper.Op(_baseDomain, 2); } public void Update(BaseDomain _baseDomain) { Oper.Op(_baseDomain, 3); } public void Select(BaseDomain _baseDomain) { Oper.Op(_baseDomain, 4); } } public abstract class BaseDao { public DataStore dataStore; public abstract void Insert(BaseDomain baseDomain); public abstract void Delete (BaseDomain baseDomain); public abstract void Update(BaseDomain baseDomain); public abstract void Select(); public int Check(GradeDomain domain) { for (int i = 0; i < dataStore.GradeCount; i++) { if (dataStore.GradeDB[i].Id == domain.Id) { return i; } } return -1; } } public class BaseDomain { public int Id { get; set; } } public class DataStore { private GradeDomain[] _GradeDB = new GradeDomain[10]; public GradeDomain[] GradeDB { get { return _GradeDB; } set { _GradeDB = value; } } public int GradeCount { get; set; } } public class Manager { public DataStore DataStore { get; set; }= new DataStore(); public void Execute(BaseDomain _type, int mark) { //防火墙----多态 //重新去区别 年级 班级 学生 BaseController controller = null;//局部变量在使用之前要初始化 if (_type is GradeDomain) { controller = new GradeController(DataStore); } else if (_type is ClassDomain) { controller = new ClassController(DataStore); } else if (_type is StudentDomain) { controller = new StudentController(DataStore); } if (mark1) { controller.Insert(_type); } else if (mark2) { controller.Delete(_type); } else if (mark3) { controller.Update(_type); } else if (mark4) { controller.Select(_type); } } } public class Operate//dao层 数据持久化的:将数据放入到文件或数据库或其他永久性存储数据的地方 { //单例模式 private static Operate operate = null; public static Operate Instance { get { if (operate == null) { operate = new Operate(); } return operate; } } public DataStore DataStore { get; set; } public Operate() { Console.WriteLine("op------------------123123"); } public Operate(DataStore dataStore) { DataStore = dataStore; } public void Op(BaseDomain _type, int mark) { //处理年级 班级 学生的 逻辑 BaseDao dao = null;//局部变量在使用之前要初始化 if (_type is GradeDomain) { dao = new GradeDao(DataStore); } else if (_type is ClassDomain) { dao = new ClassDao(DataStore); } else if (_type is StudentDomain) { dao = new StudentDao(DataStore); } if (mark == 1) { dao.Insert(_type); } else if (mark == 2) { dao.Delete(_type); } else if (mark == 3) { dao.Update(_type); } else if (mark == 4) { dao.Select(); } } } public class ClassController : BaseController { public ClassController(DataStore dataStore) { this.dataStore = dataStore; Oper.DataStore = base.dataStore; } } public class GradeController : BaseController { public GradeController(DataStore dataStore) { this.dataStore = dataStore; Oper.DataStore = base.dataStore; } } public class StudentController : BaseController { public StudentController(DataStore dataStore) { this.dataStore = dataStore; Oper.DataStore = base.dataStore; } } public class ClassDao:BaseDao { public ClassDao(DataStore dataStore) { this.dataStore = dataStore; } public override void Delete(BaseDomain baseDomain) { throw new NotImplementedException(); } public override void Insert(BaseDomain baseDomain) { throw new NotImplementedException(); } public override void Select() { throw new NotImplementedException(); } public override void Update(BaseDomain baseDomain) { throw new NotImplementedException(); } } public class GradeDao:BaseDao { public GradeDao(DataStore dataStore) { this.dataStore = dataStore; } public override void Delete(BaseDomain gradeDomain) { Console.WriteLine("请输入xxx年级号:"); int id = Znsd.GetInt(); gradeDomain.Id = id; int index = Check(gradeDomain as GradeDomain); if (index!= -1) { for (int i = index; i < dataStore.GradeCount-1; i++) { dataStore.GradeDB[i] = dataStore.GradeDB[i + 1]; } dataStore.GradeCount--; } else Console.WriteLine("年级号不存在"); } public override void Insert(BaseDomain baseDomain) { GradeDomain gradeDomain = new GradeDomain(); Console.WriteLine("请输入年级号:"); int id = Znsd.GetInt(); gradeDomain.Id = id; if (Check(gradeDomain) ==-1) { Console.WriteLine("请输入描述:"); gradeDomain.Desc = Znsd.GetString(); dataStore.GradeDB[dataStore.GradeCount] = gradeDomain; dataStore.GradeCount++; } else Console.WriteLine("年级号重复"); } public override void Select() { for (int i = 0; i < dataStore.GradeCount; i++) { Console.WriteLine("年级编号:{0}", dataStore.GradeDB[i].Id); } } public override void Update(BaseDomain baseDomain) { GradeDomain gradeDomain = new GradeDomain(); Console.WriteLine("请输入update年级号:"); int id = Znsd.GetInt(); gradeDomain.Id = id; int index = Check(gradeDomain); if (index != -1) { Console.WriteLine("请输入新年级号:"); int nid = Znsd.GetInt(); gradeDomain.Id = nid; if (Check(gradeDomain) == -1) { Console.WriteLine("请输入描述:"); gradeDomain.Desc = Znsd.GetString(); dataStore.GradeDB[index] = gradeDomain; } else Console.WriteLine("年级号重复"); } else Console.WriteLine("年级号不存在"); } } public class StudentDao:BaseDao { public StudentDao(DataStore dataStore) { this.dataStore = dataStore; } public override void Delete(BaseDomain baseDomain) { throw new NotImplementedException(); } public override void Insert(BaseDomain baseDomain) { Console.WriteLine("请输入学号:"); } public override void Select() { throw new NotImplementedException(); } public override void Update(BaseDomain baseDomain) { throw new NotImplementedException(); } } 请结合此程序,写一个和此程序一样的程序,逻辑要和此程序的一样
07-12
public class StudentDomain:BaseDomain { public string Name { get; set; } public int Age { get; set; } } public class GradeDomain:BaseDomain { public string Desc { get; set; } } public class ClassDomain:BaseDomain { public string Desc { get; set; } } public abstract class BaseController { public DataStore dataStore; public Operate Oper { get; set; } public BaseController() { Oper = Operate.Instance; } public void Insert(BaseDomain _baseDomain) { //年级 班级 学生 增加业务都要到这里 Oper.Op(_baseDomain, 1); } public void Delete(BaseDomain _baseDomain) { Oper.Op(_baseDomain, 2); } public void Update(BaseDomain _baseDomain) { Oper.Op(_baseDomain, 3); } public void Select(BaseDomain _baseDomain) { Oper.Op(_baseDomain, 4); } } public abstract class BaseDao { public DataStore dataStore; public abstract void Insert(BaseDomain baseDomain); public abstract void Delete (BaseDomain baseDomain); public abstract void Update(BaseDomain baseDomain); public abstract void Select(); public int Check(GradeDomain domain) { for (int i = 0; i < dataStore.GradeCount; i++) { if (dataStore.GradeDB[i].Id == domain.Id) { return i; } } return -1; } } public class BaseDomain { public int Id { get; set; } } public class DataStore { private GradeDomain[] _GradeDB = new GradeDomain[10]; public GradeDomain[] GradeDB { get { return _GradeDB; } set { _GradeDB = value; } } public int GradeCount { get; set; } } public class Manager { public DataStore DataStore { get; set; }= new DataStore(); public void Execute(BaseDomain _type, int mark) { //防火墙----多态 //重新去区别 年级 班级 学生 BaseController controller = null;//局部变量在使用之前要初始化 if (_type is GradeDomain) { controller = new GradeController(DataStore); } else if (_type is ClassDomain) { controller = new ClassController(DataStore); } else if (_type is StudentDomain) { controller = new StudentController(DataStore); } if (mark==1) { controller.Insert(_type); } else if (mark==2) { controller.Delete(_type); } else if (mark==3) { controller.Update(_type); } else if (mark==4) { controller.Select(_type); } } } public class Operate//dao层 数据持久化的:将数据放入到文件或数据库或其他永久性存储数据的地方 { //单例模式 private static Operate operate = null; public static Operate Instance { get { if (operate == null) { operate = new Operate(); } return operate; } } public DataStore DataStore { get; set; } public Operate() { Console.WriteLine("op------------------123123"); } public Operate(DataStore dataStore) { DataStore = dataStore; } public void Op(BaseDomain _type, int mark) { //处理年级 班级 学生的 逻辑 BaseDao dao = null;//局部变量在使用之前要初始化 if (_type is GradeDomain) { dao = new GradeDao(DataStore); } else if (_type is ClassDomain) { dao = new ClassDao(DataStore); } else if (_type is StudentDomain) { dao = new StudentDao(DataStore); } if (mark == 1) { dao.Insert(_type); } else if (mark == 2) { dao.Delete(_type); } else if (mark == 3) { dao.Update(_type); } else if (mark == 4) { dao.Select(); } } } public class ClassController : BaseController { public ClassController(DataStore dataStore) { this.dataStore = dataStore; Oper.DataStore = base.dataStore; } } public class GradeController : BaseController { public GradeController(DataStore dataStore) { this.dataStore = dataStore; Oper.DataStore = base.dataStore; } } public class StudentController : BaseController { public StudentController(DataStore dataStore) { this.dataStore = dataStore; Oper.DataStore = base.dataStore; } } public class ClassDao:BaseDao { public ClassDao(DataStore dataStore) { this.dataStore = dataStore; } public override void Delete(BaseDomain baseDomain) { throw new NotImplementedException(); } public override void Insert(BaseDomain baseDomain) { throw new NotImplementedException(); } public override void Select() { throw new NotImplementedException(); } public override void Update(BaseDomain baseDomain) { throw new NotImplementedException(); } } public class GradeDao:BaseDao { public GradeDao(DataStore dataStore) { this.dataStore = dataStore; } public override void Delete(BaseDomain gradeDomain) { Console.WriteLine("请输入xxx年级号:"); int id = Znsd.GetInt(); gradeDomain.Id = id; int index = Check(gradeDomain as GradeDomain); if (index!= -1) { for (int i = index; i < dataStore.GradeCount-1; i++) { dataStore.GradeDB[i] = dataStore.GradeDB[i + 1]; } dataStore.GradeCount--; } else Console.WriteLine("年级号不存在"); } public override void Insert(BaseDomain baseDomain) { GradeDomain gradeDomain = new GradeDomain(); Console.WriteLine("请输入年级号:"); int id = Znsd.GetInt(); gradeDomain.Id = id; if (Check(gradeDomain) ==-1) { Console.WriteLine("请输入描述:"); gradeDomain.Desc = Znsd.GetString(); dataStore.GradeDB[dataStore.GradeCount] = gradeDomain; dataStore.GradeCount++; } else Console.WriteLine("年级号重复"); } public override void Select() { for (int i = 0; i < dataStore.GradeCount; i++) { Console.WriteLine("年级编号:{0}", dataStore.GradeDB[i].Id); } } public override void Update(BaseDomain baseDomain) { GradeDomain gradeDomain = new GradeDomain(); Console.WriteLine("请输入update年级号:"); int id = Znsd.GetInt(); gradeDomain.Id = id; int index = Check(gradeDomain); if (index != -1) { Console.WriteLine("请输入新年级号:"); int nid = Znsd.GetInt(); gradeDomain.Id = nid; if (Check(gradeDomain) == -1) { Console.WriteLine("请输入描述:"); gradeDomain.Desc = Znsd.GetString(); dataStore.GradeDB[index] = gradeDomain; } else Console.WriteLine("年级号重复"); } else Console.WriteLine("年级号不存在"); } } public class StudentDao:BaseDao { public StudentDao(DataStore dataStore) { this.dataStore = dataStore; } public override void Delete(BaseDomain baseDomain) { throw new NotImplementedException(); } public override void Insert(BaseDomain baseDomain) { Console.WriteLine("请输入学号:"); } public override void Select() { throw new NotImplementedException(); } public override void Update(BaseDomain baseDomain) { throw new NotImplementedException(); } } 请根据此程序,写一个和此程序一样的系统,但不需要分太多的类
07-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值