今日做一个小案例,运用包装类封装数据库的查询结果,最后打印结果显示查询出来的name显示为空。
以下是源码:
package session_checkCode.domain;public class User { private int id; private String username; private String password; private int salary; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + ''' + ", password='" + password + ''' + ", salary='" + salary + ''' + '}'; }}
package session_checkCode.dao;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import session_checkCode.domain.User;import session_checkCode.utils.JDBCUtils;public class userDao { //操作数据库 //定义JdbcTemplate private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); //定义方法操作数据库 public User login(User loginUser){ //定义sql语句 String sql = "select * from student where name = ? and password = ?"; User user = new User(); try{ user = template.queryForObject(sql, new BeanPropertyRowMapper(User.class), loginUser.getUsername(),loginUser.getPassword()); }catch(Exception e){ return null; } return user; }}
package session_checkCode.test;import jdk.jfr.StackTrace;import org.junit.Test;import session_checkCode.dao.userDao;import session_checkCode.domain.User;public class DaoTest {@Testpublic void daoTest(){ User loginUser = new User(); loginUser.setUsername("zhangsan"); loginUser.setPassword("1234"); userDao ud = new userDao(); User login = ud.login(loginUser); System.out.println(login);}}
解决问题:
原因出在了User类中变量名与数据库中的名的不对应,将private String username改为private
String name ,并将相应的getter setter方法改了,之后查询结果无误。
以此记录所犯之错,以及所解之法!