springmvc / hibernate中的空指针异常

时间:2019-12-16 13:59:37

标签: java spring hibernate jsp

在Web开发方面,我是Java的新手。我在这里找到了俄语的教学课程:https://javarush.ru/groups/posts/2251-znakomstvo-s-maven-spring-mysql-hibernate-i-pervoe-crud-prilozhenie-chastjh-3 这是我到目前为止所得到的。 pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>

http://maven.apache.org/xsd/maven-4.0.0.xsd“>     4.0.0

<groupId>employees</groupId>
<artifactId>EmployeesMaven</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>6</source>
                <target>6</target>
            </configuration>
        </plugin>
    </plugins>
</build>
<packaging>war</packaging>


<dependencies>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.11</version>
    </dependency>


    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>5.1.1.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.4.2.Final</version>

    </dependency>

    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-dbcp</artifactId>
        <version>9.0.10</version>
    </dependency>

<repositories>
    <repository>
        <id>jboss</id>
        <name>JBoss repository</name>
        <url>http://repository.jboss.org/maven2</url>
    </repository>
</repositories>

WebConfig:

    package employees.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "employees")
public class WebConfig {

    @Bean
    ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/pages/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

Hibernateconfig:

 package employees.config;
import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;
import  org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
//import org.apache.tomcat.dbcp.dbcp2;
import javax.sql.DataSource;
import java.util.Properties;
@Configuration
@ComponentScan(basePackages = "employees")
@EnableTransactionManagement
@PropertySource(value = "classpath:db.properties")
public class HibernateConfig {
    private Environment environment;
    @Autowired
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }

    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
        properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
        return properties;
    }

    @Bean
    public DataSource dataSource() {

        //DriverManagerDataSource dataSource = new DriverManagerDataSource();
        BasicDataSource dataSource = new BasicDataSource();

        dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
        dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
        dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
        dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
        return dataSource;
    }

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan("employees.model");
        sessionFactory.setHibernateProperties(hibernateProperties());
        return sessionFactory;
    }

    @Bean
    public HibernateTransactionManager transactionManager() {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory().getObject());
        return transactionManager;
    }
}

初始化:

package employees.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {

       //return new Class[0];
        return new Class[]{HibernateConfig.class};

    }



    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

}
在/ resources目录中的

db.properties

jdbc.driverClassName = com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/employeebase?serverTimezone=Europe/Minsk&useSSL=false
jdbc.username=mysql
jdbc.password=mysql

hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
hibernate.show_sql=true

我的模型如下:

package employees.model;
import javax.persistence.*;
@Entity
@Table(name = "departments")
public class Department {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(name = "name")

private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override

    public String toString() {
        return "Department{" +
                "id=" + id +
                ", name='" + name + '\'' +

                '}';
    }
}

然后我在这里声明了一个DAO接口:

package employees.dao;
import employees.model.Department;
import employees.model.Department;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
public interface DepartmentDAO {

    List<Department> allDepartments();
    void add(Department department);
    void delete(Department department);
    void edit(Department department);
    Department getById(int id);
}

它的实现是这样的:

package employees.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import employees.model.Department;

import  java.util.List;
@Repository
public class DepartmentDaoImp implements DepartmentDAO {
    private SessionFactory sessionFactory;

    @Autowired


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

    @Override
    @SuppressWarnings("unchecked")

    public List<Department> allDepartments() {
        Session session = sessionFactory.getCurrentSession();
        return session.createQuery("from Department ").list();

    }
    @Override
    public void add(Department department) {
        Session session = sessionFactory.getCurrentSession();
        session.persist(department);
    }

    @Override
    public void delete(Department department) {

         Session session = sessionFactory.getCurrentSession();
        session.delete(department);
    }
    @Override
    public void edit(Department department) {
        Session session = sessionFactory.getCurrentSession();
        session.update(department);
    }

    @Override
    public Department getById(int id) {
        Session session = sessionFactory.getCurrentSession();
        return session.get(Department.class, id);
    }
}

我也使用了一种服务,它的界面在这里:

package employees.service;
import employees.model.Department;
import java.util.List;
public interface DepartmentService {
    List<Department> allDepartments();
    void add(Department department);
    void delete(Department department);
    void edit(Department department);
     Department getById(int id);






}

实现:

package employees.service;
import  employees.dao.DepartmentDAO;
import employees.dao.DepartmentDaoImp;
import employees.model.Department;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
public class DepartmentServiceImpl implements DepartmentService {
   @Autowired
    private DepartmentDAO departmentDAO = new DepartmentDaoImp();



@Override
    @Transactional
public List<Department> allDepartments() {
        return departmentDAO.allDepartments();
    }

@Override
   @Transactional
    public void add(Department department) {
        departmentDAO.add(department);
    }

   @Override
    @Transactional
    public void delete(Department department) {
        departmentDAO.delete(department);
    }
    @Override
   @Transactional
    public void edit(Department department) {
        departmentDAO.edit(department);
    }
    @Override
    @Transactional
    public Department getById(int id) {
        return departmentDAO.getById(id);
    }
}

这是我的控制器:

package employees.service;
import  employees.dao.DepartmentDAO;
import employees.dao.DepartmentDaoImp;
import employees.model.Department;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
public class DepartmentServiceImpl implements DepartmentService {
   @Autowired
    private DepartmentDAO departmentDAO = new DepartmentDaoImp();



@Override
    @Transactional
public List<Department> allDepartments() {
        return departmentDAO.allDepartments();
    }

@Override
   @Transactional
    public void add(Department department) {
        departmentDAO.add(department);
    }

   @Override
    @Transactional
    public void delete(Department department) {
        departmentDAO.delete(department);
    }
    @Override
   @Transactional
    public void edit(Department department) {
        departmentDAO.edit(department);
    }
    @Override
    @Transactional
    public Department getById(int id) {
        return departmentDAO.getById(id);
    }
}

但是随后我运行该项目时,出现以下异常:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1013)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

java.lang.NullPointerException
    employees.dao.DepartmentDaoImp.allDepartments(DepartmentDaoImp.java:24)
    employees.service.DepartmentServiceImpl.allDepartments(DepartmentServiceImpl.java:18)
    employees.controllers.EmployeesController.allEmployees(EmployeesController.java:24)

请帮助...我不知道为什么会这样,该怎么办...

0 个答案:

没有答案
相关问题