1-SpringData-搭建環境,入門

以下內容轉載於

http://www.cnblogs.com/fzng/tag/SpringData/

在此權作爲筆記

SpringDate簡介

Spring Data是什麼

Spring Data是一個用於簡化數據庫訪問,並支持雲服務的開源框架。其主要目標是使得對數據的訪問變得方便快捷

Spring Data JPA能幹什麼

可以極大的簡化JPA的寫法,可以在幾乎不用寫實現的情況下,實現對數據的訪問和操作。除了CRUD外,還包括如分頁、排序等一些常用的功能。

Spring Data JPA 有什麼

主要來看看Spring Data JPA提供的接口,也是Spring Data JPA的核心概念:
1:Repository:最頂層的接口,是一個空的接口,目的是爲了統一所有Repository的類型,且能讓組件掃描的時候自動識別。
2:CrudRepository :是Repository的子接口,提供CRUD的功能
3:PagingAndSortingRepository:是CrudRepository的子接口,添加分頁和排序的功能
4:JpaRepository:是PagingAndSortingRepository的子接口,增加了一些實用的功能,比如:批量操作等。
5:JpaSpecificationExecutor:用來做負責查詢的接口
6:Specification:是Spring Data JPA提供的一個查詢規範,要做複雜的查詢,只需圍繞這個規範來設置查詢條件即可

特徵

  • 強大的存儲庫和自定義對象映射抽象
  • 從存儲庫方法名稱中進行動態查詢導出
  • 實現域基類提供基本屬性
  • 支持透明審覈(創建,最後更改)
  • 集成自定義存儲庫代碼的可能性
  • Easy Spring通過JavaConfig和自定義XML命名空間進行集成
  • 與Spring MVC控制器進行高級集成

搭建SpringData開發環境

導入依賴

pom.xml文件

        <!--Mysql 驅動包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.6.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.2.9.Final</version>
        </dependency>

配置spring文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">


    <!--配置數據源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        <property name="url" value="jdbc:mysql:///springdata"/>
    </bean>

    <!--配置EntityManagerFactory-->
    <bean id = "entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="packagesToScan" value="com.wzw.springdata"/>

        <property name="jpaProperties">
            <props>
                <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>

    <!--3 配置事務管理器-->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

    <!--4 配置支持註解的事務-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!--5 配置spring data-->
    <jpa:repositories base-package="com.wzw.springdata" entity-manager-factory-ref="entityManagerFactory"/>

    <context:component-scan base-package="com.wzw.springdata"/>

</beans>

創建test類

public class SpringDataTest {

    private ApplicationContext ac = null;

    @Before
    public void setUp() {
        ac = new ClassPathXmlApplicationContext("application.xml");
        System.out.println("start");
    }

    /**
     * 拆卸
     */
    @After
    public void tearDown() {
        ac = null;
        System.out.println("tearDown");
    }

    @Test
    public void testEntityManagerFactory() {

    }
}

SpringData_Hello

創建實體類

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Employee {

    private Integer id;

    private String name;

    private Integer age;

    @GeneratedValue
    @Id
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(length = 20)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}

創建EmployeeRepository接口繼承Repository

import java.util.List;

import org.springframework.data.repository.Repository;
import com.wzw.springdata.model.Employee;

public interface EmployeeRepository extends Repository<Employee,Integer> {

    public Employee getEmployeeById(Integer id);
}

編寫測試方法

    @Test
    public void fun1() {
        System.out.println("1: " + er);
        Employee employee = er.getEmployeeById(1);
        System.out.println("2: " + employee);
    }

註解方式定義Repository接口


@RepositoryDefinition(domainClass = Employee.class, idClass = Integer.class)
public interface EmployeeRepository2 {

    Employee getEmployeeByName(String name);
}

Repository類的定義:

public interface Repository<T, ID extends Serializable> {

}
  • Repository是一個空接口,標記接口。沒有包含方法聲明的接口
  • 如果我們定義的接口EmployeeRepository extends Repository
  • 如果我們自己的接口沒有extends Repository,運行時會報錯:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springdata.repository.EmployeeRepository' available
發佈了44 篇原創文章 · 獲贊 42 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章