无法在hibernate实用程序类中自动装配sessionfactory对象,尽管我在控制器上获取它

时间:2016-09-16 05:25:58

标签: spring hibernate spring-mvc sessionfactory

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
   http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<context:property-placeholder location="classpath:application.properties" />

<mvc:annotation-driven />

<context:component-scan base-package="com.bizega.bzcrm" />

<!--
Most controllers will use the ControllerClassNameHandlerMapping above, but
for the index controller we are using ParameterizableViewController, so we must
define an explicit mapping for it.
-->
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="index.htm">indexController</prop>
        </props>
    </property>
</bean>

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      p:prefix="/WEB-INF/jsp/"
      p:suffix=".jsp" />

<!--
The index controller.
-->
<bean name="indexController"
      class="org.springframework.web.servlet.mvc.ParameterizableViewController"
      p:viewName="index" />


<!--    <bean id="multipartResolver"
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10000000" />
</bean>-->

<!-- DataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

<!--     Hibernate SessionFactory  -->
<bean id="sessionFactory"
      class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.hbm2ddl.auto">${hbm2ddl.auto}</prop>
            <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
        </props>
    </property>
    <property name="packagesToScan" value="com.bizega.bzcrm.hbmapping"></property>
</bean>

<bean id="hibernateUtil" class="com.bizega.bzcrm.util.HibernateUtil">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- Transaction -->
<bean id="transactionManager"
      class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

这是我的dispathureservlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"/>

这是我的aaplicationContext.xml

@Transactional
@Controller
public class EmployeeController {

@Autowired
private SessionFactory sessionFactory;

EmployeeService empService = new EmployeeService();

@RequestMapping(value = "/{menuid}", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<List<ModuleWrapper>> getModule(@PathVariable int menuid) throws Exception {
    return new ResponseEntity<>(empService.getModule(), HttpStatus.OK);
}

@RequestMapping(value = "/save.lx", method = RequestMethod.POST)
public String createEmployee(@ModelAttribute EmployeeFormBean employee, ModelMap obj) {
    Map map = new HashMap();
    map.put("sf", sessionFactory);
    Employee employee1 = new Employee();
    employee1.setDesgid(employee.getDesigid());
    employee1.setEmpcode(employee.getEmpcode());
    employee1.setMobile(employee.getMobile());
    employee1.setEmpname(employee.getName());
    employee1.setAhid(1);
    employee1.setDeptid(1);
    employee1.setEmail(employee.getEmail());
    employee1.setPhone(employee.getPhone());
    employee1.setIsactive(1);
    empService.saveEmployee(employee1, map);
    List<Employee> employees = empService.findAllEmployees(map);
    obj.addAttribute("employees", employees);

    return "userlist";
}

@RequestMapping(value = "/deleteuser.lx", method = RequestMethod.GET)
public String deleteEmployee(@RequestParam("id") int id, ModelMap obj) {
    Map map = new HashMap();
    map.put("sf", sessionFactory);
    empService.deleteEmployeeById(id, map);
    List<Employee> employees = empService.findAllEmployees(map);
    obj.addAttribute("employees", employees);
    return "userlist";
}

@RequestMapping(value = "/edituser.lx", method = RequestMethod.GET)
public String updateEmployee(@RequestParam("id") int id, ModelMap obj)  {
    Map map = new HashMap();
    map.put("sf", sessionFactory);
    Employee emp = empService.findById(id, map);
    obj.addAttribute("employee", emp);
    return "updateEmp";
}

@RequestMapping(value = "/update.lx", method = RequestMethod.POST)
public String updateEmployeeDetails(@ModelAttribute Employee employee, ModelMap obj) {
    Map map = new HashMap();
    map.put("sf", sessionFactory);
    empService.updateEmployee(employee, map);
    List<Employee> employees = empService.findAllEmployees(map);
    obj.addAttribute("employees", employees);
    return "userlist";
}

@RequestMapping(value = "/listEmp.lx")
public String listEmployee(ModelMap obj) {
    Map map = new HashMap();
    map.put("sf", sessionFactory);
    List<Employee> employees = empService.findAllEmployees(map);
    obj.addAttribute("employees", employees);
    return "userlist";
}

@RequestMapping(value = "/updateEmpField.lx")
public String updateSingleField(@RequestBody SingleField singleField)    {
    Map map = new HashMap();
    map.put("sf", sessionFactory);
    empService.updateEmpField(singleField,map);
   // obj.addAttribute("employees", employees);
    return "userlist";
}

}

这是我的控制器

@Transactional
@Service("empService")
public class EmployeeService {

@Autowired
SessionFactory sessionFactory;

EmployeeDataManager datamanager = new EmployeeDataManager();

public List<ModuleWrapper> getModule() throws Exception {
    return datamanager.getModule();
}

@Transactional
public void saveEmployee(Employee employee, Map map) {
    datamanager.saveEmployee(employee, map);
}

public List<Employee> findAllEmployees(Map map) {
    return datamanager.findAllEmployees(map);
}

public void deleteEmployeeById(int id, Map map) {
    datamanager.deleteEmployeeById(id, map);
}

public Employee findById(int id, Map map) {
    return datamanager.findById(id, map);
}

public void updateEmployee(Employee employee, Map map) {
    datamanager.updateEmployee(employee, map);
}

public void updateEmpField(SingleField singleField,Map map)
{
    datamanager.updateEmpField(singleField,map);
}

}

这是我的服务

@Transactional
@Component
public class EmployeeDataManager extends HibernateUtil {
private HibernateUtil hbutil;

@Autowired
SessionFactory sessionFactory;


public void saveEmployee(final Employee employee, Map map) {
    hbutil = new HibernateUtil();
    hbutil.save(employee, map);
}

public List<Employee> findAllEmployees(Map map) {
    hbutil = new HibernateUtil();
    hbutil.test();
    return hbutil.getAll(Employee.class, map);
}

public void deleteEmployeeById(int id, Map map) {
    SessionFactory sessionFactory = (SessionFactory) map.get("sf");
    Employee employee = hbutil.get(Employee.class, id, map);
    hbutil.setSessionFactory(sessionFactory);
    hbutil.delete(employee, map);
}

public Employee findById(int id, Map map) {
    hbutil = new HibernateUtil();
    Employee employee = hbutil.get(Employee.class, id, map);
    return employee;
}

public void updateEmployee(Employee employee, Map map) {
    hbutil = new HibernateUtil();
    Employee e1 = hbutil.get(Employee.class, employee.getEmpid(), map);
    e1.setEmpname(employee.getEmpname());
    e1.setDesgid(employee.getDesgid());
    e1.setEmail(employee.getEmail());
    e1.setEmpcode(employee.getEmpcode());
    e1.setMobile(employee.getMobile());
    e1.setPhone(employee.getPhone());
    //  e1.setEmail(employee.getEmail());
    hbutil.saveOrUpdate(e1);
}

}

这是我的数据管理员

@Transactional
@Component
public class HibernateUtil {

@Autowired
private SessionFactory sessionFactory;



public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

public <T> T save(final T o, Map map) {
    sessionFactory = (SessionFactory) map.get("sf");
    return (T) sessionFactory.getCurrentSession().save(o);
}

public void delete(final Object object, Map map) {
    sessionFactory = (SessionFactory) map.get("sf");
    sessionFactory.getCurrentSession().delete(object);
}

/**
 *
 * @param <T>
 * @param type
 * @param id
 * @param map
 * @return
 */
public <T> T get(final Class<T> type, final int id, Map map) {
    sessionFactory = (SessionFactory) map.get("sf");
    return (T) sessionFactory.getCurrentSession().get(type, id);
}


public <T> T merge(final T o) {
    return (T) sessionFactory.getCurrentSession().merge(o);
}
/**
 *
 *
 * @param <T>
 * @param o
 */
public <T> void saveOrUpdate(final T o) {
    sessionFactory.getCurrentSession().saveOrUpdate(o);
}

public <T> List<T> getAll(final Class<T> type, Map map) {
    sessionFactory = (SessionFactory) map.get("sf");
    final Session session = sessionFactory.getCurrentSession();
    final Criteria crit = session.createCriteria(type);
    return crit.list();
}

public <T> void updateSingleField(final Class<T> type, SingleField singleField, Map map) {
    sessionFactory = (SessionFactory) map.get("sf");
    final Session session = sessionFactory.getCurrentSession();
    Query query = session.createQuery("update " + type.getSimpleName() + " set " + singleField.getColName() + "=:newValue where id=:id");
    query.setParameter("newValue", singleField.getNewValue());
    query.setParameter("id", singleField.getId());
    int result = query.executeUpdate();
}

public void test() {
    System.out.println("dfdfds   " + sessionFactory);
    throw new UnsupportedOperationException("Not supported yet."); 
}
}

这是我的hibernateUtil类

我在控制器上获取了sessionfactory对象,但没有在我的datamanager和hibernate util中获取它,所以我必须使用map

我对春天来说是全新的,所以请帮我解决这个问题我错了如果你想要任何其他细节让我知道

提前致谢

1 个答案:

答案 0 :(得分:0)

要获取具有自动装配字段的bean,您必须从applicationcontext获取它,例如自动装配它。使用&#34; new Myobject()&#34;

为自己创建的对象注入bean不是那么神奇