springboot里面可以直接使用jpa,因为已经集成好了,可以按照官网的指导去尝试。这里,我们试着自己去配置实现,在spring里面去配置实现jpa,可以知道springboot给我们做了哪些封装,了解的更透彻点。
依赖配置
- 新建一个父工程,其pom.xml内容
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.gaofeng</groupId>
<artifactId>jpa_demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>01_spring_jpa</module>
</modules>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-bom</artifactId>
<version>2021.1.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
- 再新增一个module,pom.xml
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>
<parent>
<groupId>com.gaofeng</groupId>
<artifactId>jpa_demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>01_spring_jpa</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>5.3.23</spring.version>
<spring-data-jpa.version>2.7.5</spring-data-jpa.version>
<hibernate.version>5.6.12.Final</hibernate.version>
<mysql.version>8.0.32</mysql.version>
<druid.version>1.2.15</druid.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
<version>4.13.2</version>
</dependency>
<!-- Hibernate JPA实现 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- Spring核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 事务管理 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- Druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- Druid与Spring集成 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
<!-- 如果不用Spring Boot,可以移除或使用普通druid依赖 -->
</dependency>
<!-- 日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
<!-- 测试 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.42</version>
</dependency>
</dependencies>
</project>
版本冲突的话,项目后面就会一直报错,跑不起来,这里已经尝试了配置好了合适的版本依赖,可直接使用
项目结构

核心代码逻辑
- pojo类
java
package com.gaofeng.pojo;
import lombok.Data;
import javax.persistence.*;
@Data
@Entity
@Table( name = "tb_customer" )
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "cus_name")
private String cusName;
@Column(name="cus_comp")
private String cusComp ;
}
- repositories
java
package com.gaofeng.repositories;
import com.gaofeng.pojo.Customer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import java.util.Optional;
public interface CustomerRepository extends CrudRepository<Customer,Integer> {
Customer findByCusName(String cusName);
Optional<Customer> findById(Integer id);
}
- logback.xml
xml
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
<!-- 精确指定包或类的日志级别 -->
<logger name="com.yourpackage" level="info"/>
<!-- 忽略debug和trace级别的日志 -->
<logger name="org.springframework" level="info"/>
</configuration>
- 这里使用的是xml格式的配置,主流都是javaConfig,了解下
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:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/jpa
https://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd">
<jpa:repositories base-package="com.gaofeng.repositories"
entity-manager-factory-ref="entityManagerFactory"
transaction-manager-ref="transactionManager"/>
<bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="true" />
<property name="showSql" value="true" />
</bean>
</property>
<property name="packagesToScan" value="com.gaofeng.pojo" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean class="com.alibaba.druid.pool.DruidDataSource" name="dataSource">
<property name="username" value="" />
<property name="password" value="" />
<property name="url" value="jdbc:mysql:///springboot_db" />
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
</bean>
<bean class="org.springframework.orm.jpa.JpaTransactionManager" name="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
- 测试文件
java
package com.gaofeng;
import com.gaofeng.pojo.Customer;
import com.gaofeng.repositories.CustomerRepository;
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;
import java.util.Optional;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring.xml")
public class TestJpaDemo {
@Autowired
private CustomerRepository customerRepository;
@Test
public void testJpaFindById() {
Optional<Customer> customer = customerRepository.findById(1);
System.out.println(customer);
}
// 插入一条新数据
@Test
public void testJpaSave() {
Customer customer = new Customer();
customer.setCusName("张三");
customer.setCusComp("字节跳动");
customerRepository.save(customer);
}
@Test
public void testJpaUpdate() {
Customer customer = new Customer();
customer.setId(1);
customer.setCusComp("抖音集团");
customerRepository.save(customer);
}
// 查询所有
@Test
public void testJpaFindAll() {
Iterable<Customer> customers = customerRepository.findAll();
for (Customer customer : customers) {
System.out.println(customer);
}
}
// 根据名字查询
@Test
public void testJpaFindByName() {
Customer customer = customerRepository.findByCusName("张三");
System.out.println(customer);
}
}
测试检验
-
新增


已经入库了
-
根据id查询

-
修改单条


-
查询所有的数据

-
删除

这样我们就实现了配置的spring-data-jpa来操作数据了