首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Spring + SpringMVC + Hibernate 全注解整合:配置類替代 XML 完整示例

     編輯:程式設計綜合問答

純注解整合三大框架,核心配置類三件套:

1. 數據源與 SessionFactory

@Configuration
@PropertySource("classpath:jdbc.properties")
public class DataConfig {
    @Autowired Environment env;
    
    @Bean
    public DataSource dataSource() {
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl(env.getProperty("jdbc.url"));
        ds.setUsername(env.getProperty("jdbc.user"));
        ds.setPassword(env.getProperty("jdbc.pass"));
        return ds;
    }
    
    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sf = new LocalSessionFactoryBean();
        sf.setDataSource(dataSource());
        sf.setPackagesToScan("com.example.entity");
        sf.setHibernateProperties(hibernateProps());
        return sf;
    }
    
    private Properties hibernateProps() {
        Properties p = new Properties();
        p.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
        p.put("hibernate.show_sql", "true");
        p.put("hibernate.hbm2ddl.auto", "update");
        return p;
    }
    
    @Bean
    public HibernateTransactionManager transactionManager() {
        return new HibernateTransactionManager(sessionFactory().getObject());
    }
}

2. SpringMVC 配置

@Configuration
@EnableWebMvc
@ComponentScan("com.example.controller")
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/views/", ".jsp");
    }
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/static/");
    }
}

3. 總裝配與初始化

@Configuration
@ComponentScan(basePackages = "com.example", excludeFilters = @Filter(Controller.class))
@Import({DataConfig.class, WebConfig.class})
public class RootConfig {}

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override protected Class[] getRootConfigClasses() { return new Class[]{RootConfig.class}; }
    @Override protected Class[] getServletConfigClasses() { return new Class[]{WebConfig.class}; }
    @Override protected String[] getServletMappings() { return new String[]{"/"}; }
}

實體與 Repository

@Entity @Table(name="user")
public class User {
    @Id @GeneratedValue(strategy=IDENTITY) Long id;
    @Column(nullable=false, unique=true) String username;
    // getter/setter
}

public interface UserRepository {
    User findByUsername(String username);
    void save(User user);
}

關鍵依賴

<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.4.x</version></dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId></dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId></dependency>
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId></dependency>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved