ibatis模块化开发

项目已经做完一段时间了,蓦然回首中,发现项目在开发模块化方面做的很好,包括对ibatis的sqlMap以及它的映射文件全部进行了模块化开发,看起来一目了然,自然清新,和大家分享一下。

前言:

        首先需要把sqlMap文件全部独立出来,怎么样既与DAO相连,也能够看着是独立于Java代码之外的呢。我们需要建立一个source folder,命名为sqlmap,只要sqlMapConfig配置文件、映射文件的包名和Java代码的DAO的包名保持一致就OK,就能够操作同一个包一样,虽然它们处于不同的sourcefolder里面。【结构截图见附件】

          一般的话,大家可能都会只写一个sqlMapConfig配置文件,把所有的映射文件全部都放它里面,如果项目大的话,会有多少映射文件啊,效果当然不好。这样,我们也需要把sqlMapConfig进行模块化,如:sqlMapConfig-XXX.xml,那么怎么调用它,接下来就是见证奇迹的时刻....

过程:

      建立一个静态的sqlMapClientManager类,对sqlMapClient和sqlMapConfig-XXX.xml进行管理,废话说完,贴上简短代码,大家就清楚了。

private static Hashtable<String,SqlMapClient> sqlMapClients = new Hashtable<String,SqlMapClient>();
	
	/**
	 * 获取对应数据库的SqlMapClient
	 * 		前提:有对应数据库的sqlMapConfig,命名规则为:sqlMapConfig-模块名.xml
	 * @param dbName  模块名
	 * @return 异常时返回null
	 */
	public static SqlMapClient getSqlMapClient(String dbName){
		SqlMapClient sqlMap = sqlMapClients.get(dbName);
		if(sqlMap==null){
			sqlMap = buildSqlMapClient(dbName);
			if(sqlMap!=null){
			sqlMapClients.put(dbName, sqlMap);
			}
		}
		return sqlMap;
		
	}
	
	/**
	 * 构建SqlMapClient
	 * @param dbName 模块名
	 * @return 
	 * @throws IOException 
	 */
	private static SqlMapClient buildSqlMapClient(String dbName){
		SqlMapClient sqlMap = null;	
		try{
			String resource ="com/test/common/dao/sql/sqlMapConfig-"+dbName+".xml";
			Reader reader = Resources.getResourceAsReader(resource);
			sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);	
		}catch(Exception e){
			log.error(e);
		}
		return sqlMap;		
	}

 我们可以根据sqlMapClientManager的getSqlMapClient(String dbName)方法获取不同模块的SqlMapClient,然后在DAO中进行增删查改。如:

//根据模块名获取sqlMapClient对数据库操作	
SqlMapClient sqlMapClient = SqlMapClientManager.getSqlMapClient("web");
		try {
			list=(ArrayList<CityBean>)sqlMapClient.queryForList("Base_City.get",null);
                                   }catch(Exception e){}

相关推荐