最新在學(xué)習(xí)S2SH的整合,遇到了不少問題?!,F(xiàn)在dao層只有IBaseDao?和?BaseDaoImpl;這兩個做了CURD操作的的接口,和實現(xiàn)。Service層中的繼承泛型dao層,問題是我在junit單元測試的時候,繼承basedao的CURD操作沒問題,但是service層自己的獨有的方法一直報空指針,各位大神幫忙瞅瞅,很急,小弟先在這謝謝了!!下面是我代碼!!IBaseDao.javapackage?com.yeka.oa.dao;
?
import?java.util.List;
?
public?interface?IBaseDao<T>?{
?????
????public?void?save(T?t);
????public?void?delete(Integer?id);
????public?void?update(T?t);
????public?T?getObjectById(Integer?id);
????public?List<T>?getObjectAll();
????public?List<T>?getObjetctByIds(Integer[]?ids);
?
}BaseDaoImpl.javapackage?com.yeka.oa.dao;
import?java.lang.reflect.ParameterizedType;
import?java.util.List;
?
import?javax.annotation.Resource;
?
import?org.hibernate.SessionFactory;
import?org.springframework.transaction.annotation.Transactional;
?
@SuppressWarnings("unchecked")
@Transactional
public?class?BaseDaoImpl<T>?implements?IBaseDao<T>?{
?
????//?注入sessionFactory
????@Resource
????public?SessionFactory?sessionFactory;
?????
????/**
?????*?@return?the?sessionFactory
?????*/
????public?SessionFactory?getSessionFactory()?{
????????return?sessionFactory;
????}
?
????/**
?????*?@param?sessionFactory?the?sessionFactory?to?set
?????*/
????public?void?setSessionFactory(SessionFactory?sessionFactory)?{
????????this.sessionFactory?=?sessionFactory;
????}
?
????Class?clazz;
?
????//?得到T的真實類型
????public?BaseDaoImpl()?{
????????ParameterizedType?tP?=?(ParameterizedType)?this.getClass()
????????????????.getGenericSuperclass();
????????clazz?=?(Class)?tP.getActualTypeArguments()[0];
????????System.out.println(clazz.getName());
????}
?
????/**
?????*?刪除
?????*/
????public?void?delete(Integer?id)?{
????????//?TODO?Auto-generated?method?stub
????????sessionFactory.getCurrentSession().delete(
????????????????sessionFactory.getCurrentSession().get(clazz,?id));
????}
?
????/**
?????*?獲取對象列表
?????*/
????public?List<T>?getObjectAll()?{
????????//?TODO?Auto-generated?method?stub
????????return?sessionFactory.getCurrentSession().createQuery(
????????????????"from?"?+?clazz.getSimpleName()).list();
????}
?
????/**
?????*?根據(jù)ID查詢對象
?????*/
????public?T?getObjectById(Integer?id)?{
????????return?(T)?sessionFactory.getCurrentSession().get(clazz,?id);
????}
?
????/**
?????*?根據(jù)ID數(shù)組獲取一組對象集合
?????*/
????public?List<T>?getObjetctByIds(Integer[]?ids)?{
????????return?sessionFactory.getCurrentSession().createQuery(
????????????????"from?"?+?clazz.getSimpleName()?+?"?where?id?in(:ids)")
????????????????.setParameter("ids",?ids).list();
????}
?????
????public?void?save(T?t)?{
????????sessionFactory.getCurrentSession().save(t);
????}
?
????public?void?update(T?t)?{
????????sessionFactory.getCurrentSession().update(t);
????}
?
}IEmployeeService.javapackage?com.yeka.oa.service;
?
import?java.util.List;
?
import?javax.annotation.Resource;
?
import?com.yeka.oa.dao.IBaseDao;
import?com.yeka.oa.entity.SysEmployee;
?
public?interface?IEmployeeService?extends?IBaseDao<SysEmployee>?{
????//定義特有方法
?????
????//登錄
????public?boolean?login(String?username,String?password);
?????
????//分頁查詢
????public?List<SysEmployee>?getPagination(int?pageIndex,?int?pageSize);
?
}EmployeeServiceImpl.javapackage?com.yeka.oa.service.impl;
?
import?java.util.List;
?
import?org.hibernate.Query;
import?org.hibernate.Session;
import?org.springframework.stereotype.Service;
import?org.springframework.transaction.annotation.Transactional;
?
import?com.yeka.oa.dao.BaseDaoImpl;
import?com.yeka.oa.entity.SysEmployee;
import?com.yeka.oa.service.IEmployeeService;
?
@Transactional
@Service("employeeService")
public?class?EmployeeServiceImpl?extends?BaseDaoImpl<SysEmployee>?implements?IEmployeeService?{
?????
????Session?session?=?super.getSessionFactory().getCurrentSession();
????@SuppressWarnings("unchecked")
????public?List<SysEmployee>?getPagination(int?pageIndex,?int?pageSize)?{
????????String?hql?=?"from?SysEmployee";
?????????
????????Query?query?=?session.createQuery(hql);
????????query.setMaxResults(pageSize);//?一次查詢幾條
????????query.setFirstResult((pageIndex?-?1)?*?pageSize);//?從第幾條開始查詢
????????return?query.list();
????}
?
????public?boolean?login(String?username,?String?password)?{
????????boolean?flag?=?true;
????????String?hql?=?"select?password?from?SysEmployee?where?username='"
????+?username?+?"'";
?
????????Query?query?=?session.createQuery(hql);
????????String?temppwd?=?(String)?query.uniqueResult();
????????if?(password?!=?null?&&?temppwd.equals(password))?{
????????????flag?=?true;
????????}?else?{
????????????flag?=?false;
????????}
?
????????return?flag;
?
????}
?
}? Test.javaimport?org.springframework.context.ApplicationContext;
import?org.springframework.context.support.ClassPathXmlApplicationContext;
import?org.springframework.transaction.annotation.Transactional;
?
import?com.yeka.oa.service.IEmployeeService;
?
public?class?Test?{
?????
????@Transactional
????@org.junit.Test
????public?void?test(){
????????ApplicationContext?context?=?new?ClassPathXmlApplicationContext("beans.xml");
????????IEmployeeService?employeeService?=?(IEmployeeService)?context.getBean("employeeService");
????????employeeService.getObjectAll();
????????employeeService.login("11",?"111");
????}
?
}