mybatis读取到的数据展示在javafx的tableview中

目录

环境简单的说明

正文

表的创建

实体类的创建(dbtest/pojo/Person.java)

javafx scene bulider的下载及配置到IntelliJ IDEA 

maven配置javafx

第一种方法

下载javafx包

配置VM options选项

第二种方法

Mybatis和PostgreSQL的配置

工具类的代码

测试类

UI界面

初始运行

槽函数connctDB的完善

show方法及主要的代码

运行

最后的说明

IntelliJ IDEA生成的JavaFX项目

MySQL数据库的依赖


环境简单的说明

1、IntelliJ IDEA 

2、maven配置依赖

3、数据库为PostgreSQL

4、javafx scene bulider

5、项目结构如图所示

mybatis读取到的数据展示在javafx的tableview中_第1张图片

正文

表的创建

在postgreSQL数据库中创建的表及数据如下

create table person
(
    id   int primary key not null,
    name varchar(20)     not null,
    age  int             not null
);
comment on column person.id is '人的id';
comment on column person.name is '人的姓名';
comment on column person.age is '人的年龄';
insert into person(id,name, age)
values (1, '张三', 25),
    (2, '李四', 30),
    (3, '王五', 28),
    (4, '赵六', 33),
    (5, '刘七', 22),
    (6, '陈八', 27),
    (7, '吴九', 35),
    (8, '郑十', 29),
    (9, '周十一', 32),
    (10, '钱十二', 26),
    (11, '孙十三', 34),
    (12, '杨十四', 31),
    (13, '朱十五', 23),
    (14, '秦十六', 36),
    (15, '许十七', 27),
    (16, '何十八', 30),
    (17, '吕十九', 24),
    (18, '施二十', 29),
    (19, '严二十一', 33),
    (20, '钟二十二', 28);

实体类的创建(dbtest/pojo/Person.java)

package dbtest.dbutils.pojo;

/**
 * 作者:疏狂难除
 * 时间:2023/11/5
 */
public class Person{
    private Integer id;
    private String name;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Person(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

javafx scene bulider的下载及配置到IntelliJ IDEA 

下载路径如下

JavaFX Scene Builder 1.x Archive (oracle.com)

选择下载。

mybatis读取到的数据展示在javafx的tableview中_第2张图片

在IntelliJ IDEA 中的配置路径,选择“语言和框架”→“JavaFX”,选择安装的路径

mybatis读取到的数据展示在javafx的tableview中_第3张图片

后面再使用javafx scene bulider,现在先不慌。

maven配置javafx

新创建一个项目,项目结构如下

mybatis读取到的数据展示在javafx的tableview中_第4张图片

依赖如下

        
        
            org.openjfx
            javafx-controls
            22-ea+16
        
        
        
            org.openjfx
            javafx-fxml
            22-ea+16
        

此时如果要正常运行javafx有两种方法,第一种方法,配置虚拟器选项(VM optiops);第二种方法,配置模块描述符module-info.java,不然出现如下错误

错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序

第一种方法

下载javafx包

JavaFX - Gluon (gluonhq.com)

mybatis读取到的数据展示在javafx的tableview中_第5张图片看情况下载

可能网站进不去,笔者提供了javafx包如下

链接:https://pan.baidu.com/s/14Hf-4LGVA-zVjzpKqMBFEw 
提取码:52zx

下载完成,放在某个目录下。

配置VM options选项

选择“编辑配置”→“修改选项”→“添加虚拟机选项”,如下。

mybatis读取到的数据展示在javafx的tableview中_第6张图片

mybatis读取到的数据展示在javafx的tableview中_第7张图片

在虚拟机选项中填入刚刚下载javafx的包的lib的路径

--module-path "C:/Program Files/javafx-sdk-20.0.2/lib" --add-modules javafx.controls,javafx.fxml

选择自己安装的路径。

Main.java文件的内容如下。

package study.one;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class Main extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("hello-view.fxml"));
        Scene scene = new Scene(fxmlLoader.load());
        stage.setTitle("Hello!");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

配置后运行结果如下

mybatis读取到的数据展示在javafx的tableview中_第8张图片

第二种方法

在java目录下创建module.info文件,其中内容如下

module test {
    requires javafx.fxml;
    requires javafx.controls;
    opens study.one to javafx.fxml;
    exports study.one;
}

运行没报错。

Mybatis和PostgreSQL的配置

假设你已经下载了PostgreSQL。Mybatis和PostgreSQL的依赖如下。

        
        
            org.mybatis
            mybatis
            3.5.13
        
        
        
            org.postgresql
            postgresql
            42.6.0
        

关于Mybatis的配置,比如核心配置文件等,笔者就不细说了,笔者是自学是Mybatis,具体可参考相关教程,比如这位大佬写的笔记。

MyBatis笔记_mapper直接写sql_苍茗的博客-CSDN博客

在mapper接口PersonMapper.java的代码如下。

package dbtest.dbutils.mapper;

import dbtest.dbutils.pojo.Person;
import java.util.List;
/**
 * 作者:疏狂难除
 * 时间:2023/11/5
 */
public interface PersonMapper {
    List getAllData();
}

查询所有数据,返回一个List对象。

在映射文件PersonMapper.xml中的代码如下




    
    

不需要写resultType。

工具类的代码

这里就不细说了,不理解可以搜一搜,或者问人工智能等的。

package dbtest.dbutils.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;


/**
 * 作者:疏狂难除
 * 时间:2023/10/27
 */
public class SqlSessionUtils {
    public static  T getMapper(Class type)
    {
        T mapper;
        try {
            InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
            mapper = sqlSession.getMapper(type);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return mapper;
    }
}

测试类

测试一下上面的接口

代码如下。

package test;
import dbtest.dbutils.mapper.PersonMapper;
import dbtest.dbutils.pojo.Person;
import dbtest.dbutils.utils.SqlSessionUtils;
import org.junit.Test;

import java.util.List;

/**
 * 作者:疏狂难除
 * 时间:2023/11/5
 */
public class TestMapper {
    @Test
    public void testAlldata(){
        PersonMapper mapper = SqlSessionUtils.getMapper(PersonMapper.class);
        List allperson = mapper.getAllData();
        allperson.forEach(System.out::println);
    }
}

笔者使用的是java20,可能语法有所区别。

运行结果如下。

mybatis读取到的数据展示在javafx的tableview中_第9张图片

没有问题,接下来把这些数据展示到tableview中。

UI界面

右击connect.fxml文件,选择在SceneBulider中打开。

mybatis读取到的数据展示在javafx的tableview中_第10张图片

简单的设计页面,如下所示

mybatis读取到的数据展示在javafx的tableview中_第11张图片

一个按钮,一个Tableview,还有三个TableColumn,设置各自都fx:id,如下所示。

mybatis读取到的数据展示在javafx的tableview中_第12张图片

按钮的点击事件如下图所示

快捷键ctrl+p可以预览效果。

控制器类(connetControl.java)的代码如下

package dbtest.takeaway;

import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;

public class connectController {

    @FXML
    private TableView person_list;

    @FXML
    private TableColumn name;

    @FXML
    private TableColumn id;

    @FXML
    private TableColumn age;

    @FXML
    void connctDB(ActionEvent event) {

    }

但是这个代码不完善。保存并关闭javafx scene bulider。

初始运行

connect.java的代码如下

package dbtest.takeaway;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

/**
 * 作者:疏狂难除
 * 时间:2023/11/5
 */
public class connect extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader(connect.class.getResource("connect.fxml"));
        Scene scene = new Scene(fxmlLoader.load());
        stage.setTitle("连接");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }

}

运行和上面预览的结果一样,没有问题。

槽函数connctDB的完善

把测试类中的代码复制过来,如下

        PersonMapper mapper = SqlSessionUtils.getMapper(PersonMapper.class);
        List allData = mapper.getAllData();
        this.show(allData);

笔者在下面写了一个show方法

show方法及主要的代码

    void show(List personList) {
        ObservableList people = FXCollections.observableArrayList(personList);
        id.setCellValueFactory(new PropertyValueFactory<>("id"));
        name.setCellValueFactory(new PropertyValueFactory<>("name"));
        age.setCellValueFactory(new PropertyValueFactory<>("age"));
        person_list.setItems(people);
    }
ObservableList people = FXCollections.observableArrayList(personList);

 将实体类用ObservableList对象封装,建立实体类和表格的列之间的联系

id.setCellValueFactory(new PropertyValueFactory<>("id"));

这一步是为列创建属数据属性。

运行

运行并点击按钮,结果如图所示

mybatis读取到的数据展示在javafx的tableview中_第13张图片

最后的说明

IntelliJ IDEA生成的JavaFX项目

通过IntelliJ IDEA生成的JavaFX项目,如果选择了所有依赖,如图所示

mybatis读取到的数据展示在javafx的tableview中_第14张图片

运行之后会出现如下错误

mybatis读取到的数据展示在javafx的tableview中_第15张图片

则只需删除掉module-info.java中的tilesfx

requires eu.hansolo.tilesfx;

运行成功

mybatis读取到的数据展示在javafx的tableview中_第16张图片

MySQL数据库的依赖

笔者使用的PostgreSQL数据库,MySQL的依赖如下。



    mysql
    mysql-connector-java
    8.0.33

你可能感兴趣的:(java,mybatis,java,intellij-idea)