Springboot+javafx+mybatis实现登录功能

本文仅实现登录功能

一、项目构建

1.项目结构

2.创建工程

在IDEA中点击文件->新建->项目->选择maven工程并输入项目名称

二、项目代码

1.pom.xml文件内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.build.locales>zh_CN</project.build.locales>
        <java.version>1.8</java.version>
        <project.build.jdk>${java.version}</project.build.jdk>
        <spring.boot.version>2.1.1.RELEASE</spring.boot.version>
        <springboot-javafx-support.version>2.1.6</springboot-javafx-support.version>
    </properties>
    <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <version>${spring.boot.version}</version>
    </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>${spring.boot.version}</version>
        <exclusions>
            <!-- 过滤默认logback配置 -->
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
        <version>${spring.boot.version}</version>
    </dependency>
    <!-- javafx核心包 -->
    <dependency>
        <groupId>de.roskenet</groupId>
        <artifactId>springboot-javafx-support</artifactId>
        <version>${springboot-javafx-support.version}</version>
    </dependency>

    <!-- mysql驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <!-- spring-boot整合mybatis -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.1.1</version>
    </dependency>

    </dependencies>
</project>

2.application.properties内容

spring.datasource.driverClassName=com.mysql.jdbc.Driver
若新版的jdbc需要变更为com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/你的数据库名称?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=你的数据库账号
spring.datasource.password=你的数据库密码

3.Main.java内容

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Rectangle2D;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Screen;
import javafx.stage.Stage;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import java.io.IOException;

@SpringBootApplication
@MapperScan("mapper")   //在这里输入你的mapper路径,或者在每个mapper前面加上“@mapper”注解
public class Main extends Application {

    public static void main(String[] args) {

        launch(Main.class, args);

    }
    @Override
    public void start(Stage primaryStage) throws IOException {
       Parent root = FXMLLoader.load(getClass().getResource("/fxml/Login.fxml"));
        //获取屏幕当前分辨率
        Rectangle2D screenRectangle = Screen.getPrimary().getBounds();
        double width = screenRectangle.getWidth();
        double height = screenRectangle.getHeight();


        // 创建一个场景,并将栈面板设置为场景的内容
        Scene scene = new Scene(root, (9.0/25)*width, (9.0/25)*height);

        // 将场景设置为舞台的内容,并显示舞台
        primaryStage.setX((width-(9.0/25)*width)/2);
        primaryStage.setY((height-(16.0/25)*height)/2);
        primaryStage.setResizable(false);
        primaryStage.setTitle("鬼知道的什么管理系统");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    public static ApplicationContext getContext() {
        return SpringApplication.run(Main.class);
    }



}

4.Login.fxml内容(此文件需要在项目目录中创建一个Resource文件夹并将其设置为资源根目录)

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>

<?import javafx.scene.control.PasswordField?>
<VBox alignment="CENTER" prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/22" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.UserController">
   <children>
      <Label prefHeight="56.0" prefWidth="370.0" text="DFSAFDSAFDFSA">
         <font>
            <Font size="44.0" />
         </font>
      </Label>
      <TextField fx:id="Username" maxHeight="-Infinity" maxWidth="-Infinity" promptText="在这里输入账号">
         <font>
            <Font size="15.0" />
         </font>
         <VBox.margin>
            <Insets top="12.0" />
         </VBox.margin>
      </TextField>
      <PasswordField fx:id="Password" maxHeight="-Infinity" maxWidth="-Infinity" promptText="在这里输入密码">
         <font>
            <Font size="15.0" />
         </font>
         <VBox.margin>
            <Insets top="12.0" />
         </VBox.margin>
      </PasswordField>
      <Button mnemonicParsing="false" prefHeight="31.0" prefWidth="201.0" text="登录" fx:id="LoginButton" onAction="#LoginButtonOnClick">
         <VBox.margin>
            <Insets top="12.0" />
         </VBox.margin>
      </Button>
      <Button mnemonicParsing="false" prefHeight="33.0" prefWidth="201.0" text="注册" fx:id="RegisterButton">
         <VBox.margin>
            <Insets top="12.0" />
         </VBox.margin>
      </Button>
   </children>
</VBox>

5.UserController.java代码

import de.felixroske.jfxsupport.FXMLController;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;
import mapper.UserMapper;
import org.example.Main;
import org.springframework.context.ApplicationContext;
import pojo.User;
import java.net.URL;
import java.util.ResourceBundle;

@FXMLController
public class UserController implements Initializable {

    private UserMapper userMapper;

    @FXML
    private TextField Username;

    @FXML
    private PasswordField Password;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        ApplicationContext context = Main.getContext();
        userMapper = context.getBean(UserMapper.class);
        System.out.println(context);
    }


    @FXML
    public void LoginButtonOnClick(){
           String UsernameValue = Username.getText().trim();
           String PasswordValue = Password.getText().trim();
           System.out.println("u+"+UsernameValue+"p+"+PasswordValue);

            User tmp = new User();
            tmp.setUsername(UsernameValue);
            tmp.setPassword(PasswordValue);
            try {
                User user1 =userMapper.login(tmp);
                System.out.println(user1.toString());
                viewDialog(1);
            }catch(Exception e){
                e.printStackTrace();
                viewDialog(2);
            }
            System.out.println(tmp.toString());

    }


    public void viewDialog(Integer x){
        DialogPane dialog = new DialogPane();
        if(x==1){
            dialog.setContentText("登录成功~~");
        }else if(x==2){
            dialog.setContentText("登录失败~~");
        }
        dialog.getButtonTypes().add(ButtonType.OK);
        Button ok = (Button)dialog.lookupButton(ButtonType.OK);


        Stage dialogStage = new Stage();
        Scene dialogScene = new Scene(dialog);
        dialogStage.setScene(dialogScene);
        dialogStage.setTitle("提示");
        ok.setOnAction(event -> {
            dialogStage.close();
        });


        dialogStage.setAlwaysOnTop(true);
        dialogStage.setResizable(false);
        dialogStage.show();
    }
}

由于@FXMLController控制器无法由spring管理,所以直接在控制器中使用@Autowire注解会导致空指针错误,所以在Main.java中主类继承了Application并编写了一个静态方法getContext获取上下文,再通过getBean()获取指定的bean

6.User.java内容

import java.io.Serializable;


public class User implements Serializable {
    private Integer id;       //用户id
    private String username;      //用户名称
    private String password;  //用户密码
    private String role;      //用户角色
    private String status;    //用户状态
    private String hiredate;  //入职时间
    private String departuredate;//离职时间

    private Integer counts;

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getHiredate() {
        return hiredate;
    }

    public void setHiredate(String hiredate) {
        this.hiredate = hiredate;
    }

    public String getDeparturedate() {
        return departuredate;
    }

    public void setDeparturedate(String departuredate) {
        this.departuredate = departuredate;
    }

    public Integer getCounts() {
        return counts;
    }

    public void setCounts(Integer counts) {
        this.counts = counts;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", role='" + role + '\'' +
                ", status='" + status + '\'' +
                ", hiredate='" + hiredate + '\'' +
                ", departuredate='" + departuredate + '\'' +
                ", counts=" + counts +
                '}';
    }
}

7.UserMapper内容

import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import pojo.User;



public interface UserMapper {
    @Select("select * from user where user_name=#{username} AND user_password=#{password}")
    @Results(id = "userMap",value = {
            @Result(id = true,column = "user_id",property = "id"),
            @Result(column = "user_name",property = "username"),
            @Result(column = "user_password",property = "password"),
            @Result(column = "user_hiredate",property = "hiredate"),
            @Result(column = "user_role",property = "role"),
            @Result(column = "user_status",property = "status"),
            @Result(column = "user_departuredate",property = "departuredate")
    })
        //用户登录
    User login(User user);
}

注:在web项目当中使用ssm框架时在控制层@Controller当中使用@Autowire并不会出现空指针错误

三、运行截图

四、数据库sql文件内容

# Host: localhost  (Version 5.1.55-community)
# Date: 2024-07-23 17:19:13
# Generator: MySQL-Front 6.0  (Build 1.57)


#
# Structure for table "user"
#

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `user_id` int(32) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `user_name` varchar(32) DEFAULT NULL COMMENT '用户名称',
  `user_password` varchar(32) DEFAULT NULL COMMENT '用户密码',
  `user_hiredate` varchar(32) DEFAULT NULL COMMENT '用户入职时间',
  `user_role` varchar(32) DEFAULT NULL COMMENT '用户角色',
  `user_departuredate` varchar(32) DEFAULT NULL COMMENT '用户离职时间',
  `user_status` varchar(1) DEFAULT NULL COMMENT '用户状态(0:正常,1:禁用)',
  PRIMARY KEY (`user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=352 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

#
# Data for table "user"
#

INSERT INTO `user` VALUES (2,'张三','12345','2021-01-07','student',NULL,'0'),(3,'老六','qwerty','2023-06-18','student',NULL,'0'),(343,'牢大','12345','2024-05-22','student',NULL,'0'),(345,'静风','12345','2024-07-21','manager',NULL,'0'),(346,'用户1','12345','2024-07-12','student',NULL,'0'),(347,'凤溪','12345','2024-07-13','manager',NULL,'0'),(348,'月见','12345','2024-07-05','manager',NULL,'0'),(349,'用户2','12345','2024-07-06','manager',NULL,'0'),(350,'八九','12345','2024-07-06','teacher',NULL,'1'),(351,'admin','23456','2024-07-19','manager',NULL,'0');

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值