persistence-demo之spring data jpa

0、前言

目的:旨在记录Spring Data JPA操作数据,持久层使用hibernate实现

项目结构:

1、导入pom文件

<dependencies>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.4.32.Final</version>
    </dependency>

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

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.5</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.2.12.RELEASE</version>
    </dependency>
</dependencies>

2、编写配置文件spring.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 http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--用于整合jpa,相当于类上的@EnableJpaRepositories-->
    <jpa:repositories base-package="cn.itcast.orm.repository"
                      entity-manager-factory-ref="entityManagerFactory"
                      transaction-manager-ref="transactionManager"
    />


    <!--EntityManagerFactory-->
    <bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="jpaVendorAdapter">
            <!--Hibernate实现-->
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <!--生成数据库表-->
                <property name="generateDdl" value="true"></property>
                <property name="showSql" value="true"></property>
            </bean>
        </property>
        <!--设置实体类的包-->
        <property name="packagesToScan" value="cn.itcast.orm.entity"></property>
        <property name="dataSource" ref="dataSource" ></property>
    </bean>

    <!--数据源-->
    <bean class="com.alibaba.druid.pool.DruidDataSource" name="dataSource">
        <property name="username" value="root"/>
        <property name="password" value="abc123456#"/>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://10.10.50.160:3306/test?characterEncoding=UTF-8"/>
    </bean>

    <!--声明式事务-->
    <bean class="org.springframework.orm.jpa.JpaTransactionManager" name="transactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"></property>
    </bean>

    <!--启动注解方式的声明式事务-->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

</beans>

3、或步骤2同样作用的Config类:SpringDataJPAConfig.java

package cn.itcast.orm.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

/**
 * @author jiangl
 * @ClassName SpringDataJPAConfig.java
 * @Description Config类
 * @createTime 2022年06月03日 11:21
 */
@Configuration  //标记当前类为配置类  =xml配文件
@EnableJpaRepositories(basePackages = "cn.itcast.orm.repository")  //启动jpa <jpa:repositories>
@EnableTransactionManagement  //开启事务
public class SpringDataJPAConfig
{
    /*
     <!--数据源-->
      <bean class="com.alibaba.druid.pool.DruidDataSource" name="dataSource">
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/springdata_jpa?characterEncoding=UTF-8"/>
     </bean>
     */
    @Bean
    public DataSource dataSource()
    {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUsername("root");
        dataSource.setPassword("abc123456#");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://10.10.50.160:3306/test?characterEncoding=UTF-8");

        return dataSource;

    }

    /*
       <!--EntityManagerFactory-->
        <bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
             <property name="jpaVendorAdapter">
               <!--Hibernate实现-->
               <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                    <!--生成数据库表-->
                    <property name="generateDdl" value="true"></property>
                    <property name="showSql" value="true"></property>
             </bean>
             </property>
             <!--设置实体类的包-->
             <property name="packagesToScan" value="com.tuling.pojo"></property>
             <property name="dataSource" ref="dataSource" ></property>
     </bean>
     */
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory()
    {
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true);
        vendorAdapter.setShowSql(true);

        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("cn.itcast.orm.entity");
        factory.setDataSource(dataSource());
        return factory;

    }

    /*
     <bean class="org.springframework.orm.jpa.JpaTransactionManager" name="transactionManager">
          <property name="entityManagerFactory" ref="entityManagerFactory"></property>
     </bean>
     */
    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory)
    {
        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(entityManagerFactory);
        return txManager;

    }

}

4、编写实体类

package cn.itcast.orm.entity;

import javax.persistence.*;

/**
 * @author jiangl
 * @ClassName Book.java
 * @Description 实体类,图书
 * @createTime 2022年06月03日 11:21
 */

@Entity
@Table(name = "t_book")
public class Book
{
    @Id
    @Column(name = "bid")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private  Integer id;//主键

    @Column(name = "bname")
    private String name;//图书名称

    @Column(name = "author")
    private String author;//作者

    @Column(name = "price")
    private double price;//价格

    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 String getAuthor()
    {
        return author;
    }

    public void setAuthor(String author)
    {
        this.author = author;
    }

    public double getPrice()
    {
        return price;
    }

    public void setPrice(double price)
    {
        this.price = price;
    }

    @Override
    public String toString()
    {
        return "Book{" + "id=" + id + ", name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + '}';
    }
}

5、编写repository(dao)层

package cn.itcast.orm.repository;

import cn.itcast.orm.entity.Book;
import org.springframework.data.repository.CrudRepository;

/**
 * @author jiangl
 * @ClassName BookRepository.java
 * @Description
 * @createTime 2022年06月07日 16:38
 */
public interface BookRepository extends JpaRepository<Book, Integer>
{

}

7、编写测试类

package cn.itcast.orm;

import cn.itcast.orm.config.SpringDataJPAConfig;
import cn.itcast.orm.entity.Book;
import cn.itcast.orm.repository.BookRepository;
import javafx.scene.input.PickResult;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;
import java.util.Optional;

/**
 * @author jiangl
 * @ClassName BookTest.java
 * @Description
 * @createTime 2022年06月07日 21:13
 */
//@ContextConfiguration("/spring.xml")  //xml文件
@ContextConfiguration(classes = SpringDataJPAConfig.class)  //config类
@RunWith(SpringJUnit4ClassRunner.class)
public class BookTest
{
    @Autowired
    public BookRepository bookRepository;

    @Test
    public void getOne()
    {
        Optional<Book> book = bookRepository.findById(20);
        System.out.println(book);

    }


    @Test
    public void testPage()
    {
        Page<Book> page = bookRepository.findAll(PageRequest.of(1, 2));
        List<Book> books = page.getContent();
        for (Book book : books) {
            System.out.println(book);
        }

    }

    @Test
    public void test01()
    {
        Book book = new Book();
        book.setName("c#从入门到精通");
        book.setPrice(9.8);
        Example<Book> example =Example.of(book);

        List<Book> books = bookRepository.findAll(example);
        System.out.println(books);
    }

}

6、测试


保存数据成功。

posted @   南翔技校毕业后  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示