问题
无法找到Users类的无参构造器
org.springframework.beans.BeanInstantiationException: Failed to instantiate [cn.itcast.jdbc.JDBCTemplate2$Users]: No default constructor found; nested exception is java.lang.NoSuchMethodException: cn.itcast.jdbc.JDBCTemplate2$Users.<init>()
解答:
内部类默认构造函数不是无参数构造函数。它们的默认构造函数接受1个类型的参数 - 外部类
package cn.itcast.jdbc;
import cn.itcast.util.ConnectionPoolUtils;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
/**
* @Xinhao
* @Date 2021/12/20
* @Descrption
*/
public class JDBCTemplate2 {
private static JdbcTemplate template = new JdbcTemplate(ConnectionPoolUtils.getDataSource());
private class Users{
String username;
String password;
public Users(){
}
@Override
public String toString() {
return "Users{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
// Junit
@Test
public void test1(){
String sql = "insert into users values(?,?)";
template.update(sql, "wangwu", "wangwu110");
}
@Test
public void test2(){
String sql = "select * from users";
List<Map<String, Object>> map = template.queryForList(sql);
System.out.println(map);
}
@Test
public void test3(){
String sql = "select * from users";
List<Users> usersList = template.query(sql, new RowMapper<Users>() {
@Override
public Users mapRow(ResultSet resultSet, int i) throws SQLException {
Users user = new Users();
return user;
}
});
System.out.println(usersList);
}
@Test
public void test4(){
String sql = "select * from users";
List<Users> usersList = template.query(sql, new BeanPropertyRowMapper<Users>(Users.class));
System.out.println(usersList);
}
}