Over a million developers have joined DZone.

DB Queries in spring's application.xml.


While solving one of my assignment, I realize the age long practice of writing db queries in java class file is really a big pain. They are difficult to read and understand. Further if you want to modify it again a lot of task.

Thus, to get rid of the pain, I put the db queries in spring’s context xml.

Later I realize using such injections using xml, its not only easier to maintain and understand also we can have module wise segregation of db queries in different <util:map> or in different "xyzDAO-queries.xml". Further its easier to add more customers to the existing application.

Please see the code snippet area for the context.xml called "userDAO-queries.xml". I've created Map <util:map/> with an id. In the Map I put the key as <entry key="QUERY" > and values as <value>.db queries goes here....</value> , which contains the query.

The java classes are DBQueriesImpl.java and UserDAOImpl.java for fetching the exact query from the "xyzDAO-queries.xml".

Please see the comments in the java class.

Context XML (userDAO-queries.xml) part :


    		 SELECT	user_id,	 user_name,  user_password 
			FROM	ty_users 
			WHERE	user_name = ? AND user_password = ?

Java Code Part:

public class UserDAOImpl implements UserDAO{
	private static final Logger logger = LoggerFactory.getLogger(UserDAOImpl.class);// logger
	DBQueries dbQuery = new DBQueriesImpl("userDAO-queries.xml");//
	DBConnection dbConn = ConnectionFactory.getInstance().getConnectionMySQL();
	public List authenitcUserDetails(String userName, String userPassword) {
		Map queryMap = null;
		String query ;
		List> mappedUserList = null;
		List listUser = null;
			listUser = new ArrayList();
			queryMap = dbQuery.getQueryBeanFromFactory("VALIDATE_USER_CREDENTIAL"); //passing the query-name or Map Id.
			query =  dbQuery.getQuery(queryMap);//passing the query-map to get the query.

//rest of the code is common fetching code.						
			mappedUserList = dbConn.dbQueryRead(query, new Object[]{userName,userPassword});			
				listUser =  new QueryResultSetMapperImpl().mapRersultSetToObject(mappedUserList, User.class);
		}catch(Exception  ex){
			logger.error("fetchAllUser Error:: ", ex);
		return listUser;

public class DBQueriesImpl implements DBQueries {
	private static final Logger logger = LoggerFactory.getLogger(DBQueriesImpl.class);
	private ApplicationContext queriesCtx ;
	 * @Desc: Loading the queryContext xml
	 * @param queryContext
	public DBQueriesImpl(String queryContext) {
		queriesCtx = new ClassPathXmlApplicationContext(queryContext);
	 * @Desc: Reading from the loaded application context and getting the query-map, .  
	public Map getQueryBeanFromFactory(String beanId){
		Map queryMap = null;
		if (queriesCtx != null && beanId != null) {
			queryMap = (Map)queriesCtx.getBean(beanId);
		return queryMap;
	 * @Desc: Getting the exact query from the query-map, .  
	public String getQuery(Map queryMap) {
		String query=null;
				query = (String) queryMap.get(QueryConstants.QUERY_NODE);
				throw new NoSuchFieldError();
		}catch(Exception excp){
		return query;

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}