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

 

 

  

posted @ 2017-10-12 15:12  goldfish_coder  阅读(129)  评论(0)    收藏  举报