Spring,Hibernate,Maven项目(与前端链接后端项目)

时间:2018-04-09 13:38:54

标签: java spring hibernate maven

我尝试将后端项目 myonlinebackend 与前端 myonlineshopping 相关联,并且在添加"私有SessionFactory sessionFactory之前工作正常;"到CategoryDAOImpl.java。但在声明sessionFactory变量之后,我在下面得到了这个错误。

这是我的课程:

Category.java

package src.main.java.myshoppingbackend.dto;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Category{

    /*
     * Private fields
     * */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String name;

    private String description;

    @Column(name = "image_url")
    private String imageURL;

    @Column(name = "is_active")
    private boolean active = true;

    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;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getImageURL() {
        return imageURL;
    }

    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }

    public boolean isActive() {
        return active;
    }

    public void setActive(boolean active) {
        this.active = active;
    }


    @Override
    public String toString() {
        return "Category [id=" + id + ", name=" + name + ", description=" + description + ", imageURL=" + imageURL
                + ", active=" + active + "]";
    }

}

CategoryDAOImpl.java

package src.main.java.myshoppingbackend.daoimpl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import src.main.java.myshoppingbackend.dao.CategoryDAO;
import src.main.java.myshoppingbackend.dto.Category;

@Repository("categoryDAO")
public class CategoryDAOImpl  implements CategoryDAO {

    @Autowired
    private SessionFactory sessionFactory;

    private static List<Category> categories = new ArrayList<>();

    static {
        Category item = new Category();
        item.setId(1);
        item.setDescription("Des 1");
        item.setImageURL("TV.jpg");
        item.setName("TV1");
        item.setActive(true);
            categories.add(item);

        item = new Category();  
            item.setId(2);
            item.setDescription("Des 21");
            item.setImageURL("mobile.jpg");
            item.setName("mobile1");
            item.setActive(true);
            categories.add(item);
    }

    @Override
    public List<Category> list() {
        return categories;
    }

    @Override
    public Category get(int id) {

        for (Category category : categories) {
            if (category.getId() == id) {
                return category;
            }
        }
        return null;
    }

    @Override
    @Transactional
    public boolean add(Category category) {

        try {
            // add the category to the database table
            sessionFactory.getCurrentSession().persist(category);
            return true;
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }

    }




}

PageController.java

package src.main.java.myonlineshopping.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import src.main.java.myshoppingbackend.dao.CategoryDAO;

@Controller
public class PageController {

    @Autowired
    private CategoryDAO categoryDAO;
    @RequestMapping(value = { "/", "/home", "/index" })
    public ModelAndView index() {
        ModelAndView mv = new ModelAndView("page");
        mv.addObject("title", "Home");
        mv.addObject("categories", categoryDAO.list());
        mv.addObject("userClickHome", true);
        return mv;
    }

    @RequestMapping(value = { "/about"})
    public ModelAndView about() {
        ModelAndView mv = new ModelAndView("page");
        mv.addObject("title", "About-Us");
        mv.addObject("userClickAbout", true);
        return mv;
    }

    @RequestMapping(value = { "/contact"})
    public ModelAndView contact() {
        ModelAndView mv = new ModelAndView("page");
        mv.addObject("title", "Contact-Us");
        mv.addObject("userClickContact", true);
        return mv;
    }

    @RequestMapping(value = { "/show/all/products"})
    public ModelAndView showProduct() {
        ModelAndView mv = new ModelAndView("page");
        mv.addObject("title", "Show-Product");
        mv.addObject("categories", categoryDAO.list());
        mv.addObject("userClickshowAllProducts", true);
        return mv;
    }

    @RequestMapping(value = { "/show/category/{id}/products"})
    public ModelAndView showCategoryProducts(@PathVariable("id") int id) {
        ModelAndView mv = new ModelAndView("page");
        mv.addObject("title", categoryDAO.get(id).getName());
        mv.addObject("categories", categoryDAO.list());
        mv.addObject("category", categoryDAO.get(id));
        mv.addObject("userClickshowCategoryProducts", true);
        return mv;
    }


      /*@RequestMapping(value ="/test") public ModelAndView
      test(@RequestParam(value="Greeting", required=false) String Greeting) { if
      (Greeting == null) { Greeting = "helloo"; } ModelAndView mv = new
      ModelAndView("page"); mv.addObject("Greeting", Greeting); return mv; }*/


    /*
     * @RequestMapping(value ="/test/{Greeting}") public ModelAndView
     * test(@PathVariable(value="Greeting") String Greeting) { if (Greeting == null)
     * { Greeting = "helloo"; } ModelAndView mv = new ModelAndView("page");
     * mv.addObject("Greeting", Greeting); return mv; }
     */
}

HibernateConfig.java

package src.main.java.myshoppingbackend.config;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSource;
import org.hibernate.SessionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBuilder;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@ComponentScan(basePackages="src.main.java.myshoppingbackend.dto")
@EnableTransactionManagement
public class HibernateConfig {

    // Change the below based on the DBMS you choose
    private final static String DATABASE_URL = "jdbc:h2:tcp://localhost/~/onlineshopping";
    private final static String DATABASE_DRIVER = "org.h2.Driver";
    private final static String DATABASE_DIALECT = "org.hibernate.dialect.H2Dialect";
    private final static String DATABASE_USERNAME = "sa";
    private final static String DATABASE_PASSWORD = "";

    // dataSource bean will be available
    @Bean
    public DataSource getDataSource() {

        BasicDataSource dataSource = new BasicDataSource();

        // Providing the database connection information
        dataSource.setDriverClassName(DATABASE_DRIVER);
        dataSource.setUrl(DATABASE_URL);
        dataSource.setUsername(DATABASE_USERNAME);
        dataSource.setPassword(DATABASE_PASSWORD);


        return dataSource;

    }

    // sessionFactory bean will be available

    @Bean
    public SessionFactory getSessionFactory(DataSource dataSource) {

        LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource);

        builder.addProperties(getHibernateProperties());
        builder.scanPackages("src.main.java.myshoppingbackend.dto");

        return builder.buildSessionFactory();

    }



    // All the hibernate properties will be returned in this method 
    private Properties getHibernateProperties() {

        Properties properties = new Properties();


        properties.put("hibernate.dialect", DATABASE_DIALECT);      
        properties.put("hibernate.show_sql", "true");
        properties.put("hibernate.format_sql", "true");

        //properties.put("hibernate.hbm2ddl.auto", "create");


        return properties;
    }

    // transactionManager bean
    @Bean
    public HibernateTransactionManager getTransactionManager(SessionFactory sessionFactory) {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager(sessionFactory);
        return transactionManager;
    }


}

pom.xml(用于前端项目)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>src.main.java</groupId>
    <artifactId>myonlineshopping</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>myonlineshopping Maven Webapp</name>
    <url>http://maven.apache.org</url>

<repositories>
    <repository>
    <id>com.springsource.repository.bundles.release</id>
    <name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases</name>
    <url>http://repository.springsource.com/maven/bundles/release</url>
</repository>
<repository>
    <id>com.springsource.repository.bundles.external</id>
    <name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
    <url>http://repository.springsource.com/maven/bundles/external</url>
</repository>
</repositories>
    <!-- Version information will be stored here -->
    <properties>
        <javaee.version>7.0</javaee.version>
        <spring.version>4.3.6.RELEASE</spring.version>
    </properties>

    <dependencies>
        <!-- link backend with frontEnd -->
        <dependency>
            <groupId>src.main.java</groupId>
            <artifactId>myshoppingbackend</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <!-- JUNIT -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <!-- SPRING -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- JSTL -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- JAVA EE -->
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>${javaee.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.9</source>
                    <target>1.9</target>
                </configuration>
            </plugin>
        </plugins>
        <finalName>myonlineshopping</finalName>

    </build>

</project>

pom.xml(后端)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>src.main.java</groupId>
  <artifactId>myshoppingbackend</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>myshoppingbackend</name>
  <url>http://maven.apache.org</url>


  <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.3.6.RELEASE</spring.version>
        <hibernate.version>5.2.7.Final</hibernate.version>
    </properties>

    <dependencies>

        <dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-core</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>

        <!-- JUNIT VERSION 4.12 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- SPRING -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- H2 Database -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.196</version>
        </dependency>

        <!-- Hibernate Dependency -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>


        <!-- Database Connection Pooling -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.1.1</version>
        </dependency>

    </dependencies>

    <build>
        <!-- Updated for the latest version of JAVA -->
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.9</source>
                    <target>1.9</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
  

使用name&#39; pageController创建bean时出错&#39;:不满意的依赖项   通过字段表达类别DAO&#39;;嵌套异常是   org.springframework.beans.factory.UnsatisfiedDependencyException:   创建名称为&#39; categoryDAO&#39;的bean时出错:不满意的依赖项   通过字段&#39; sessionFactory&#39;表达;嵌套异常是   org.springframework.beans.factory.NoSuchBeanDefinitionException:没有   属于&#39; org.hibernate.SessionFactory&#39;的限定bean可供选择:   预计至少有1个豆有资格成为autowire候选人。   依赖注释:   {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}

1 个答案:

答案 0 :(得分:0)

  • 将后端项目作为maven依赖项添加到前端项目
  • 您的frontedend projet中的
  • 将根应用程序上下文配置为指向HibernateConfig
  • 这是一个基于代码的web.xml方法的例子

    public class WebAppConfig extends 
    AbstractAnnotationConfigDispatcherServletInitializer {
    //Tell spring to use HibernateConfig as a root application context 
    where your business services are located
    protected Class<?>[] getRootConfigClasses() {
    return new Class[]{HibernateConfig.class};
    }
    
    //Tell spring to use MvcAppConfig as a dispatcher servlet context 
    where your controllers are located
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{MvcAppConfig.class};
    }
    
    // dispatcher servlet mapping
    protected String[] getServletMappings() {
        return new String[]{"/mvc/*"};
    }
    

    }

  • 这里是调度程序servlet上下文类

    的示例
    @Configuration
    @EnableWebMvc
    @ComponentScan("package where your controllers are located")
    public class MvcAppConfig {
    }