目录
环境简单的说明
正文
表的创建
实体类的创建(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、项目结构如图所示
在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);
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 Builder 1.x Archive (oracle.com)
选择下载。
在IntelliJ IDEA 中的配置路径,选择“语言和框架”→“JavaFX”,选择安装的路径
后面再使用javafx scene bulider,现在先不慌。
新创建一个项目,项目结构如下
依赖如下
org.openjfx
javafx-controls
22-ea+16
org.openjfx
javafx-fxml
22-ea+16
此时如果要正常运行javafx有两种方法,第一种方法,配置虚拟器选项(VM optiops);第二种方法,配置模块描述符module-info.java,不然出现如下错误
错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
JavaFX - Gluon (gluonhq.com)
可能网站进不去,笔者提供了javafx包如下
链接:https://pan.baidu.com/s/14Hf-4LGVA-zVjzpKqMBFEw
提取码:52zx
下载完成,放在某个目录下。
选择“编辑配置”→“修改选项”→“添加虚拟机选项”,如下。
在虚拟机选项中填入刚刚下载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();
}
}
配置后运行结果如下
在java目录下创建module.info文件,其中内容如下
module test {
requires javafx.fxml;
requires javafx.controls;
opens study.one to javafx.fxml;
exports study.one;
}
运行没报错。
假设你已经下载了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,可能语法有所区别。
运行结果如下。
没有问题,接下来把这些数据展示到tableview中。
右击connect.fxml文件,选择在SceneBulider中打开。
简单的设计页面,如下所示
一个按钮,一个Tableview,还有三个TableColumn,设置各自都fx:id,如下所示。
按钮的点击事件如下图所示
快捷键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();
}
}
运行和上面预览的结果一样,没有问题。
把测试类中的代码复制过来,如下
PersonMapper mapper = SqlSessionUtils.getMapper(PersonMapper.class);
List allData = mapper.getAllData();
this.show(allData);
笔者在下面写了一个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"));
这一步是为列创建属数据属性。
运行并点击按钮,结果如图所示
通过IntelliJ IDEA生成的JavaFX项目,如果选择了所有依赖,如图所示
运行之后会出现如下错误
则只需删除掉module-info.java中的tilesfx
requires eu.hansolo.tilesfx;
运行成功
笔者使用的PostgreSQL数据库,MySQL的依赖如下。
mysql
mysql-connector-java
8.0.33