SpringMvc搭建Spring-Data-Jpa(简称:sssdj)

155 阅读2分钟

1、第一步还是创建简单的Maven的项目工程。

2、添加依赖pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zichen</groupId>
    <artifactId>sssdj</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <properties>
        <!--设置编译的版本使用1.8版本-->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>4.12</junit.version>
        <springdatajpa.version>1.11.6.RELEASE</springdatajpa.version>
        <hibernate.version>5.0.7.Final</hibernate.version>
        <mysql.version>5.1.32</mysql.version>
        <druid.version>1.0.9</druid.version>
        <spring.version>4.3.10.RELEASE</spring.version>
        <commons-lang3.version>3.3.2</commons-lang3.version>
    </properties>
    <dependencies>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- spring data jpa 数据库持久层 -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${springdatajpa.version}</version>
        </dependency>
        <!-- hibernate 框架 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <!-- MySql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!-- 连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.wenhao</groupId>
            <artifactId>jpa-spec</artifactId>
            <version>3.1.1</version>
            <!-- 把所有依赖都过滤 -->
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

3、在resources的下面创建application-dev.properties配置文件

在properties中的url是 /// 三根斜杠是默认是localhost/3306的意思.

#============================#
#==== Database settings ====#
#============================#

# MySQL 8.x: com.mysql.cj.jdbc.Driver
# mysql数据库的驱动
spring.datasource.DriverClassName=com.mysql.jdbc.Driver
# 数据库连接的路径
spring.datasource.url=jdbc:mysql:///test?useSSL=false&serverTimezone=Asia/Shanghai
# mysql用户名
spring.datasource.username=root
# mysql密码
spring.datasource.password=123456

4、在resources下面创建spring-config.xmlspring-data-jpa的配置文件

在mysql中一定要先建数据库test,表可以自动生成.




<?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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:application-dev.properties"/>

    <!--配置service扫描-->
    <context:component-scan base-package="com.zichen.service"/>

    <!--数据库连接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="driverClassName" value="${spring.datasource.DriverClassName}"/>
        <property name="url" value="${spring.datasource.url}"/>
        <property name="username" value="${spring.datasource.username}"/>
        <property name="password" value="${spring.datasource.password}"/>
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="60000"/>
    </bean>

    <!--jpa整合-->
    <bean id="entityManagerFactory"
          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!--待扫描的实体类包-->
        <property name="packagesToScan" value="com.zichen.domain" />

        <!--jpaVendorAdapter-->
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <!-- 自动建表 -->
                <property name="generateDdl" value="true" />
                <!--mysql-->
                <property name="database" value="MYSQL" />
                <!--原来方言-->
                <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
                <!--是否显示sql语句-->
                <property name="showSql" value="true" />
            </bean>
        </property>
    </bean>

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

    <!-- 开启事务注解 -->
    <tx:annotation-driven transaction-manager="transactionManager" />

    <!--Spring Data Jpa配置-->
    <!--指定Spring Data JPA要进行扫描的包,该包中的类框架会自动为其创建代理-->
    <jpa:repositories base-package="com.zichen.repository" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/>

</beans>

5、在com.zichen.domain创建实体Employee

package com.zichen.domain;

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

/**
 * @program: Employee
 * @description: 员工信息类
 * @author: hewo
 * @create: 2020-12-11 11:12
 **/
@Entity // 这个是springdatajpa中的注解
@Table(name="employee") //数据库中这个实体类的表的名称
public class Employee {
    @Id // 主键注解
    @GeneratedValue // 自增
    private Long id; // id
    private String username; // 用户名
    private String password; // 密码
    private String email; // 邮箱
    private Integer age; // 年龄

    // setter 和 getter toString方法省略........
}

6、在com.zichen.repository创建接口EmployeeRepository

package com.zichen.repository;

import com.zichen.domain.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

/**
 * 必需继续JpaRepository<1v,2v>
 *     1v:代表你要操作的是哪一个domain对象
 *     2v:这个domain对象的主键的类型
 */
public interface EmployeeRepository extends JpaRepository<Employee, Long>, JpaSpecificationExecutor<Employee> {

}

7、创建字test文件中创建com.zichen.repository测试类EmployeeRepositoryTest

执行一次数据库中的表就生成了,在到数据库中添加一条或者多条再次执行测试方法.

package com.zichen.repository;

import com.github.wenhao.jpa.Specifications;
import com.zichen.domain.Employee;
import com.zichen.query.EmployeeQuery;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.persistence.criteria.*;
import java.util.List;

/**
 * 测试test
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-config.xml") // xml的配置文件
public class EmployeeRepositoryTest {

	// 注入EmployeeRepository
    @Autowired
    private EmployeeRepository employeeRepository;

    // 获取所有数据
    @Test
    public void testFindAll() {
    	// 查询全部
        List<Employee> emps = employeeRepository.findAll();
        for (Employee emp :emps){
            System.out.println(emp);
        }
    }
}

8、还有web.xml哪里没有写.根整合ssm项目一样即可.

9、😀😀😀