导入依赖
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&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&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>{
}