Maison > Java > javaDidacticiel > Nouveau mouvement Java : développement piloté par les tests 3 ---enregistrement des utilisateurs 3

Nouveau mouvement Java : développement piloté par les tests 3 ---enregistrement des utilisateurs 3

黄舟
Libérer: 2016-12-30 13:15:08
original
1197 Les gens l'ont consulté

Jusqu'à présent, nous n'avons pas abordé la question de fond de l'enregistrement des utilisateurs, c'est-à-dire de l'ajout d'utilisateurs à la base de données. Parlons maintenant de cette exigence.

Vous devez d'abord déterminer la technologie utilisée pour accéder à la base de données. Vous pouvez choisir ici Hibernate, JPA ou JDBC. Je pense que la plupart des applications utilisent Hibernate comme technologie d'accès aux bases de données. D'autres peuvent choisir JPA, mais nous choisissons ici JDBC. La raison est relativement simple. Les choses sous-jacentes semblent plus compliquées, mais une fois maîtrisées, elles sont relativement plus faciles à maîtriser en raison de leur moindre contenu. Ce modèle de cartographie O-R ajoute de nombreux concepts et détails abstraits. Nous ne regardons généralement que la pointe de l'iceberg de ces architectures. Si vous souhaitez maîtriser les choses sous l'iceberg, la difficulté est de plusieurs ordres de grandeur plus difficile que la maîtrise directe de JDBC.

De plus, grâce à notre architecture de développement pilotée par les tests, si nous souhaitons convertir vers d'autres architectures, nous pouvons refactoriser le code existant. Sous la garantie de cas de test, nous pouvons modifier le code en toute sécurité.

Bien, utilisons d'abord le mode DAO pour définir la classe d'interface d'accès à la base de données UserDao. Le code est le suivant :

public interface UserDao {  
    public long registerUser(Map<String, Object> userInfo);  
}
Copier après la connexion

De manière générale, nous utilisons la base de données Mysql, nous définissons donc. l'implémentation de Dao Class UserMysqlDao, le code est le suivant :

public class UserMysqlDao implements UserDao {  
    @Override  
    public long registerUser(Map<String, Object> userInfo) {  
        // TODO Auto-generated method stub  
        return 0;  
    }
Copier après la connexion

Bien sûr, nous ne voulons pas que l'utilisateur détermine la base de données utilisée, puis instancie la classe d'implémentation correspondante. Il faut adopter le mode usine et introduire la classe DaoFactory. Le code Comme suit :

public class DaoFactory {  
    public static UserDao getUserDao() {  
        UserDao dao = null;  
        switch (dbms) {  
        case "mysql":  
            dao = new UserMysqlDao();  
            break;  
        }  
        return dao;  
    }  
      
    public static String getDbms() {  
        return dbms;  
    }  
  
    public static void setDbms(String dbms) {  
        DaoFactory.dbms = dbms;  
    }  
  
    private static String dbms = "mysql";  
}
Copier après la connexion

Comme le montre le code ci-dessus, l'appelant n'a qu'à appeler DaoFactory.getUserDao() pour obtenir l'implémentation. classe.

Ce qui suit est le problème de la connexion à la base de données. Nous espérons utiliser le pool de connexion à la base de données lors de l'exécution sur des serveurs d'applications tels que Jboss, et utiliser DriverManager dans les tests unitaires, nous devons donc définir une classe d'encapsulation DataSource JdbcDs pour gérer la situation ci-dessus. Le code ressemble à ceci :

public class JdbcDs {	
	public static Connection getConnection() throws SQLException {
		Connection conn = null;
		if (iDebug <= 0) {
			conn = appDs.getConnection();
		} else {
			try {
				Class.forName("com.mysql.jdbc.Driver").newInstance();
			} catch (InstantiationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			Properties connectionProps = new Properties();
		    connectionProps.put("user", "root");
		    connectionProps.put("password", "yantao");
		    conn = DriverManager.getConnection(
	                   "jdbc:" + "mysql" + "://" +
	                   "localhost" +
	                   ":" + 3306 + "/XrcjDb",
	                   connectionProps);
		}
		return conn;
	}

	public static int iDebug = 1;
	public final static String APP_DS = "java:jboss/datasources/XcgDS";
	private static DataSource appDs = null; 
	static{
		if (null == appDs) {
			Properties env = new Properties();
			try {
				InitialContext ictx = new InitialContext(env);
				appDs = (DataSource)ictx.lookup(APP_DS);
			} catch (NamingException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
	}
	
}
Copier après la connexion

Lorsque vous effectuez des tests unitaires, définissez simplement iDebug sur 1. Sinon, le pool de connexions à la base de données sera utilisé.

Une fois tout le travail de préparation effectué, le développement de la fonction de base de données peut être officiellement réalisé.

Ce qui précède est le contenu du nouveau mouvement Java : développement piloté par les tests 3 --- Enregistrement de l'utilisateur 3. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal