采用连接池对JDBC封装实现学生管理系统

采用连接池对JDBC封装实现学生管理系统


lib中jar包

  • ojdbc6.jar
  • druid-1.1.20.jar
  • commons-dbutils-1.7.jar

src目录下配置druid.properties/StudentManager8/src/druid.properties)文件:

driverClassName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
username=scott
password=root
initialSize=2
maxActive=300
maxWait=60000

com.bennett.model

package com.bennett.model;
import java.util.Date;
/**
 * @Version:3.0 
 * @Description:SM-8
 * @Author: bennett
 * @Date: 2021年10月22日 下午2:17:32
 */
public class Student {
	private int id;
	private String name;
	private Date birthday;
	public Student() {
	}
	public Student(int id, String name, Date birthday) {
		super();
		this.id = id;
		this.name = name;
		this.birthday = birthday;
	}
	@Override
	public String toString() {
		return "id=" + id + " name=" + name + " birthday=" + birthday;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		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 (id != other.id)
			return false;
		return true;
	}
	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;
	}
}

com.bennett.dao

package com.bennett.dao;
import java.io.InputStream;
import java.util.Properties;
import org.apache.commons.dbutils.QueryRunner;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
/**
 * @Version:3.0 
 * @Description:SM-8
 * @Author: bennett
 * @Date: 2021年10月22日 下午3:54:53
 */
public class BaseDao {
	private static DruidDataSource ds;
	private final static String CONFIG_FILE = "druid.properties";
	protected QueryRunner queryRunner=new QueryRunner(ds);
	
	static {
		try {
			Properties properties=new Properties();
			InputStream inStream=BaseDao.class.getClassLoader()
					.getResourceAsStream(CONFIG_FILE);
			properties.load(inStream);
			ds=(DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

package com.bennett.dao;
import java.util.List;
import com.bennett.model.Student;
/**
 * @Version:3.0 
 * @Description:SM-8
 * @Author: bennett
 * @Date: 2021年10月22日 下午3:55:43
 */
public interface StudentDao {
	boolean add(Student student);
	boolean delete(int id);
	boolean update(Student student);
	Student get(int id);
	List<Student> getAll();
}
package com.bennett.dao;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.bennett.model.Student;
/**
 * @Version:3.0 
 * @Description:SM-8
 * 				对象关系映射(ORM)
 * @Author: bennett
 * @Date: 2021年10月22日 下午3:56:08
 */
public class StudentImplQueryRunner extends BaseDao implements StudentDao {
	@Override
	public boolean add(Student student) {
		try {
			String sql="insert into student"
					+ " (id, name, birthday)"
					+ " values"
					+ " (?,?,?)";
			return queryRunner.execute(sql,
					student.getId(), 
					student.getName(),
					student.getBirthday()
			)==1;
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return false;
	}
	@Override
	public boolean delete(int id) {
		try {
			String sql="delete student"
					+ " where id = ?";
			return queryRunner.execute(sql,id)==1;
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return false;
	}
	@Override
	public boolean update(Student student) {
		try {
			String sql="update student"
					+ " set name = ?,"
					+ " birthday = ?"
					+ " where id = ?";
			return queryRunner.execute(sql,
					student.getName(),
					student.getBirthday(),
					student.getId()
			)==1;
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return false;
	}
	@Override
	public List<Student> getAll() {
		try {
			String sql="select id, name, birthday from student"
					+ " order by id";
			return queryRunner.query(sql, new BeanListHandler<Student>(Student.class));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	@Override
	public Student get(int id) {
		try {
			String sql="select id, name, birthday from student"
					+ " where id = ?";
			return queryRunner.query(sql, new BeanHandler<>(Student.class),id);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
}
//class StudentRowMaper implements RowMapper<Student>{
//
//	@Override
//	public Student row2Object(ResultSet rs) {
//		try {
//			return new Student(
//					rs.getInt("id"),
//					rs.getString("name"),
//					rs.getDate("bitthday")
//			);
//		} catch (SQLException e) {
//			e.printStackTrace();
//		}
//		return null;
//	}
//	
//}

com.bennett.dao.test

package com.bennett.dao.test;
import static org.junit.jupiter.api.Assertions.*;
import java.sql.Date;
import java.util.List;
import org.junit.jupiter.api.Test;
import com.bennett.dao.StudentDao;
import com.bennett.dao.StudentImplQueryRunner;
import com.bennett.model.Student;
/**
 * @Version:3.0 
 * @Description:SM-8
 * @Author: bennett
 * @Date: 2021年10月22日 下午3:56:31
 */
class StudentImplQueryRunnerTest {
	private StudentDao studentDao=new StudentImplQueryRunner();

	@Test
	void testAdd() {
		assertTrue(studentDao.add(new Student(1008, "李广", Date.valueOf("2003-3-3"))));
	}
	@Test
	void testDelete() {
		assertTrue(studentDao.delete(1008));
	}
	@Test
	void testUpdate() {
		assertTrue(studentDao.update(new Student(1008, "李广", Date.valueOf("2005-3-3"))));
	}
	@Test
	void testGetAll() {
		List<Student> results = studentDao.getAll();
		for (Student student : results) {
			System.out.println(student);
		}
	}
	@Test
	void testGet() {
		System.out.println(studentDao.get(1004));
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值