SSH项目中遇到的问题,请高手解答。
dao层实现方法:
- Java code
package com.ailincms.dao.impl;import java.util.List;import javax.annotation.Resource;import org.hibernate.Query;import org.hibernate.SessionFactory;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;import com.ailincms.bean.CMSUser;import com.ailincms.dao.CMSUserDao;@Repository(value="cMSUserDaoBean") @Transactionalpublic class CMSUserDaoBean implements CMSUserDao { @Resource SessionFactory factory; public void createCMSUser(CMSUser cmsuser) { try{ factory.getCurrentSession().persist(cmsuser); } catch(RuntimeException e) { throw e; } } public void updateCMSUser(CMSUser cmsuser) { try{ factory.getCurrentSession().merge(cmsuser); } catch(RuntimeException e) { throw e; } } public void deleteByUsername(String username) { try{ factory.getCurrentSession().delete(factory.getCurrentSession().createQuery("from CMSUser as user where user.username='"+username+"'").uniqueResult()); } catch(RuntimeException e) { throw e; } } public void deleteByUserid(Integer userid) { try { factory.getCurrentSession().delete(factory.getCurrentSession().get(CMSUser.class, userid)); } catch (RuntimeException e) { throw e; } } @SuppressWarnings("unchecked") @Transactional(propagation=Propagation.NOT_SUPPORTED) public List<CMSUser> findByProperty(String propertyName, Object value) { try { return factory.getCurrentSession().createQuery("from CMSUser as user where user."+propertyName+" = '"+value+"' ").list(); } catch (RuntimeException e) { throw e; } } @Transactional(propagation=Propagation.NOT_SUPPORTED) public CMSUser findByUsername(String username) { Query q = factory.getCurrentSession().createQuery("from CMSUser as user where user.username=?"); q.setString(0, username); return (CMSUser)q.uniqueResult(); } @Transactional(propagation=Propagation.NOT_SUPPORTED) public CMSUser findByUserid(Integer userid) { try { return (CMSUser)factory.getCurrentSession().get(CMSUser.class, userid); } catch (RuntimeException e) { throw e; } } @SuppressWarnings("unchecked") @Transactional(propagation=Propagation.NOT_SUPPORTED) public List<CMSUser> getAllCMSUser() { try { return factory.getCurrentSession().createQuery("from CMSUser").list(); } catch (RuntimeException e) { throw e; } } }service层方法:
- Java code
package com.ailincms.service.impl;import java.util.Date;import org.springframework.stereotype.Service;import com.ailincms.bean.CMSUser;import com.ailincms.dao.CMSUserDao;import com.ailincms.dao.impl.CMSUserDaoBean;import com.ailincms.service.CMSUserService;@Service(value="cMSUserServiceBean")public class CMSUserServiceBean implements CMSUserService { CMSUserDao userDao = new CMSUserDaoBean(); public void validateCMSUser(String username, String password) { try{ CMSUser cmsUser = userDao.findByUsername(username); System.out.println(cmsUser.getPassword()); } catch(Exception e){ e.printStackTrace(); } } public Date getLoginTime(String username) { return null; }}Junit测试代码:
1. CMSUser_CRUD
- Java code
package com.ailincms.Junit;import java.util.List;import org.junit.BeforeClass;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.ailincms.bean.CMSUser;import com.ailincms.dao.CMSUserDao;public class CMSUser_CRUD { private static CMSUserDao userService; private static CMSUser cmsUser; @BeforeClass public static void setUpBeforeClass() throws Exception { ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml"); userService = (CMSUserDao)act.getBean("cMSUserDaoBean"); cmsUser = (CMSUser)act.getBean("cMSUser"); } @Test public void createCMSUser() { cmsUser.setUsername("xql"); cmsUser.setPassword("linlin520"); userService.createCMSUser(cmsUser); } @Test public void findByUserid(){ CMSUser cmsUser = userService.findByUserid(1); System.out.println(cmsUser.getPassword()); } @Test public void findByUsername(){ CMSUser cmsUser = userService.findByUsername("admin"); System.out.println(cmsUser.getPassword()); } @Test public void getAllCMSUser(){ List<CMSUser> list = userService.getAllCMSUser(); for (CMSUser cmsUser : list){ System.out.println(cmsUser.getUsername()); } } @Test public void findByProperty(){ List<CMSUser> list = userService.findByProperty("password", "linlin520"); for (CMSUser cmsUser : list){ System.out.println(cmsUser.getUsername()); } } @Test public void deleteByUserid(){ userService.deleteByUserid(1); } @Test public void deleteByUsername(){ userService.deleteByUsername("xql"); } @Test public void updateCMSUser(){ CMSUser cmsUser = userService.findByUserid(1); cmsUser.setUsername("admin"); userService.updateCMSUser(cmsUser); }}2. service方法测试:
- Java code
package com.ailincms.service.impl;import java.util.Date;import org.springframework.stereotype.Service;import com.ailincms.bean.CMSUser;import com.ailincms.dao.CMSUserDao;import com.ailincms.dao.impl.CMSUserDaoBean;import com.ailincms.service.CMSUserService;@Service(value="cMSUserServiceBean")public class CMSUserServiceBean implements CMSUserService { CMSUserDao userDao = new CMSUserDaoBean(); public void validateCMSUser(String username, String password) { try{ CMSUser cmsUser = userDao.findByUsername(username); System.out.println(cmsUser.getPassword()); } catch(Exception e){ e.printStackTrace(); } } public Date getLoginTime(String username) { return null; }}现在问题是在DAO层的CRUD测试中,全部通过,没问题。测试getByUsername()方法也能正确打印出password。
可在测试service层validateCMSUser()方法时,却总报空指针异常。
请问是哪里的问题?
[解决办法]
你的seriver里的dao也要提供get set方法,并且要注入
[解决办法]
加上public CMSUserDao getUserDao() {
return userDao;
}
@Resource(name="cMSUserDaoBean")
public void setUserDao(CMSUserDao userDao) {
this.userDao = userDao;
}