目录
实体类的创建(dbtest/pojo/Person.java)
javafx scene bulider的下载及配置到IntelliJ IDEA
环境简单的说明
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);
实体类的创建(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)
选择下载。
在IntelliJ IDEA 中的配置路径,选择“语言和框架”→“JavaFX”,选择安装的路径
后面再使用javafx scene bulider,现在先不慌。
maven配置javafx
新创建一个项目,项目结构如下
依赖如下
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>22-ea+16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>22-ea+16</version>
</dependency>
此时如果要正常运行javafx有两种方法,第一种方法,配置虚拟器选项(VM optiops);第二种方法,配置模块描述符module-info.java,不然出现如下错误
错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
第一种方法
下载javafx包
看情况下载
可能网站进不去,笔者提供了javafx包如下
链接:https://pan.baidu.com/s/14Hf-4LGVA-zVjzpKqMBFEw
提取码:52zx
下载完成,放在某个目录下。
配置VM options选项
选择“编辑配置”→“修改选项”→“添加虚拟机选项”,如下。
在虚拟机选项中填入刚刚下载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;
}
运行没报错。
Mybatis和PostgreSQL的配置
假设你已经下载了PostgreSQL。Mybatis和PostgreSQL的依赖如下。
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
关于Mybatis的配置,比如核心配置文件等,笔者就不细说了,笔者是自学是Mybatis,具体可参考相关教程,比如这位大佬写的笔记。
MyBatis笔记_mapper直接写sql_苍茗的博客-优快云博客
在mapper接口PersonMapper.java的代码如下。
package dbtest.dbutils.mapper;
import dbtest.dbutils.pojo.Person;
import java.util.List;
/**
* 作者:疏狂难除
* 时间:2023/11/5
*/
public interface PersonMapper {
List<Person> getAllData();
}
查询所有数据,返回一个List对象。
在映射文件PersonMapper.xml中的代码如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dbtest.dbutils.mapper.PersonMapper">
<!--List<Person> getAllData();-->
<select id="getAllData">
select * from person
</select>
</mapper>
不需要写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> T getMapper(Class<T> 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<Person> allperson = mapper.getAllData();
allperson.forEach(System.out::println);
}
}
笔者使用的是java20,可能语法有所区别。
运行结果如下。
没有问题,接下来把这些数据展示到tableview中。
UI界面
右击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();
}
}
运行和上面预览的结果一样,没有问题。
槽函数connctDB的完善
把测试类中的代码复制过来,如下
PersonMapper mapper = SqlSessionUtils.getMapper(PersonMapper.class);
List<Person> allData = mapper.getAllData();
this.show(allData);
笔者在下面写了一个show方法
show方法及主要的代码
void show(List<Person> personList) {
ObservableList<Person> people = FXCollections.observableArrayList(personList);
id.setCellValueFactory(new PropertyValueFactory<>("id"));
name.setCellValueFactory(new PropertyValueFactory<>("name"));
age.setCellValueFactory(new PropertyValueFactory<>("age"));
person_list.setItems(people);
}
ObservableList<Person> people = FXCollections.observableArrayList(personList);
将实体类用ObservableList对象封装,建立实体类和表格的列之间的联系
id.setCellValueFactory(new PropertyValueFactory<>("id"));
这一步是为列创建属数据属性。
运行
运行并点击按钮,结果如图所示
最后的说明
IntelliJ IDEA生成的JavaFX项目
通过IntelliJ IDEA生成的JavaFX项目,如果选择了所有依赖,如图所示
运行之后会出现如下错误
则只需删除掉module-info.java中的tilesfx
requires eu.hansolo.tilesfx;
运行成功
MySQL数据库的依赖
笔者使用的PostgreSQL数据库,MySQL的依赖如下。
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>