1. 程式人生 > >Spring-data-Jpa項目搭建

Spring-data-Jpa項目搭建

tex show pla adapter format manage strategy print table

傳送門:Spring Data 學習 Spring Data 開發環境搭建

簡介

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控制器進行高級集成
  • 跨店存儲的實驗支持

搭建過程

1.配置xml

<?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-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd"
default-lazy-init="true"> <description>Spring公共配置</description> <!--數據庫連接--> <context:property-placeholder location="classpath:/config/jdbc.properties"/> <!--掃描service包--> <context:component-scan base-package="com.wang.service"/> <!-- Jpa Entity Manager 配置 --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/> <property name="packagesToScan" value="com.wang.entity"/> <property name="jpaProperties"> <props> <!-- 命名規則 My_NAME->MyName --> <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> <property name="jpaDialect"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/> </property> </bean> <bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> <!-- Spring Data Jpa配置 --> <jpa:repositories base-package="com.wang.reposity" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/> <!-- Jpa 事務配置 --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <!-- 使用annotation定義事務 --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 數據源配置, 使用Tomcat JDBC連接池 --> <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- Connection Pooling Info --> <property name="maxActive" value="${jdbc.pool.maxActive}"/> <property name="maxIdle" value="${jdbc.pool.maxIdle}"/> <property name="minIdle" value="0"/> <property name="defaultAutoCommit" value="true"/> </bean> </beans>

2.創建一個實體類

package com.wang.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;

@Entity
@Table(name="jpa_persons")
public class Person {
    private Integer id;
    private String lastName;
    private String email;
    private Date birth;

    public Person(){}

    @GeneratedValue  // 按照數據庫默認的方式進行自增
    @Id
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public Date getBirth() {
        return birth;
    }
    public void setBirth(Date birth) {
        this.birth = birth;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", lastName=‘" + lastName + ‘\‘‘ +
                ", email=‘" + email + ‘\‘‘ +
                ", birth=" + birth +
                ‘}‘;
    }
}

  

3.編寫Reposity接口類

package com.wang.reposity;

import com.wang.entity.Person;
import org.springframework.data.repository.Repository;

/**
 * 操作person類的接口
 * 需要繼承自Repository
 * 參1: 代表當前操作的實體類
 * 參2: 代表實體類的主鍵類型
 * @author dell
 *
 *Repository是springdata的核心接口,這個接口的實現規定了spring data操作數據庫的規範--命名規範
 *查詢是以get或者是find或者是read開頭
 */
public interface PersonRepository extends Repository<Person, Integer> {
    Person getByLastName(String lastName);
}

  

4.測試

package com.wang.reposity;

import com.wang.entity.Person;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSpringData {

    private ApplicationContext context;
    private PersonRepository personRepository;

    @org.junit.Before  //該註解含義在執行@Test註解之前先執行這個代碼
    public void Before(){
        context=new ClassPathXmlApplicationContext("/spring/spring-context.xml");
        personRepository=context.getBean(PersonRepository.class);
        System.out.println("測試前");
    }

    @Test
    public void testHellord(){
        Person person = personRepository.getByLastName("wang");
        System.out.println(person);

    }

}

  

Spring-data-Jpa項目搭建