使用DBUtils时Javabean属性名称与数据库表字段名不一致导致Javabean对象无法赋值的解决方案
DBUtils1.6版本之后官方提供了一个BeanProcessor
我们可以用这个类来映射数据库表与Javabean的字段关系
构造方法如下
我们可以使用一个Map设置对应关系,其中key是表字段名,value是Javabean属性名
BeanProcessor实现了一个子类,GenerousBeanProcessor,这个类用于处理表字段名使用下划线,而Javabean使用驼峰式命名的情况,需要注意,名字的字母是一样的,只是命名方式不一样,如user_name与
userName就可以使用GenerousProcessor处理,而user_name与uName就不能使用映射。
代码示例:
JavaBean
/*
@author Nian
@Date 2022/8/26 19:20
@purpose
@Note
*/
public class Student {
private int studentId;
private String studentName;
public Student() {
}
public Student(String studentName) {
this.studentName = studentName;
}
public Student(int studentId, String studentName) {
this.studentId = studentId;
this.studentName = studentName;
}
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
}
student表:
测试类:
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.GenerousBeanProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.RowProcessor;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.List;
/*
@author Nian
@Date 2022/8/26 19:17
@purpose
@Note
*/
public class GenerousBeanProcessorTest {
public static void main(String[] args) throws SQLException {
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
QueryRunner queryRunner = new QueryRunner(comboPooledDataSource);
String sql = "select * from student";
GenerousBeanProcessor generousBeanProcessor = new GenerousBeanProcessor();
RowProcessor rowProcessor = new BasicRowProcessor(generousBeanProcessor);
List<Student> query = queryRunner.query(sql, new BeanListHandler<Student>(Student.class, rowProcessor));
for(Student student : query){
int studentId = student.getStudentId();
String studentName = student.getStudentName();
System.out.println(studentId);
System.out.println(studentName);
}
}
}
打印结果: