dao层实现方法: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") @Transactional
public 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层方法: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_CRUDpackage 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方法测试: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()方法时,却总报空指针异常。请问是哪里的问题?

解决方案 »

  1.   

    你的seriver里的dao也要提供get set方法,并且要注入
      

  2.   

    加上 public CMSUserDao getUserDao() {
    return userDao;
    }

    @Resource(name="cMSUserDaoBean")
    public void setUserDao(CMSUserDao userDao) {
    this.userDao = userDao;
    }
      

  3.   

    还差一点
    @Service(value="cMSUserServiceBean")
    public class CMSUserServiceBean implements CMSUserService {
        
        [color=#FF0000]CMSUserDao userDao;color]    //这里不能new
        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;
        }}