I have just started adding Spring's DAO support into my JSF+Hibernate application. Since I am really new to all this DAO stuff I'd like to post my code and get feedback on what I have done right and/or what I should do differently. I will not be including my hibernate mapping files as they work fine and this is more about implementing Spring's DAO. Thanks for any tips/advice you can give me.
The following code is all for my User class and getting a user via a username and password for logging in.
applicationContext.xml
UserServiceCode:<beans> <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>java:comp/env/jdbc/anykey</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop> </props> </property> <property name="mappingDirectoryLocations"> <list> <value>classpath:/com/intrust/anykey/database/hibernate/mappings</value> </list> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <bean id="userDao" class="com.intrust.anykey.database.dao.hibernate.UserDaoHib"> <property name="hibernateTemplate"> <ref bean="hibernateTemplate"/> </property> </bean> <bean id="userServiceTarget" class="com.intrust.anykey.database.dao.services.UserServiceImpl"> <property name="userDao"> <ref bean="userDao"/> </property> </bean> <bean id="userService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager"/> </property> <property name="target"> <ref bean="userServiceTarget"/> </property> <property name="transactionAttributes"> <props> <prop key="getUser">PROPAGATION_REQUIRED</prop> </props> </property> </bean> </beans>
UserServiceImplCode:public interface UserService { public void setUserDao(UserDAO userDao); public User getUser(String username, String password); }
UserDAOCode:public class UserServiceImpl implements UserService { private UserDAO userDao; public void setUserDao(UserDAO userDAO){ this.userDao = userDAO; } public User getUser(String username, String password) { return userDao.load(username, password); } }
UserDaoHibCode:public interface UserDAO { public User load(String username, String password); }
User Login SnippetCode:public class UserDaoHib implements UserDAO { private HibernateTemplate hibernateTemplate; public void setHibernateTemplate(HibernateTemplate template){ this.hibernateTemplate = template; } public User load(String username, String password) { String passHash = MD5.getHash(password); final Map map = new HashMap(); map.put("username", username); map.put("password", passHash); return (User)hibernateTemplate.execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException{ return session.createCriteria(User.class).add(Restrictions.allEq(map)).uniqueResult(); } }); }
Code:ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getContext()); UserService userDAO = (UserService)context.getBean("userService"); User user = userDAO.getUser(username, password);


Reply With Quote