Interroger base de données avec hibernate

Fermé
ala - 16 févr. 2013 à 20:13
ala3d Messages postés 2 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 19 février 2013 - 19 févr. 2013 à 21:10
Bonjour,




salut
je suis débutant en programmation j2ee
j'ai une table "client" dans laquelle j'ai enregistré le username et le mot de passe
en tilisant un sgbd derby
mais le probleme c'est que ne sais pas comment récuperer le username et le mot de passe depuis mon application en faisant intervenir hibernate
svp aidez moi :)

2 réponses

Utilisateur anonyme
19 févr. 2013 à 18:52
Salut!

Voici un cas d'utilisation TRES basique.

Tu dois implémenter une entité qui va mapper la table qui contient tes utilisateurs:

package hacktrack.login;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity(name = "User")
@Table(name = "T_USERS")
public class User {
	@Column(name = "USER_NAME")
	private String username;

	@Column(name = "PASSWORD")
	private String password;

	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;
	}
}


Et créer une classe qui te permet de récupérer un utilisateur sur base de son nom (via une requête JPQL). Une fois que tu as récupéré l'utilisateur, tu n'as plus qu'à contrôler son mot de passe.

package hacktrack.login;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

public class Login {

	@Autowired//Annotation de Spring permettant d'injecter dynamiquement le EntityManagerFactory (à configurer dans le contexte de Spring)
	EntityManagerFactory emf;
	
	public void login(String username, String password) throws Exception{
		EntityManager em = emf.createEntityManager();
		Query q = em.createQuery("FROM User u WHERE u.username='"+username+"'");//Requête JPQL permettant de récupérer le user portant ce nom
		User user = (User)q.getSingleResult();
		if(!checkPassword(user, password))
			throw new Exception("Login failed");
		//Effectue ici toutes les actions nécessaires lorssque le login a réussi
		//...
	}
	
	private boolean checkPassword(User user, String password){
		return user.getPassword().equals(password);
	}
}



Je te conseille néanmoins d'utiliser le cryptage pour ton mot de passe et de ne pas le stocker en clair dans ta base de données. De nombreux frameworks (dont Spring) contiennent tout ce qu'il faut pour cela, mais cela sort un peu du cadre de ta question. Pour plus d'information sur Hibernate, JPA, JPQL (et Spring): Google!

;-)
0
ala3d Messages postés 2 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 19 février 2013
19 févr. 2013 à 21:10
salut
**********************
j'ai crée un javaBean
***********************
package com.login.beans;

public class Utilisateur {
private String userName;
private String passWord;
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;
}

}
*********************
j'ai crée un fichier .hbm.xml de mapping
*****************************
<?xml version="1.0" ?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.login.beans">

<class name="Utilisateur" table="client">
<id name="userName" type="int" column="id">
<generator class="native"/>
</id>
<property name="passWord" type="string" not-null="true" column="pass" />
</class>

</hibernate-mapping>

*********************
voici la classe qui contient la methode main
**************************
*/
public static void main(String[] args) {
System.out.println("nom = ");
Configuration config = new Configuration();
config.addClass(Utilisateur.class);
config.configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();

Utilisateur u1 = new Utilisateur();






session.close();
sessionFactory.close();
}

}
*******************
mais la requete hql me donne toujours une liste vide
de meme pour load()!!!!!!!!!!!!!
0
ala3d Messages postés 2 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 19 février 2013
Modifié par ala3d le 19/02/2013 à 21:10
ici j'ai supprimé la requête
0