恐怖的Hibernate和JavaFX Table CallBack!

Hibernate

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

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

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

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

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

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.2.Final</version>
        </dependency>

接着是XML配置文件:

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 数据库方言 -->
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property><!-- 引用jdbc包 -->
        <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=true</property> <!-- 数据库链接 -->
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">1234</property>
<!--        <property name="hibernate.connection.username">root</property>-->
<!--        <property name="hibernate.connection.password">1234</property>-->
        <property name="hibernate.format_sql">true</property>
        <property name="hibernate.show_sql">true</property>

    </session-factory>

</hibernate-configuration>

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

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

1.no entity found for query

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

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

最终,第一个问题是:

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

要加包名。

第二个:

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

 

JavaFX Table

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

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

        Callback<TableColumn<HupuOriginEntity, String>, TableCell<HupuOriginEntity, String>> callback = new Callback<TableColumn<HupuOriginEntity, String>, TableCell<HupuOriginEntity, String>>() {
            @Override
            public TableCell<HupuOriginEntity, String> call(TableColumn<HupuOriginEntity, String> param) {
                    Button jfxButton = new Button("删除");
                    jfxButton.getStyleClass().add("danger");
                return new TableCell<HupuOriginEntity, String>() {
                    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);
                        }
                    }
                };
            }
        };
posted @ 2019-08-06 23:07  杨超杰  阅读(620)  评论(0编辑  收藏  举报