Spring boot: "this.jdbcTemplate" is null"

Résolu/Fermé
Rune188 Messages postés 67 Date d'inscription lundi 20 février 2017 Statut Membre Dernière intervention 29 janvier 2024 - 18 mai 2022 à 16:13
Rune188 Messages postés 67 Date d'inscription lundi 20 février 2017 Statut Membre Dernière intervention 29 janvier 2024 - 18 mai 2022 à 19:59
Bonjour,

j'essaye de faire une application web qui utilise:

SpringBoot
Mysql
JDBC
Design pattern: MVC, DAO
Thymeleaf
Et IntelliJ

j'essaye simplement d'afficher le contenu d'une table de ma db mais j'obtien toujours le message d'ereur suivant:
(j'ai verifié que la connexion à la base de donnée dans "application.properties" et le probleme ne semble pas venir de la connexion à la db)
"java.lang.NullPointerException: Cannot invoke "org.springframework.jdbc.core.JdbcTemplate.query(String, org.springframework.jdbc.core.RowMapper)" because "this.jdbcTemplate" is null"

Controlleur:
@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";
    }

}


mon model:
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;
        }

    }
}
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
18 mai 2022 à 17:07
Bonjour,

Il ne faut pas faire
DiabeticDAO diaDao = new DiabeticDAO();
dans LoginController car cela va construire un nouvel objet DiabeticDAO au lieu d'utiliser celui instancié par Spring qui peut s'obtenir via un
@Autowired DiabeticDAO diaDao
et qui sera bien initialisé avec une valeur dans chaque @Autowired et en particulier celui du JdbcTemplate

NB. dans DiabeticDAO la méthode setDataSource n'a rien à faire là, ce n'est pas à toi de créer des objets JdbcTemplate vu qu'ils sont injectés par Spring.
1
Rune188 Messages postés 67 Date d'inscription lundi 20 février 2017 Statut Membre Dernière intervention 29 janvier 2024
18 mai 2022 à 19:59
Problème résolu !
Merci :)
0