首先系统中引入依赖项
Gradle方式
implementation group: 'org.apache.derby', name: 'derby', version: '10.17.1.0'
implementation group: 'org.hibernate.orm', name: 'hibernate-core', version: '6.5.2.Final'
Maven方式
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.17.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.5.2.Final</version>
</dependency>
创建jakarta.persistence.spi.PersistenceProvider持久化提供者实例,本例子是Hibernate所以手动方式创建HibernatePersistenceProvider,创建该对象后通过
createContainerEntityManagerFactory(PersistenceUnitInfo info, Map properties) 方法是通过手动创建PersistenceUnitInfo实例 或 createEntityManagerFactory(String persistenceUnitName, Map properties) 方法是通过XML配置方式META-INF/persistence.xml
例子:
@Test
void testJPABootstarp() {
String userHome = System.getProperty("user.home");
System.setProperty("derby.client.traceDirectory", userHome);
System.setProperty("derby.system.home", userHome);
HibernatePersistenceProvider persistenceProvider = new HibernatePersistenceProvider();
EntityManagerFactory leftfootEntityManagerFactory = persistenceProvider.createContainerEntityManagerFactory(new PersistenceUnitInfo() {
@Override
public String getPersistenceUnitName() {
return "leftfootPersistenceUnitName";
}
@Override
public String getPersistenceProviderClassName() {
return HibernatePersistenceProvider.class.getName();
}
@Override
public PersistenceUnitTransactionType getTransactionType() {
return PersistenceUnitTransactionType.RESOURCE_LOCAL;
}
@Override
public DataSource getJtaDataSource() {
return null;
}
@Override
public DataSource getNonJtaDataSource() {
return null;
}
@Override
public List<String> getMappingFileNames() {
return List.of();
}
@Override
public List<URL> getJarFileUrls() {
return List.of();
}
@Override
public URL getPersistenceUnitRootUrl() {
return null;
}
@Override
public List<String> getManagedClassNames() {
return List.of(PdfMarker.class.getName());
}
@Override
public boolean excludeUnlistedClasses() {
return false;
}
@Override
public SharedCacheMode getSharedCacheMode() {
return SharedCacheMode.NONE;
}
@Override
public ValidationMode getValidationMode() {
return ValidationMode.NONE;
}
@Override
public Properties getProperties() {
return new Properties();
}
@Override
public String getPersistenceXMLSchemaVersion() {
return "";
}
@Override
public ClassLoader getClassLoader() {
return null;
}
@Override
public void addTransformer(ClassTransformer transformer) {
}
@Override
public ClassLoader getNewTempClassLoader() {
return null;
}
}, new HashMap<>() {
{
this.put(AvailableSettings.JAKARTA_JDBC_DRIVER, AutoloadedDriver.class.getName());
this.put(AvailableSettings.JAKARTA_JDBC_URL, "jdbc:derby:" + userHome + File.separator + "leftfootTest;create=true");
this.put(AvailableSettings.JAKARTA_JDBC_USER, "leftfoot");
this.put(AvailableSettings.AUTOCOMMIT, "true");
this.put(AvailableSettings.SHOW_SQL, "true");
this.put(AvailableSettings.DIALECT, DerbyDialect.class.getName());
this.put(AvailableSettings.HBM2DDL_AUTO, "update");
}
});
try (EntityManager entityManager = leftfootEntityManagerFactory.createEntityManager()) {
PdfMarker pdfMarker = new PdfMarker("seq123_1234");
pdfMarker.setDbId(DbIdGenerator.generateId());
entityManager.persist(pdfMarker);
}
leftfootEntityManagerFactory.close();
}
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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="leftfoot">
<description>
Persistence unit for Hibernate User Guide
</description>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.leftfoot.PdfMarker</class>
<properties>
<property name="jakarta.persistence.jdbc.driver" value="org.apache.derby.iapi.jdbc.AutoloadedDriver"/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:derby:C:/Users/Administrator/leftfootTest;create=true"/>
<property name="jakarta.persistence.jdbc.user" value="sa"/>
<property name="jakarta.persistence.jdbc.password" value=""/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
@Test
void testJPABootstarpPersistenceUnit() {
HibernatePersistenceProvider hibernatePersistenceProvider = new HibernatePersistenceProvider();
EntityManagerFactory entityManagerFactory = hibernatePersistenceProvider.createEntityManagerFactory("leftfoot", new HashMap<>());
try (EntityManager entityManager = entityManagerFactory.createEntityManager()) {
entityManager.getTransaction().begin();
PdfMarker pdfMarker = new PdfMarker("seq123_4567");
pdfMarker.setDbId(DbIdGenerator.generateId());
entityManager.persist(pdfMarker);
entityManager.getTransaction().commit();
}
entityManagerFactory.close();
}
得到EntityManager实例后就可以对数据库进行操作