SpringData

Posted xuweiweiwoaini

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringData相关的知识,希望对你有一定的参考价值。

1 SpringData的概述

  • SpringData是Spring的一个子项目。用于简化数据库访问,支持NOSQL和关系数据存储。其主要的目标是使数据库的访问变得方便简单。
  • SpringData项目所支持NOSQL存储:
    • MongoDB
    • Neo4j
    • Redis
    • HBASE  
  • SpringData项目所支持的关系数据存储技术:
    • JDBC
    • JPA  

 

2 JPA SpringData概述

  • JPA SpringData:致力于减少数据库访问层的开发量。开发者唯一要做的就是声明持久层的接口,其他都交给Spring Data JPA来帮你完成!
  • 框架是如何来代替开发者实现业务逻辑?
    • SpringData JPA就是通过规范方法的名字,来确定需要实现那些功能。  

 

3 JPA SpringData入门

3.1 使用SpringData JPA进行持久层开发需要的4个步骤

  • 配置Spring整合JPA
  • 在Spring配置文件中配置SpringData
  • 声明持久化层的接口。该接口继承Repository
  • 在接口中声明需要的方法

3.2 入门

3.2.1 引入db.properties

jdbc.user=root
jdbc.password=123456
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///jpa

3.2.2 引入applicationContext.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.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/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">

    <!-- 配置自动扫描的包 -->
    <context:component-scan base-package="com.xuweiwei"></context:component-scan>

    <!-- 配置 C3P0 数据源 -->
    <context:property-placeholder location="classpath:db.properties"/>

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        <!-- 配置其他属性 -->
    </bean>

    <!-- 配置 EntityManagerFactory -->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!-- 配置 JPA 提供商的适配器. 可以通过内部 bean 的方式来配置 -->
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
        </property>
        <!-- 配置实体类所在的包 -->
        <property name="packagesToScan" value="com.xuweiwei.model"></property>
        <!-- 配置 JPA 的基本属性. 例如 JPA 实现产品的属性 -->
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>

    <!-- 配置 JPA 使用的事务管理器 -->
    <bean id="transactionManager"
          class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"></property>
    </bean>

    <!-- 配置支持基于注解是事务配置 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!--配置SpringData-->
    <jpa:repositories base-package="com.xuweiwei"
                      entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>

</beans>
View Code

3.2.3 新建model

  • 示例:Person.java
技术图片
package com.xuweiwei.model;

import javax.persistence.*;
import java.io.Serializable;

/**
 * @describe:
 * @author: 不为往事扰,余生只爱笑。
 * @version: 1.0
 */
@Entity
@Table(name = "person")
public class Person implements Serializable {
    private Integer id;
    private String lastName;
    private Integer age;
    private String gender;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Integer getId() {
        return id;
    }

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

    @Column(name = "last_name")
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getAge() {
        return age;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", lastName=‘" + lastName + ‘‘‘ +
                ", age=" + age +
                ", gender=‘" + gender + ‘‘‘ +
                ‘}‘;
    }
}
View Code

3.2.4 新建dao

  • 示例:IPersonDao.java
技术图片
package com.xuweiwei.dao;

import com.xuweiwei.model.Person;
import org.springframework.data.repository.Repository;

/**
 * @describe:
 * @author: 不为往事扰,余生只爱笑。
 * @version: 1.0
 */
public interface IPersonDao extends Repository<Person, Integer> {
    /**
     * 根据主键获取对应的人员信息
     *
     * @param id
     * @return
     */
    Person findById(Integer id);
}
View Code

3.2.5 测试

  • 示例:
技术图片
package com.xuweiwei;

import com.xuweiwei.model.Person;
import com.xuweiwei.dao.IPersonDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * @describe:
 * @author: 不为往事扰,余生只爱笑。
 * @version: 1.0
 */
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class SpringDataTest {

    @Autowired
    private IPersonDao personDao;

    @Test
    public void test() {
        Person person = personDao.findById(1);
        System.out.println(person);
    }

}
View Code

 

以上是关于SpringData的主要内容,如果未能解决你的问题,请参考以下文章

ES集成SpringData

SpringData 基于SpringBoot快速入门

Springdata中嵌套删除某个字段

SpringData_PagingAndSortingRepository接口

使用Maven开发一个简单的SpringData

SpringDataJAP:黑马 SpringData JPA 学习笔记