一、pom 配置
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.module.demo</groupId> <artifactId>module-parent</artifactId> <version>${module.version}</version> <relativePath>../../module-parent/pom.xml</relativePath> </parent> <artifactId>module-jpa-dao</artifactId> <name>module-jpa-dao</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> //引入JPA和数据库驱动 <dependency> <groupId>com.module.demo</groupId> <artifactId>module-dao-interface</artifactId> </dependency> </dependencies> </project>
二、Jpa Tool 将数据库表生成 实体对象
由于数据库表格较多,且实体对象编写需要在了解并深入学习了 jpa 实体对象方面的知识后,才能正确配置,这样给集成工作带来了很大的难度,基于此,为了减少集成成本,使用了 eclipse 中的 JPA tool 工具直接将 数据库表格映射成实体类。
1、eclipse 建立 Database Connection
(1)点击 eclipse 中的 window --> show view ---> other ---> Data Management --> Data Source Explorer 打开 数据库连接管理视图
(2)建立数据库连接
这里使用的是 mysql。
Data Source Explorer 出现该视图表示 数据库连接已经建立完毕。
(3) 为项目添加 JPA Tool
选择项目,右键 选择 properties
(4) 通过(3)给项目添加了 JPA Tool,此时通过 JPA TOOL 生成实体类
经过以上步骤, 在 com.module.demo.dap.jpa.entity 下面就生成了对应的实体类,如:
package com.module.demo.dao.jpa.entity; import java.io.Serializable; import javax.persistence.*; /** * The persistent class for the student database table. * */ @Entity @NamedQuery(name="Student.findAll", query="SELECT s FROM Student s") public class Student implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; private String name; //bi-directional many-to-one association to Timetable @ManyToOne @JoinColumn(name="timaeable") private Timetable timetable; public Student() { } public int getId() { return this.id; } public void setId(int id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Timetable getTimetable() { return this.timetable; } public void setTimetable(Timetable timetable) { this.timetable = timetable; } }
三、JPA配置
(1) 配置 dao 层(即配置数据库访问层的仓库)
package com.module.demo.dao.jpa.repository; import org.springframework.data.repository.PagingAndSortingRepository; import com.module.demo.dao.jpa.entity.Student; public interface StudentRepository extends PagingAndSortingRepository<Student, Integer> { //一定要继承 }
(2)经过以上配置,需要配置 jpa 实体类扫描和 仓库扫描
配置扫描的方式有两种,一种使用 JPA的注解;另一种使用通用注解 a) JPA的注解
package com.module.demo.dao; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @Configuration @PropertySource("classpath:jpa.properties") //JPA 个性化配置 @ComponentScan(basePackageClasses=JpaConfiguration.class) @EnableJpaRepositories //指明扫描的dao层,在这里没有配置具体的包,默认会在当前类所属包及其子包中进行扫描 @EntityScan //指明扫描的实体类,在这里没有配置具体的包,默认会在当前类所属包及其子包中进行扫描 public class JpaConfiguration { }
b) 通用注解
- 在 application.yml 文件中添加注解 spring.main.allow-bean-definition-overriding=true;
spring: application: name: web profiles: active: "@package.env@" # datasource: # type: com.alibaba.druid.pool.DruidDataSource main: allow-bean-definition-overriding: true //允许bean定义覆盖 server: port: 8090 servlet: context-path: /web
- 在 配置类中添加 @EnableAutoConfiguration
@Configuration @PropertySource("classpath:jpa.properties") @ComponentScan(basePackageClasses=JpaConfiguration.class) /*@EnableJpaRepositories @EntityScan*/ @EnableAutoConfiguration //自动根据classpath 加载对应配置类 public class JpaConfiguration { }