BeanHandler<Student>(Student.class)
原因如下:
1.连接池工具类Druidutils是否配置正确(个人因自动补码导致有串代码错误)
2.DTO实体类中需要包含get,set方法,空的构造函数,含参构造函数和重写toString方法(没有也不影响,最好加上)
3.记得后面传参
student = queryRunner.query(sql,new BeanHandler<Student>(Student.class),stuNum,stuPwd);
总结:
本人就是因为连接池工具类因为自动补码给我多写了一个方法导致一直连接为null,查遍了资料也没有解决,最后突然想起来Druidutils并不是自带的类而是我自己写的类,终于找到了错误。
此外,web注解必须正确,负责404找不到源数据
Druidutils类:
//连接池工具类
package stuInfo.utils;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.*;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class DruidUtils {
private static DruidDataSource druidDataSource;
static {
try{
InputStream is = DruidUtils.class.getResourceAsStream("druid.properties");
Properties properties = new Properties();
properties.load(is);
druidDataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取数据库连接池数据源对象
public static DataSource getDataSource(){
return druidDataSource;
}
//从数据库连接池中获取数据库连接对象
public static Connection getConnection(){
Connection connection = null;
try {
connection = druidDataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
}
DTO实体类:
package stuInfo.dto;
/**
* 描述:
* 作者:小陶不慌张
* 文件:Student
* 日期:2023/3/2 0:31
*/
public class Student {
private String stuNum;
private String stuName;
private String stuGender;
private int stuAge;
private String stuPwd;
public Student() {
}
public Student(String stuNum, String stuName, String stuGender, int stuAge, String stuPwd) {
this.stuNum = stuNum;
this.stuName = stuName;
this.stuGender = stuGender;
this.stuAge = stuAge;
this.stuPwd = stuPwd;
}
@Override
public String toString() {
return "Student{" +
"stuNum='" + stuNum + '\'' +
", stuName='" + stuName + '\'' +
", stuGender='" + stuGender + '\'' +
", stuAge=" + stuAge +
", stuPwd='" + stuPwd + '\'' +
'}';
}
public String getStuNum() {
return stuNum;
}
public void setStuNum(String stuNum) {
this.stuNum = stuNum;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuGender() {
return stuGender;
}
public void setStuGender(String stuGender) {
this.stuGender = stuGender;
}
public int getStuAge() {
return stuAge;
}
public void setStuAge(int stuAge) {
this.stuAge = stuAge;
}
public String getStuPwd() {
return stuPwd;
}
public void setStuPwd(String stuPwd) {
this.stuPwd = stuPwd;
}
}
DAO:
package stuInfo.dao;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import stuInfo.dto.Student;
import stuInfo.utils.DruidUtils;
/**
* 描述:根据学号密码查询学生信息
* 作者:小陶不慌张
* 文件:StudentDAO
* 日期:2023/3/2 12:52
*/
public class StudentDAO {
public Student queryStudentByNumAndPwd(String stuNum, String stuPwd){
Student student=null;
try{
String sql = "select stu_num stuNum, stu_name stuName, stu_gender stuGender, stu_age stuAge, stu_pwd stuPwd from students where stu_num=? and stu_pwd=?";
QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
student = queryRunner.query(sql,new BeanHandler<Student>(Student.class),stuNum,stuPwd);
System.out.println(student);
}catch(Exception e){
e.printStackTrace();
}
return student;
}
}