2023-02-15 281
我正在开发Java桌面应用程序,并且对使用Javafx非常感兴趣.我打算使用MVC架构,因为我有Java EE和MVC模型的经验.
我想将数据存储在嵌入式的德比数据库中,并将Hibernate用作持久性层,但是我找不到有关使用Hibernate和Javafx实现MVC的出色教程.
我已经创建了持久性文件,但我不确定如何使其与Javafx一起使用.在Java EE I注入EJB服务或DAOS中,由于我的应用程序不是服务器连接的,因此我认为我不能这样做.
有人可以向我解释如何实现吗?可以一起使用它们吗?
在我的最后一个Javafx项目中,我在服务层下创建了数据库类,该类可以在数据库上完成所有CRUD操作.
示例:
public class DataBroker {
private EntityManager em;
public DataBroker() {
init();
}
private void init() {
this.em = Persistence.createEntityManagerFactory("<NAME_OF_YOUR_PU>").createEntityManager();
}
public Person saveOrUpdate(Person entity) {
em.getTransaction().begin();
T savedEntity = em.merge(entity);
em.getTransaction().commit();
return savedEntity;
}
public List<Person> getAllPersons() {
TypedQuery<Person> query = em.createNamedQuery(Person.GET_ALL, Person.class);
return query.getResultList();
}
}
如果您只需要一个数据媒体实例,则可能可以将其作为单身人士实现,如果您需要一个实例池,请创建一个池.这是应用程序服务器的优势,他为您完成所有操作,您只需要注释您的类或成员.
我希望这对您有帮助.
编辑/更新
这是Eclipselink 2.1的一个工作示例,但它只是持久性提供商,因此它也可以与Hibernate一起使用.
我像上面的示例一样创建了一个数据媒体,该数据量构成了我的idatabroker界面并覆盖方法.
idatabroker
import de.professional_webworkx.crm.domain.Person;
import java.util.List;
public interface IDateBroker {
public abstract void saveOrUpdate(Person person);
public abstract List<Person> getAllPersons();
public abstract Person getPersonById(int id);
public abstract Person getPersonByEmail(String email);
}
databroker – 并非每种方法都可以实现…
import de.professional_webworkx.crm.domain.Person;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
/**
*
* @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
* @version 1.0
*/
public class DataBroker implements IDateBroker {
private EntityManager em;
public DataBroker() {
em = Persistence.createEntityManagerFactory("CRMPU").createEntityManager();
}
@Override
public void saveOrUpdate(Person person) {
em.getTransaction().begin();
em.merge(person);
em.getTransaction().commit();
}
@Override
public List<Person> getAllPersons() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Person getPersonById(int id) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Person getPersonByEmail(String email) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
ipersonservice接口
import de.professional_webworkx.crm.domain.Person;
import java.util.List;
public interface IPersonService {
void saveOrUpdate(Person person);
List<Person> getAllPersons();
Person getPersonById(int id);
Person getPersonByEmail(String email);
}
PersonService
import de.professional_webworkx.crm.databroker.DataBroker;
import de.professional_webworkx.crm.databroker.IDateBroker;
import de.professional_webworkx.crm.domain.Person;
import java.util.List;
public class PersonService implements IPersonService {
private IDateBroker broker;
public PersonService() {
broker = new DataBroker();
}
@Override
public void saveOrUpdate(Person person) {
broker.saveOrUpdate(person);
}
@Override
public List<Person> getAllPersons() {
return broker.getAllPersons();
}
@Override
public Person getPersonById(int id) {
return broker.getPersonById(id);
}
@Override
public Person getPersonByEmail(String email) {
return broker.getPersonByEmail(email);
}
}
我们的域类人
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Entity
@Table(name = "person")
public class Person implements Serializable {
private long id;
private String firstName;
private String lastName;
private String eMail;
public Person() {
}
public Person(String firstName, String lastName, String eMail) {
this.firstName = firstName;
this.lastName = lastName;
this.eMail = eMail;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Size(min = 2, max = 255, message = "Enter between 2 and 255 characters!")
@Column(name = "firstname")
@NotNull
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(name = "lastname")
@NotNull
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@NotNull
public String geteMail() {
return eMail;
}
public void seteMail(String eMail) {
this.eMail = eMail;
}
}
fxmlController class
import de.professional_webworkx.crm.business.IPersonService;
import de.professional_webworkx.crm.business.PersonService;
import de.professional_webworkx.crm.domain.Person;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
public class FXMLController implements Initializable {
private IPersonService service;
@FXML
private Label label;
@FXML
private void handleButtonAction(ActionEvent event) {
Person p = new Person("Demo", "User", "demo@example.com");
service.saveOrUpdate(p);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// get an instance of PersonService
service = new PersonService();
}
}
和最后但并非最不重要的是启动应用程序的主体.
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class MainApp extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("/fxml/Scene.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add("/styles/Styles.css");
stage.setTitle("JavaFX and Maven");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
这是一个由NetBeans创建的标准Maven Javafx项目.
数据库表将使用第一个提交创建,因为我在persistence.xml文件中设置了该架构生成,如您从文件
中看到的那样
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" 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">
<persistence-unit name="CRMPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>de.professional_webworkx.crm.domain.Person</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/exampleDb?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.user" value="user"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value="pass"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
所以我希望这能帮助您创建项目.
帕特里克
以上所述是小编给大家介绍的JavaFX + Hibernate(JPA)持久性 + Derby DB,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/33781.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态