初探 spring data (二) ------ 配置概述
Spring data 跟 其它 Spring Framework 不同的地方是 Spring data 是真正的 "面向接口" 。 也就是说在框架里面,用户不需要关心什么接口的实现,这就使其配置不同如一般组件。一般 Spring 会利用 name 和 type ,或通过用户配置的方法对用户的 interface 进行注入,而且用户必须要自己写实现,spring 通过xml配置或者扫描的方式进行对接口实现注入。而且Spring data 不同在于它不归入原有的组件管理体系里,它是一个接口定义实现 的框架。所以我们配置的时候只需要配置 数据源,数据解释语言,数据访问接口扫描就可以了。随着开发效率的要求,约定大于配置是必须的。Spring-data 最重要的就是数据源的配置。以下是spring data jpa 的配置
import javax.sql.DataSource; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.Database; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import com.alibaba.druid.pool.DruidDataSource; @Configuration @PropertySource("classpath:spring-jpa.properties") //导入属性 @EnableJpaRepositories(basePackages={"org.myproject.persistence.jpa.repository"})//查询仓库接口所在位置 public class JPAConfig implements EnvironmentAware { private Environment env; /** * 数据源配置 * @return */ @Bean(destroyMethod = "close",initMethod="init") public DataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(env.getProperty("jdbc.url.keywordCrawlDb")); datasource.setUsername(env.getProperty("jdbc.username.myproject")); datasource.setPassword(env.getProperty("jdbc.password.myproject")); // datasource.setMaxActive(Integer.valueOf(env.getProperty("maxactive"))); // datasource.setMinIdle(Integer.valueOf(env.getProperty("minIdle"))); // datasource.setTimeBetweenEvictionRunsMillis(Long.valueOf("timeBetweenEvictionRunsMillis")); // datasource.setValidationQuery("validationQuery"); return datasource; } /** * 使用hibernate翻译器管理实体 * @return */ @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory(){ LocalContainerEntityManagerFactoryBean lemfb = new LocalContainerEntityManagerFactoryBean(); HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter(); jpaVendorAdapter.setDatabase(Database.valueOf(env.getProperty("jpa.database"))); jpaVendorAdapter.setGenerateDdl(Boolean.valueOf(env.getProperty("jpa.generateDdl"))); jpaVendorAdapter.setShowSql(Boolean.valueOf(env.getProperty("jpa.showSql"))); lemfb.setDataSource(dataSource()); lemfb.setJpaVendorAdapter(jpaVendorAdapter); lemfb.setPackagesToScan("org.keywordimagine.persistence.jpa.model");//设定实体对象所在的包 return lemfb; } /** * 使用事务管理器管理实体 * @return */ @Bean public PlatformTransactionManager transactionManager() { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); return transactionManager; } public void setEnvironment(Environment arg0) { env = arg0; } }
实体配置跟普通jpa 一样
package org.keywordimagine.persistence.jpa.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="user") public class User { private Integer id; private String username; private String password; /** * @return the id */ @Id @GeneratedValue(strategy = GenerationType.AUTO) public Integer getId() { return id; } /** * @param id the id to set */ public void setId(Integer id) { this.id = id; } /** * @return the username */ public String getUsername() { return username; } /** * @param username the username to set */ public void setUsername(String username) { this.username = username; } /** * @return the password */ public String getPassword() { return password; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } }

浙公网安备 33010602011771号