Spring JPA环境搭建

导入依赖

spring核心依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

spring web依赖(Controller层)

<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

<!-- spring mvc 即Controller层所需依赖 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

JPA所需依赖(DAO层)

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<!-- hibernate的接口管理 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.4.10.Final</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>

mysql连接依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>

提供事务支持 transaction

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

spring测试依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.3.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

添加配置文件

在resource目录下创建 META-INF文件夹,然后创建 persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       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.3.xsd

        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <!--1:配置数据源-->
    <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://localhost:3306/spring_test?createDatabaseIfNotExist=true&amp;serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false"/>
    </bean>

    <!-- spring Jpa 配置-->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <!-- 数据库配置 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 扫描实体类对应的包 -->
        <property name="packagesToScan" value="com.test.domain"/>
        <!-- JPA的框架支持者是谁,这里选择hibernate-->
        <property name="persistenceProvider" >
            <bean class="org.hibernate.jpa.HibernatePersistenceProvider"/>
        </property>

        <!-- JPA供应商适配器 -->
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <!--是否根据实体类生成表-->
                <property name="generateDdl" value="true"/>
                <!-- 使用什么数据库 -->
                <property name="database" value="MYSQL"/>
                <!-- 数据库语言(方言) -->
                <property name="databasePlatform" value="org.hibernate.dialect.MySQL8Dialect"/>
                <!-- 是否在控制台打印数据库语句 -->
                <property name="showSql" value="true"/>

            </bean>
        </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 扫描dao层下的包-->
    <jpa:repositories base-package="com.test.dao" entity-manager-factory-ref="entityManagerFactory"/>

    <!-- 提供注解支持 -->
    <context:component-scan base-package="com.test"/>
</beans>

编写domain实体类

Custom实体类

package com.test.domain;


import javax.persistence.*;
import java.util.Set;


@Entity
@Table(name = "t_custom")
public class Custom {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "t_id")
    private Integer id;
    @Column(name = "t_name")
    private String name;

    @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL)
    private Set<LinkMan> linkMEN;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public Set<LinkMan> getLinkMEN() {
        return linkMEN;
    }

    public void setLinkMEN(Set<LinkMan> linkMEN) {
        this.linkMEN = linkMEN;
    }
}

@Entity : 注明当前类为实体类

@Table:name属性注明当前实体类映射的表名

​ (例如:@Table(name = “t_test”),对应数据库的表名为t_test,效果等同于Entity(name = “t_test”)

@Id: 注明当前属性为表中的主键

@GeneratedValue(strategy = GenerationType.IDENTITY): 注明自增方式为mysql数据库的自增方式

@Column(name = “t_id”) :注明当前属性在表中对应字段的名称

@OneToMany:一对多

​ mappedBy:当前实体类放弃多的一方的维护权,值为多的一方的实体类属性名称

​ cascade = CascadeType.ALL: 级联操作

LinkMan实体类

@Entity
@Table(name = "t_link")
public class LinkMan {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "lik_id")
    private Integer id;
    @Column(name = "lik_name")
    private String name;

    @ManyToOne (targetEntity = Custom.class, cascade = CascadeType.ALL)
    @JoinColumn(name = "lik_custom_id", referencedColumnName = "t_id")
    private Custom customer;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public Custom getCustomer() {
        return customer;
    }

    public void setCustomer(Custom customer) {
        this.customer = customer;
    }
}

@ManyToOne : 多对一

​ targetEntity = Custom.class: 级联的目标实体类

@JoinColumn:在当前实体类映射的表中添加级联字段

​ name:级联字段的名称

​ referencedColumnName:级联目标实体类在表中的字段名称

编写dao层

CustomRepository

public interface CustomRepository extends JpaRepository<Custom, Integer>, JpaSpecificationExecutor<Custom> {
}

分别继承两个接口 JpaRepository<T, ID>,JpaSpecificationExecutor

T:实体类类型

ID:实体类对应Id的类型

LinkManRepository

public interface LinkManRepository extends JpaRepository<LinkMan, Integer>,JpaSpecificationExecutor<LinkMan>{
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值