jpa的测试使用

项目结构:
在这里插入图片描述
jpa的配置文件:

<?xml version="1.0" encoding="UTF-8"?><!--导入jpa约束-->
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <!--
       持久化单元
            name:持久化单元名称。可以随便写一个
            transaction-type:事务管理方式
                JTA:分布式事务管理。使用不同的数据库,数据库在不同的服务器
                RESOURCE_LOCAL:本地事务管理。使用的数据库在本地
    -->
    <persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">
        <!--jpa的实现方式-->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <properties>
        <!--数据库信息-->
            <!--数据库驱动-->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <!--数据库地址-->
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test2?useSSL=false&amp;serverTimezone=UTC"/>
            <!-- 数据库用户名 -->
            <property name="javax.persistence.jdbc.user" value="root" />
            <!-- 数据库密码 -->
            <property name="javax.persistence.jdbc.password" value="totoro" />

        <!--配置JPA实现方式的配置信息-->
            <!--jpa提供者的可选配置:我们的JPA规范的提供者为hibernate,所以jpa的核心配置中兼容hibernate的配置 -->
            <!--显示sql:  false或者true
                自动创建数据库表:hibernate.hbm2ddl.auto
                                create:程序运行时创建表(如果有表,先删除再创建)
                                update:程序运行时创建表(如果有表,则不会创建表)
                                none:不会创建表
            -->
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.use_sql_comments" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update" />
    </properties>
    </persistence-unit>
</persistence>

实体类常用注解使用及说明:

package domain;

import javax.persistence.*;

/**
 * @Entity :指定当前类是实体类
 * @Table :实体类和表之间的对应关系
 *      name属性:指定数据库中表的名称
 */
@Entity
@Table
public class Address {
    /**
     * @Id :设置当前属性为主键
     * @GeneratedValue :设置主键生成策略
     *          strategy = GenerationType.IDENTITY 自增  用于MySQL
     *          strategy = GenerationType.SEQUENCE 序列  用于oracle
     *          strategy = GenerationType.TABLE     jpa自带的一种机制,通过表的形式完成主键自增
     *          strategy = GenerationType.AUTO      程序自动帮助我们选择
     *@Column :指定实体类和表的对应关系
     *          name:指定数据库表的列名
     *          unique:是否唯一
     *          nullable:是否可以为空
     *          inserttable:是否可以插入
     *          updatetable:是否可以更新
     *还有一些@ManyToOne@OneToMany@OneToOne@JsonIgnore等等
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private  Integer id;

    @Column
    private String description;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "Address{" +
                "id=" + id +
                ", description='" + description + '\'' +
                '}';
    }
}

测试用例:

import com.mysql.cj.xdevapi.AddResult;
import domain.Address;
import org.junit.Test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

/**
 * JPA操作步骤:
 *      1.加载配置文件创建工厂(实体管理器工厂)对象
 *      2.通过实体管理器工厂获取实体管理器
 *      3.获取事务对象,开启事务
 *      4.完成增删改查操作
 *      5.提交事务或者事务回滚
 *      6.释放资源
 */
public class JpaTest {
    @Test
    public void SaveAdd(){
        //加载配置文件创建实体管理器工厂对象
        /**
         * Persistence:根据持久化单元名称创建实体管理器工厂对象
         *              调用createEntityManagerFactory()和持久化单元名称创建工厂
         *EntityManagerFactory:实体管理器工厂
         * EntityManager:实体管理器
         *              包含方法:getTransaction():创建事务对象
         *                      presist : 保存
         *                      merge:更新
         *                      remove:删除
         *                      find :查询
         *EntityTransaction:事务
         *             begin:开启事务
         *             commit:提交事务
         *             rollback:回滚事务
         */
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myJPA");
        //通过实体管理器工厂获取实体管理器
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        //获取事务对象,开启事务
        EntityTransaction entityTransaction = entityManager.getTransaction();
        entityTransaction.begin();
        //完成增删改查操作
        Address address = new Address();
        address.setDescription("中国");
        entityManager.persist(address);//保存
        //提交事务或者事务回滚
        entityTransaction.commit();
        //释放资源
        entityManager.close();
        entityManagerFactory.close();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当编写Spring JPA测试用例时,你可以按照以下步骤进行: 1. 导入所需的依赖:在你的项目中,你需要添加Spring Boot Test和Spring Data JPA的相关依赖。可以使用Maven或Gradle来管理依赖关系。 2. 创建测试类:在你的测试源代码目录中,创建一个新的测试类。该类应该使用`@RunWith`注解标记,并指定`SpringRunner.class`作为运行器。 3. 配置测试环境:可以使用`@DataJpaTest`注解标记测试类,以便自动配置JPA相关的Bean。这将创建一个基于内存的嵌入式数据库,并为你的测试提供一个干净的数据库环境。 4. 编写测试方法:在测试类中,编写各种测试方法来验证你的JPA存储库的行为。你可以使用`@Autowired`注解来注入你的JPA存储库,并使用断言来验证预期结果。 5. 使用事务管理:为了避免测试数据对数据库状态造成干扰,可以使用`@Transactional`注解来标记测试方法,以确保每个测试方法在执行后都会回滚事务。 下面是一个简单的示例,展示了如何编写一个使用Spring JPA测试用例: ```java @RunWith(SpringRunner.class) @DataJpaTest public class UserRepositoryTest { @Autowired private UserRepository userRepository; @Test @Transactional public void testSaveUser() { User user = new User("John Doe", 25); userRepository.save(user); User savedUser = userRepository.findById(user.getId()).orElse(null); assertNotNull(savedUser); assertEquals(user.getName(), savedUser.getName()); assertEquals(user.getAge(), savedUser.getAge()); } // 其他测试方法... } ``` 在这个示例中,我们注入了一个`UserRepository`,并在`testSaveUser`方法中测试了保存用户并验证结果的行为。注意,我们还在测试方法上标记了`@Transactional`注解,以确保事务回滚。 希望这个示例能帮助你开始编写Spring JPA测试用例!如果你有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值