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); }
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; }
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"; }
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(); } } } }
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) !