当前位置: 首页 > 知识库问答 >
问题:

Spring-Boot/Thymeleaf/Hibernate:sessionfactorybean和Java注释

魏臻
2023-03-14

我使用Thymeleaf和Hibernate使用IntelliJ创建了一个Spring Boot Web应用程序。我已经走了这么远,我可以创建所有db连接,并且运行良好。据我所见,将SessionFactory作为bean并在所有执行db操作的服务类中自动连接它是一种很好的方法。

我有一个SpringMvcConfiguration作为配置文件,如下所示:

package eu.barz.familykurse.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import java.util.Locale;


@Configuration
public class SpringMvcConfiguration extends WebMvcConfigurerAdapter{
    @Bean
    public LocaleResolver localeResolver(){
        SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
        sessionLocaleResolver.setDefaultLocale(Locale.GERMAN);
        return sessionLocaleResolver;
    }

    @Bean
    LocaleChangeInterceptor localeChangeInterceptor(){
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("lang");
        return  localeChangeInterceptor;
    }

    @Override
    public void addInterceptors(InterceptorRegistry interceptorRegistry){
        interceptorRegistry.addInterceptor(localeChangeInterceptor());
    }
}

问题:我已经尝试了很多,但我找不到为SessionFactory声明bean的解决方案。

任何提示都会非常有用。我应该在这里声明sessionfactory和数据源还是必须在应用程序中声明。属性或仅在hibernate.cfg中。当前看起来像这样的xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">jdbc:mysql://localhost:3306/family_kurse</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.username">username</property>
        <property name="connection.password">secret</property>

        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="show_sql">true</property>
        <mapping class="eu.barz.familykurse.domain.Leader"/>
        <mapping class="eu.barz.familykurse.domain.Course"/>

        <!-- DB schema will be updated if needed -->
        <!-- <property name="hbm2ddl.auto">update</property> -->
    </session-factory>
</hibernate-configuration>

干杯Maik

解决方案:

>

  • 我需要添加下面提到的豆子

    我不得不补充

    org.springframework spring orm 4.3.10.RELEASE to my pom.xml

    在@SpringBootApplication之后,我不得不添加

    @EnableAutoConfiguration(exclude={hibernatejbaautoconfiguration.class})

  • 共有3个答案

    何长恨
    2023-03-14

    你试过这个吗?

    @Bean
    public org.springframework.orm.hibernate5.LocalSessionFactoryBean sessionFactory(){
        org.springframework.orm.hibernate5.LocalSessionFactoryBean sessionFactory = new org.springframework.orm.hibernate5.LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        return sessionFactory;
    }
    @Bean
    public DataSource dataSource() {
    
      BasicDataSource dataSource = new BasicDataSource();
      dataSource.setDriverClassName("jdbc.driverClassName");
      dataSource.setUrl("jdbc.url");
      dataSource.setUsername("jdbc.user");
      dataSource.setPassword("jdbc.pass");
    
      return dataSource;
    }
    
    相威
    2023-03-14

    我从这里举了这个例子。

    @Bean
       public LocalSessionFactoryBean sessionFactory() {
          LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
          sessionFactory.setDataSource(restDataSource());
          sessionFactory.setPackagesToScan(
            new String[] { "org.baeldung.spring.persistence.model" });
          sessionFactory.setHibernateProperties(hibernateProperties());
    
          return sessionFactory;
       }
    
       @Bean
       public DataSource restDataSource() {
          BasicDataSource dataSource = new BasicDataSource();
          dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
          dataSource.setUrl(env.getProperty("jdbc.url"));
          dataSource.setUsername(env.getProperty("jdbc.user"));
          dataSource.setPassword(env.getProperty("jdbc.pass"));
    
          return dataSource;
       }
    
    欧阳俊晖
    2023-03-14

    由于您使用的是spring boot,您应该使用无XML配置进行数据库配置。要将spring boot与hibernate集成,您需要创建如下bean:LocalSessionFactoryBean、DataSource、HibernateTransactionManager和PersistenceExceptionTranslationPostProcessor

    @Configuration
    public class DatabaseConfig {
    
        @Bean
        public LocalSessionFactoryBean sessionFactory() {
            LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
            sessionFactory.setDataSource(dataSource());
            sessionFactory.setPackagesToScan("com.example.model");
            sessionFactory.setHibernateProperties(hibernateProperties());
    
            return sessionFactory;
        }
    
        @Bean
        public DataSource dataSource() {
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("org.postgresql.Driver");
            dataSource.setUrl("jdbc:postgresql://localhost:5432/testdb");
            dataSource.setUsername("root");
            dataSource.setPassword("root");
    
            return dataSource;
        }
    
        @Bean
        @Autowired
        public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
    
            HibernateTransactionManager txManager = new HibernateTransactionManager();
            txManager.setSessionFactory(sessionFactory);
    
            return txManager;
        }
    
        @Bean
        public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
            return new PersistenceExceptionTranslationPostProcessor();
        }
    
        Properties hibernateProperties() {
            Properties properties = new Properties();
            properties.setProperty("hibernate.ddl-auto", "update");
            properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
            return properties;
        }
    }
    

    在上面的数据库配置中,我使用了postgreSQL数据库。

    要获取sesionFactory autowireSessionFactory接口的实例,如下所示:

     @Autowired
     SessionFactory sessionFactory;
    
     类似资料:
    • 我正在使用Spring Boot 2.1.5。RELEASE和wnat使用Thymeleaf生成json模板文件。 下面是我目前拥有的1个文件的示例 我现在想把条件逻辑放入这个文件。这可能与thymeleaf或有其他模板技术,我应该看看? 谢谢你Damien

    • 它的工作方式如下: 但是,我应该用这种方式添加静态资源下的所有文件夹吗?我好像错过了什么。

    • Spring Boot 推荐使用 Thymeleaf 作为其模板引擎。SpringBoot 为 Thymeleaf 提供了一系列默认配置,项目中一但导入了 Thymeleaf 的依赖,相对应的自动配置 (ThymeleafAutoConfiguration) 就会自动生效,因此 Thymeleaf 可以与 Spring Boot 完美整合 。 Spring Boot 整合 Thymeleaf 模板

    • Thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎。 thymeleaf 介绍 简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点: 1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静

    • 我有一个应用程序,这是Spring书签教程的简化版本。在其中,控制器被注释为,并且应用程序只返回JSON。 我增加了通过Thymeleaf模板返回HTML的功能。我的模板正在返回,但它们似乎没有被Thymeleaf处理。我使用的是spring boot,我的文件,但这似乎还不够。 例如,下面是根目录的一个简单控制器: 和: 结果呈现以下页面: 我发现的例子表明,这是我需要做的全部,但它不起作用。我

    • 我有一个已经存在的带有apache瓦片和thymeleaf的客户端模块,运行良好。我想将其转换为Spring-boot,并想一步一步地完成,但我真的被它卡住了。我不想改变太多一次,我希望有人能告诉我,我应该先做哪一步并让它运行。我已经尝试在javaConfig中编写servlet,但我也卡住了。也许有人可以帮助我。如果需要更多信息,请不要犹豫,问。 其他问题是,我需要从xml更改为javaconf