首页 > Java > java教程 > 正文

新Java运动:测试驱动开发3---用户注册3

黄舟
发布: 2016-12-30 13:15:08
原创
1179 人浏览过

直到目前为止,我们还没有接触到用户注册的实质性问题,即向数据库中添加用户。我们现在来处理这个需求。

首先需要确定数据库访问所用的技术,这里可以选择Hibernate、JPA或JDBC。相信绝大多数应用都是采用Hibernate来作为数据库访问技术,另外一部分人可能会选择JPA,但是我们在这里选择JDBC。原因比较简单,底层的东西看上去好像比较复杂,但是一旦掌握,由于它的内容少,相对来讲更容易精通。而这种O-R映射模型,添加了许多抽象概念和细节,我们通常只看这些架构冰山的一角,而如果想掌握冰山下面的东西,难度比直接掌握JDBC难上几个数量级。

另外,由于我们测试驱动开发的架构,我们想要转换为其他架构,可以对现有代码进行重构,在测试用例的保证下,我们可以放心地对代码进行修改。

好了,我们首先用DAO模式,定义数据库访问接口类UserDao,代码如下所示:

public interface UserDao {  
    public long registerUser(Map<String, Object> userInfo);  
}
登录后复制

一般来讲,我们使用Mysql数据库,所以定义Dao的实现类UserMysqlDao,代码如下所示:

public class UserMysqlDao implements UserDao {  
    @Override  
    public long registerUser(Map<String, Object> userInfo) {  
        // TODO Auto-generated method stub  
        return 0;  
    }
登录后复制

我们当然不希望使用者来确定所用的数据库,然后实例化对应的实现类,为此我们需要采用工厂模式,引入DaoFactory类,代码如下:

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";  
}
登录后复制

由上面的代码可以看出,调用者只需调用DaoFactory.getUserDao()即可获取实现类了。

下面就是数据库连接的问题,我们希望在Jboss等应用服务器上运行时采用数据库连接池,而在单元测试中使用DriverManager,所以需要定义一个DataSource的封装类JdbcDs来处理上述情况,代码如下所示:

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();
			}
		}
	}
	
}
登录后复制

当进行单元测试时,只需将iDebug置为1即可。否则会使用数据库连接池。

做完所有的准备工作,下面就可以正式进行数据库功能开发了。

 以上就是新Java运动:测试驱动开发3---用户注册3的内容,更多相关内容请关注PHP中文网(www.php.cn)!


来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板