Spring boot: « this.jdbcTemplate » está nulo

Resuelto
Rune188 Mensajes publicados 81 Estado Miembro -  
Rune188 Mensajes publicados 81 Estado Miembro -
Hola,

estoy tratando de hacer una aplicación web que usa:

SpringBoot
Mysql
JDBC
Patrón de diseño: MVC, DAO
Thymeleaf
Y IntelliJ

solo intento mostrar el contenido de una tabla de mi db pero siempre obtengo el siguiente mensaje de error:
(he verificado que la conexión a la base de datos en "application.properties" y el problema no parece venir de la conexión a la db)
"java.lang.NullPointerException: Cannot invoke "org.springframework.jdbc.core.JdbcTemplate.query(String, org.springframework.jdbc.core.RowMapper)" because "this.jdbcTemplate" is null"

Controlador:
 @Controller public class LoginController { @GetMapping("/") public String firstPage(){ return "loginPage"; } @GetMapping("/authentification") public String auth(Model model){ DiabeticDAO diaDao = new DiabeticDAO(); List<diabetic> listDia = diaDao.getAllDiab(); model.addAttribute("listdia",listDia); return "afficheTest"; } } </diabetic>


mi modelo:
 import java.sql.Date; public class Diabetic { private int id_diabetic; private int id_doctor; private String name; private String firstname; private Date birthdate; private String mail; private String password; private String phone; private String emergencyContact; private String address; public Diabetic(){ } public Diabetic(int id_diabetic, int id_doctor, String name, String firstname, Date birthdate, String mail, String password, String phone, String emergencyContact, String address) { this.id_diabetic = id_diabetic; this.id_doctor = id_doctor; this.name = name; this.firstname = firstname; this.birthdate = birthdate; this.mail = mail; this.password = password; this.phone = phone; this.emergencyContact = emergencyContact; this.address = address; } public int getId_diabetic(){ return id_diabetic; } public void setId_diabetic(int id_diabetic) { this.id_diabetic = id_diabetic; } public int getId_doctor(){ return id_doctor; } public void setId_doctor(int id_doctor) { this.id_doctor = id_doctor; } public String getName(){ return name; } public void setName(String name) { this.name = name; } public String getFirstname(){ return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public Date getBirthdate(){ return birthdate; } public void setBirthdate(Date birthdate) { this.birthdate = birthdate; } public String getMail(){ return mail; } public void setMail(String mail) { this.mail = mail; } public String getPassword(){ return password; } public void setPassword(String password) { this.password = password; } public String getPhone(){ return phone; } public void setPhone(String phone) { this.phone = phone; } public String getEmergencyContact(){ return emergencyContact; } public void setEmergencyContact(String emergencyContact) { this.emergencyContact = emergencyContact; } public String getAddress(){ return address; } public void setAddress(String address) { this.address = address; } } 


DAO:
 @Repository public class DiabeticDAO { @Autowired public JdbcTemplate jdbcTemplate; //@Autowired public SimpleJdbcInsert simpleJdbcInsert; @Autowired public void setDataSource(DataSource dataSource){ this.jdbcTemplate = new JdbcTemplate(dataSource); this.simpleJdbcInsert = new SimpleJdbcInsert(dataSource).withTableName("diabetic") .usingGeneratedKeyColumns("id_diabetic"); } public Diabetic getDiabById(int id){ return jdbcTemplate.queryForObject("select * from Diabetic where id_diabetic=?", new DiabeticRowMapper(),id); } public List<diabetic> getAllDiab(){ return jdbcTemplate.query("select * from Diabetic",new DiabeticRowMapper()); } public boolean loggin(String mail, String mdp) { DiabeticDAO diaDao = new DiabeticDAO(); List<diabetic> listDia = diaDao.getAllDiab(); for (int i = 0; i < listDia.size(); i++) { if((listDia.get(i).getMail().equals(mail))&&(listDia.get(i).getPassword().equals(mdp))) { return true; } } return false; } private final class DiabeticRowMapper implements RowMapper<diabetic> { @Override public Diabetic mapRow(ResultSet rs, int rowNum) throws SQLException{ Diabetic diabetic = new Diabetic(); diabetic.setId_diabetic(rs.getInt("id_diabetic")); diabetic.setId_doctor(rs.getInt("id_doctor")); diabetic.setName(rs.getString("name")); diabetic.setFirstname(rs.getString("firstname")); diabetic.setBirthdate(rs.getDate("birthdate")); diabetic.setMail(rs.getString("mail")); diabetic.setPassword(rs.getString("password")); diabetic.setPhone(rs.getString("phone")); diabetic.setEmergencyContact(rs.getString("emergencyContact")); diabetic.setAddress(rs.getString("address")); return diabetic; } } } </diabetic></diabetic></diabetic>

1 respuesta

  1. KX Mensajes publicados 19031 Estado Moderador 3 020
     
    Hola,

    No hay que hacer DiabeticDAO diaDao = new DiabeticDAO(); en LoginController, ya que eso construye un nuevo objeto DiabeticDAO en lugar de usar el que Spring instancia, que se puede obtener vía @Autowired DiabeticDAO diaDao y que estará correctamente inicializado con un valor en cada @Autowired, en particular el de JdbcTemplate.

    Nota: en DiabeticDAO la método setDataSource no tiene que estar ahí; no eres tú quien debe crear objetos JdbcTemplate ya que son inyectados por Spring.

    -- La confianza no excluye el control.
    1
    1. Rune188 Mensajes publicados 81 Estado Miembro
       
      Problema resuelto!
      ¡Gracias :)
      0