【JPA】spring集成jpa实战之数据增删改查入门教程(二)

springboot里面可以直接使用jpa,因为已经集成好了,可以按照官网的指导去尝试。这里,我们试着自己去配置实现,在spring里面去配置实现jpa,可以知道springboot给我们做了哪些封装,了解的更透彻点。

依赖配置

  1. 新建一个父工程,其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>
  1. 再新增一个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>

版本冲突的话,项目后面就会一直报错,跑不起来,这里已经尝试了配置好了合适的版本依赖,可直接使用

项目结构

核心代码逻辑

  1. 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 ;
}
  1. 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);
}
  1. 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>
  1. 这里使用的是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>
  1. 测试文件
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);
    }
}

测试检验

  1. 新增

    已经入库了

  2. 根据id查询

  3. 修改单条

  4. 查询所有的数据

  5. 删除

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

相关推荐
让我上个超影吧4 小时前
天机学堂——播放进度方案优化
java·spring boot·redis·spring cloud
月空MoonSky4 小时前
解决使用Notepad++出现异型字或者繁体字体问题
java·javascript·notepad++
Filotimo_4 小时前
JWT的概念
java·开发语言·python
min1811234564 小时前
软件升级全流程步骤详解
android·java·服务器
黎雁·泠崖4 小时前
Java字符串系列总结篇|核心知识点速记手册
java·开发语言
biyezuopinvip4 小时前
基于Spring Boot的社区互助平台设计与实现(毕业论文)
java·spring boot·vue·毕业设计·论文·毕业论文·社区互助平台设计与实现
JNU freshman5 小时前
从 Ceph 16(Pacific)到 Ceph 18(Reef):cephadm 的伸缩性演进与 cephadm agent 到底“成熟”了吗?
java·大数据·ceph
nbsaas-boot5 小时前
为什么 ScopedValue 是 SaaS 的分水岭
java
小北方城市网5 小时前
生产级 Spring Boot + MyBatis 核心配置模板
java·spring boot·redis·后端·spring·性能优化·mybatis