純注解整合三大框架,核心配置類三件套:
@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());
}
}
@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/");
}
}
@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[]{"/"}; }
}
@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>