前言
一般使用SprootBoot是使用SprootBootTest和Junit配合,但如果不是写测试类,怎么与javafx配合使用?笔者不知道,经过多次搜索以及问了各种AI,最后误打误撞,终于想通了,其实很简单。
用了许久时间,终于成功了。关于这三者的配置,笔者就不多说,可以参看官网或者其他方式获得配置。
正文
废话不多说,直接进入主题。假设三者已经配置好了。
运行后的UI界面如下图所示。
输入手机号和用户密码,进行登录操作,在登录过程中,此时就需要查数据库(MySQL),在确定按钮对应的槽函数(ok)的代码如下:
ApplicationContext context = TakeAwayPlusApplication.getContext();
customerMapper = context.getBean(CustomerMapper.class);
可能第一眼感觉懵逼,不能理解,且听笔者细细道来。
第一行代码
ApplicationContext context = TakeAwayPlusApplication.getContext();
下一步进入getContext方法,其中TakeAwayPlusApplication代码如下。
package dbtest.dbutils.takeawayplus;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
@MapperScan("dbtest.dbutils.takeawayplus.mapper")
public class TakeAwayPlusApplication{
public static void main(String[] args) {
SpringApplication.run(TakeAwayPlusApplication.class, args);
}
public static ApplicationContext getContext() {
return SpringApplication.run(TakeAwayPlusApplication.class);
}
}
视角给到getContext方法。
这一步其实是最关键的。笔者之所以会有这个想法,问了各种Al和许多大佬的代码,有的代码需要Controller,有的需要init方法等,总之,不能运行。而GitHub Copliot给出的代码,其实很接近了。笔者也是从GitHub Copliot的代码中,进一步修改,最后运行成功。把Github Copliot给出的原话如下。
可惜返回的context为null,不是ApplicationContext对象。后来笔者继续追问,为什么context为空?但也只是在上面的代码做出一点修改,并没有实际解决,context还是为null,后面代码也就不用看了,肯定不能执行。
但在笔者不停的追问过程中,GitHub Copliot说了下面这些话。
上面这句话的意思是SpringApplication.run(TakeAwayPlusApplication.class, args)有返回值,会返回一个 ApplicationContext对象。既然如此,笔者直接调用这行代码。
public static ApplicationContext getContext() {
return SpringApplication.run(TakeAwayPlusApplication.class);
}
}
代码运行成功。完美,其他发现没有用,都可以删除,代码能跑(0.0)(0.0)。
第二行代码
customerMapper = context.getBean(CustomerMapper.class);
废话不多说,就是调用getBean方法,返回了mapper接口。
mapper接口中的具体方法,就不多说,具体方法,具体实现。
运行结果
打印context和mapper接口,结果如图所示。
运行成功。