eclipse+maven搭建hibernate5测试环境

2024-01-07 16:18

本文主要是介绍eclipse+maven搭建hibernate5测试环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

eclipse+maven搭建hibernate5测试环境

  • 1环境
  • 2搭建
    • 2.1创建maven项目
    • 2.2配置maven依赖
    • 2.3配置hibernate持久化单元
    • 2.4.编写持久化类
    • 2.5.存储和查询测试Junit测试用例编写
  • 3.测试用例运行情况
    • 3.1.执行情况
    • 3.2.执行顺序
  • 4.相关知识
    • 4.1.Hibernate配置文件相关属性
    • 4.2.持久化类相关注解
    • 4.3.JUnit 4 相关注解
  • 5.常见问题及其解决

1环境

Eclipse: Luna Service Release 2 (4.4.2),Eclipse Java EE IDE for Web Developers.Maven:3.5.4

2搭建

2.1创建maven项目

选择Maven的Maven Project项目
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.2配置maven依赖

修改maven项目向导自动生成的pom.xml,添加依赖项

<dependencies><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>5.2.11.Final</version></dependency> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency> <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies>

2.3配置hibernate持久化单元

在路径src/main/resources/META-INF下新建persistence.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd "> <persistence-unit name="myPersistenceUnit"  transaction-type="RESOURCE_LOCAL"> <properties><property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /><property name="hibernate.hbm2ddl.auto" value="create-drop" /> <property name="hibernate.connection.username" value="根据个人实际环境填写数据库连接的用户名" /><property name="hibernate.connection.password" value="根据个人实际环境填写数据库连接的密码" /><property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC" /><property name="hibernate.format_sql" value="true" /> <property name="hibernate.use_sql_comments" value="true" /> <property name="hibernate.show_sql" value="true" /></properties></persistence-unit>
</persistence>

2.4.编写持久化类

在src/main/java中创建持久化类

package com.tyde.ht002.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name="tb_message")
public class Message {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private Long id;@Column(name="text")private String text;public String getText() {return text;}public void setText(String text) {this.text = text;}}

2.5.存储和查询测试Junit测试用例编写

在src/test/java中创建测试用例

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import junit.framework.TestCase;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import com.tyde.ht002.model.Message;@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestHibernate {public static EntityManagerFactory emf;@BeforeClasspublic static void start(){System.out.println("start()");if(emf==null){emf = Persistence.createEntityManagerFactory("myPersistenceUnit"); }}
@AfterClasspublic static void stop(){System.out.println("stop()");if(emf!=null){emf.close(); }}@Testpublic void test001StoreMessage(){ System.out.println("test001StoreMessage()");EntityManager em = emf.createEntityManager();EntityTransaction tx = em.getTransaction();tx.begin();Message message =new Message();message.setText("hello world!");em.persist(message );tx.commit();em.close(); } @Testpublic void test002QueryMessage(){  System.out.println("test002QueryMessage()");EntityManager em = emf.createEntityManager();EntityTransaction tx = em.getTransaction();tx.begin();List<Message> messages = em.createQuery("select m from Message m").getResultList();TestCase.assertEquals(messages.size(),1);TestCase.assertEquals(messages.get(0).getText(),"hello world!");messages.get(0).setText("haha"); tx.commit();em.close();}}

3.测试用例运行情况

3.1.执行情况

两个测试用例都通过了
在这里插入图片描述

3.2.执行顺序

运行测试用例,查看控制台打印的方法和sql查询语句,可以看到顺序如下:
1、start()方法,实体管理器工厂的创建

Hibernate:     drop table if exists tb_message
Hibernate: create table tb_message (id bigint not null auto_increment,text varchar(255),primary key (id)) engine=InnoDB

2、test001StoreMessage()方法

Hibernate: /* insert com.tyde.ht002.model.Message*/ insert intotb_message(text) values(?)

3、test002QueryMessage()方法,查询,并修改

Hibernate: /* selectm fromMessage m */ selectmessage0_.id as id1_0_,message0_.text as text2_0_ fromtb_message message0_
Hibernate: /* updatecom.tyde.ht002.model.Message */ updatetb_message settext=? whereid=?

4、stop()方法,实体管理器工厂的关闭

Hibernate: drop table if exists tb_message

4.相关知识

4.1.Hibernate配置文件相关属性

属性描述相关值
hibernate.dialect数据库方言如:org.hibernate.dialect.MySQL5;org.hibernate.dialect.OracleDialect;org.hibernate.dialect.SQLServer2005Dialect;org.hibernate.dialect.SQLServer2008Dialect
hibernate.connection.username数据库连接用户名
hibernate.connection.password数据库连接密码
hibernate.connection.url数据库连接url路径
hibernate.format_sql格式化SQL
hibernate.use_sql_commentsSQL语句注释,可以查看SQL语句的起因。
hibernate.show_sql打印SQL语句,方便调试。
hibernate.hbm2ddl.auto数据库表生成方式create 每次加载hibernate会删除上一次的生成的表,再根据model类重新生成新表 ;
create-drop 每次加载hibernate根据model类生成表,但卸载后表就自动删除;
update第一次加载hibernate时会根据model类自动创建表,以后加载时自动更新;
validate每次加载时,验证表结构。

4.2.持久化类相关注解

注解描述
@Entity实体类,默认表的名字就是类名
@Table改变某些默认的映射规则
@Id声明主键
@GeneratedValue主键的生成策略。如:
GenerationType.IDENTITY使用数据库标识列来分配主键,以确保唯一性;
GenerationType.TABLE 使用数据库表来分配主键,以确保唯一性;
GenerationType.SEQUENCE使用数据库序列来分配主键,以确保唯一性;
GenerationType.AUTO根据具体数据库来选择前面几个策略的一种。
@Column属性与数据库字段的映射关系
@Transitent不需要映射的属性

4.3.JUnit 4 相关注解

5.常见问题及其解决

5.1.Junit问题
现象:junit报错junit.framework.AssertionFailedError: No tests found问题
原因:使用junit4.11版本,在写测试用例类时,使用了继承extends TestCase。junit3中使用继承,但junit4不用继承;
解决方式:extends TestCase junit3中使用,但是junit4中不要采用,去掉继承。ENCE使用数据库序列来分配主键,以确保唯一性;GenerationType.AUTO根据具体数据库来选择前面几个策略的一种。

5.2.Hibernate配置解析出错
现象:报错:对实体 “characterEncoding” 的引用必须以 ‘;’ 分隔符结尾
原因:在persistence.xml的文件中"&“未转义。
解决方式:在persistence.xml的文件中,我们需要将”&“做转义”&amp";如:

<property name="hibernate.connection.url" 
value="jdbc:mysql://localhost:3306/jpa?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC" />

5.3.Mysql查询锁死
现象:测试用例一直执行不成功,通过navicate查询message表状态,标题栏一直显示“正在载入”

在这里插入图片描述
原因:表解锁在navicat for mysql中新建查询SHOW PROCESSLIST,查看当前任务列表,看到有很多waiting state的命令。

在这里插入图片描述
解决方式:结束所有操作当前表的进程Navicat中执行:kill + 进程号其中进程号即(SHOW PROCESSLIST查询结果表显示的ID)) 。

这篇关于eclipse+maven搭建hibernate5测试环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/580515

相关文章

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们