如何编写 web.xml 和 persistence.xml 以将 Java EE 连接到数据库服务器

How to write web.xml and persistence.xml to connect Java EE to DB Server

我的目标非常简单——创建一个空的 maven,在 pom 中下载——javaee-api,然后将这个简单的 maven EE 项目连接到数据库服务器——目前是我本地的机器的 MySLQ 服务器。我还旨在保持简单 - 仅在 web.xml 中放置我的数据源详细信息,并在 persistence.xml 中提及我的数据源。我真的想保持简单 - 因此我没有在 persistence.xml 中放置任何 jpa 提供程序,因为我想在我部署的任何应用程序服务器中使用该提供程序。我现在确实想显式使用 Hibernate,我想要一个将在应用程序服务器上使用默认持久性提供程序的应用程序。但是我下载了(也作为 Maven 依赖项)mysql-connector-java。 我创建了一个简单的实体和 运行 项目。我正在使用 IntelliJ,我部署在 Tomcat 8 alles gut 但是..我的数据库中没有创建表。

很抱歉我提供了混乱的解释,但经过 5 小时的战斗和头痛,这是我所能做的最好的。我还为您提供我的 web.xml、persistence.xml、pom.xml,甚至我的实体 class...

好家伙请帮忙如何将我如此简单的应用程序连接到 MySQL 服务器。

另请先将我转到其他线程 - 请仔细阅读我需要的内容,我不想通过方法等进行连接。我想完全按照我的尝试进行操作。我想要 - 这边!

这是 pom

<?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>org.example</groupId>
    <artifactId>rado</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>war</packaging>
    <build>
           <plugins>
               <plugin>
                   <groupId>org.apache.maven.plugins</groupId>
                   <artifactId>maven-compiler-plugin</artifactId>
                   <version>3.7.0</version>

                   <configuration>
                       <source>8</source>
                       <target>8</target>
                   </configuration>
               </plugin>
           </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>8.0</version>
            <scope>provided</scope>
        </dependency>

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

    </dependencies>

</project>
enter code here

这是我的web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <data-source>
        <name>java:app/rocky/myCon</name>
        <class-name>com.mysql.jdbc.Driver</class-name>
        <url>jdbc:mysql://localhost:3306/rocky</url>
        <user>root</user>
        <password>****</password>
    </data-source>

</web-app>

这是persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence    http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1">

    <persistence-unit name="pu" transaction-type="JTA">
        <jta-data-source>java:app/rocky/myCon</jta-data-source>
    </persistence-unit>

</persistence>

这是我唯一的实体

package entities;

import javax.persistence.*;

@Entity
@Table(name =  "employees")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;

    public Employee() {
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

您需要部署到 JavaEE 或 JakartaEE 应用程序服务器,例如 TomEE、GlassFish、Payara、WildFly...Tomcat 不是完整的 JavaEE 服务器,它不支持 JPA使用 persistence.xml 和 JPA 实体所需的框。

理论上,您可以将休眠添加到 Tomcat 或您的应用程序中,但我不确定它能否正常工作。相反,如果您想继续使用 Tomcat,请使用 TomEE,它基于 Tomcat 但添加了所有缺失的 JavaEE 组件,一切正常。

否则你的代码看起来不错。

在 WEB-INF/classes/META-INF 文件夹中创建 persistence.xml。 WEB-INF 将已经存在。但是我们需要创建 类 和 META-INF 文件夹。