恐怖的Hibernate和JavaFX Table CallBack!


目录 [隐藏]

  • 1 Hibernate
  • 2 JavaFX Table

Hibernate

最近在做 JavaFX 应用,不管再怎么避免数据持久化,但面对几十万的数据量的时候也只能乖乖的去配置持久层框架了。

一开始打算还是使用Mybatis,我在做Web的时候就是一只用Mybatis框架,而Mybatis-plus的强大构造器用着也非常顺手,可是JavaFX如果使用Mybatis-plus就必须要代码生成器,那太麻烦了,不干。

而mybatis原生框架又太原生了,加上配置出一肚子火,换Hibernate!

虽然之前没用过,但Hibernate早在我刚学Java的时候就已经是如雷灌耳了,而且是一个自带Sql构造器的全自动持久层框架,觉得比Mybatis更加稳定。

接着就是配置,Maven中引入:

        
            org.hibernate
            hibernate-core
            5.4.2.Final
        

接着是XML配置文件:



<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialectproperty> 
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driverproperty>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/bbs?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=trueproperty> 
        <property name="hibernate.connection.username">rootproperty>
        <property name="hibernate.connection.password">1234property>


        <property name="hibernate.format_sql">trueproperty>
        <property name="hibernate.show_sql">trueproperty>

    session-factory>

hibernate-configuration>

至于实体类和映射文件直接用IDEA生成,太特么爽了!

接着,两个异常让我搞了半天。

1.no entity found for query

2.MappingNotFoundException: resource:**.hbm.xml not found

网上了博客答案没什么新意,解决不了我的问题。

最终,第一个问题是:

List hupuOriginEntities = session.createQuery("from xyz.chaojie.db.HupuOriginEntity").list();

要加包名。

第二个:

Entity.hbm.xml 文件放在resouce文件夹中!

JavaFX Table

我只是想让JavaFX的Table多一个操作列,加一个可以删除一行数据的按钮。

这代码量和逻辑令我十分害怕。

        CallbackString>, TableCellString>> callback = new CallbackString>, TableCellString>>() {
            @Override
            public TableCellString> call(TableColumnString> param) {
                    Button jfxButton = new Button("删除");
                    jfxButton.getStyleClass().add("danger");
                return new TableCellString>() {
                    Button btn = jfxButton;

                    @Override
                    protected void updateItem(String item, boolean empty) {
                        super.updateItem(item, empty);
                        if (empty) {
                            setGraphic(null);
                            setText(null);
                        } else {
                            btn.setOnAction(event -> {
                                Dialog dialog = new Dialog(
                                        DialogType.CONFIRMATION,
                                        DialogStyle.UNDECORATED,
                                        "信息",
                                        "确定删除?");

                                dialog.showAndWait();
                                HupuOriginEntity delEntity = getTableView().getItems().get(getIndex());
                                if (dialog.getResponse() == DialogResponse.YES) {
                                    Transaction transaction = session.beginTransaction();
                                    session.delete(delEntity);
                                    transaction.commit();
                                    reloadTable();
                                }
                            });
                            setGraphic(btn);
                            setText(null);
                        }
                    }
                };
            }
        };