gpt4 book ai didi

java - 在没有 persistence.XML 的情况下使用 JPA 和 Spring 连接到 mysql 数据库

转载 作者:行者123 更新时间:2023-11-29 07:18:44 25 4
gpt4 key购买 nike

我正在尝试学习如何使用带有 JPA 的 spring 来连接到数据库。我不想使用 persistence.xml,而是想使用尽可能少的代码创建一个实体管理器。

所以,我从这个页面尝试了这个解决方案(https://vladmihalcea.com/how-to-bootstrap-jpa-programmatically-without-the-persistence-xml-configuration-file/)它奏效了。然而,它看起来比我想要的更复杂,并且它没有包含任何 spring 元素或任何注释来减少代码量。

我的代码包含了这个问题的解决方案(Create JPA EntityManager without persistence.xml configuration file)

我从 Tobogganski 那里获取了配置代码,他为 Postgresql 编写了它,我正在努力使其适用于 Mysql。

Config.java 文件

package jj;

import java.util.Properties;

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

import org.hibernate.jpa.HibernatePersistenceProvider;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

@Configuration
@EnableAutoConfiguration
@EntityScan(basePackages= "entity")
public class Config {


private final String DB_URL = "jdbc:mysql://localhost:3306/dictionary";
private final String DB_USER_NAME = "root";
private final String DB_PASSWORD = "";

@Bean
public Properties hibernateProperties(){
final Properties properties = new Properties();

properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
properties.put("hibernate.id.new_generator_mappings", false);
properties.put("hibernate.connection.datasource", getMysqlDataSource());

return properties;
}

@Bean
protected DataSource getMysqlDataSource() {
MysqlDataSource mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setURL(DB_URL);
mysqlDataSource.setUser(DB_USER_NAME);
mysqlDataSource.setPassword(DB_PASSWORD);
return mysqlDataSource;
}

@Bean(name = "emf")
public EntityManagerFactory entityManagerFactory( DataSource dataSource, Properties hibernateProperties ){
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource( dataSource );
em.setJpaVendorAdapter( new HibernateJpaVendorAdapter() );
em.setJpaProperties( hibernateProperties );
em.setPersistenceUnitName( "dictionary" );
em.setPersistenceProviderClass(HibernatePersistenceProvider.class);
em.afterPropertiesSet();

return em.getObject();
}

}


DictElement 类

package entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.PersistenceUnit;

import org.springframework.stereotype.Component;

@Component
@Entity
@PersistenceUnit(unitName="dictionary")
public class DictElement {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Column
private String word;
@Column
private String genre;
@Column
private String definition;


public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getDefinition() {
return definition;
}
public void setDefinition(String definition) {
this.definition = definition;
}

}

驱动类

package ui;


import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import entity.DictElement;
import jj.Config;


public class driver {

public static void main(String[] args) {

ApplicationContext ctx =new AnnotationConfigApplicationContext(Config.class);

EntityManagerFactory emf= (EntityManagerFactory) ctx.getBean("emf", EntityManagerFactory.class);

EntityManager em = null;

try {

em= emf.createEntityManager();

DictElement element= new DictElement();

element.setWord("word");
element.setGenre("type");
element.setDefinition("definition");

em.getTransaction().begin();
em.persist(element);
em.getTransaction().commit();
} catch (Exception ex)
{
ex.printStackTrace();
if (em != null)
{
em.getTransaction().rollback();
}
}


}

}



最后,数据库名称为dictionary,其中包含一张名为“dict_table”,该表由三列组成,第一列是“词”,第二列是“流派”,第三列是“定义”。

当我运行这段代码时,它给我一个错误“没有找到名称为‘dictionary’的持久性单元”,但我确信我的代码还有更多问题。

问题是,我怎样才能从我们这里没有使用的 persistence.xml 中替换这一行

(持久化单元名称=“字典”事务类型=“RESOURCE_LOCAL”)

只有 java 代码和注释。

正如您从驱动程序类中看到的那样。我正在尝试将一个元素插入到本地数据库表中。

最佳答案

在您的驱动程序类中,请参见:import java.io.ObjectInputFilter.Config;

关于java - 在没有 persistence.XML 的情况下使用 JPA 和 Spring 连接到 mysql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57682926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com