首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
JFinal能通过model反向生成数据库表结构吗?
天晴
2023-05-11 12:26
JFinal能通过model反向生成数据库表结构吗?
有没有大佬实现了?
项目:
JFinal
评论区
天晴
2023-05-11 12:35
哦,我理解错了,您是想知道如何通过JFinal的Model类来生成数据库表结构对吧?其实,JFinal也提供了类似于Hibernate的“反向工程”功能,可以通过Model类生成对应的数据库表结构。具体操作如下:
1. 在项目的配置文件`config.properties`中添加以下配置项:
```
# 数据库连接信息
jdbcUrl=jdbc:mysql://localhost:3306/mydb
user=root
password=root
# model 生成器配置
model.packageName=com.example.model
model.template=/template/model_template.jf
model.baseModelPackageName=com.example.model.base
model.baseModelOutputDir=src/main/java/com/example/model/base
model.modelOutputDir=src/main/java/com/example/model
```
其中,`jdbcUrl`、`user`、`password`分别是你的数据库连接信息,`model.packageName`是生成的Model类的包名,`model.template`是生成Model类的模板文件路径,`model.baseModelPackageName`是生成的BaseModel类的包名,`model.baseModelOutputDir`是生成的BaseModel类的输出目录,`model.modelOutputDir`是生成的Model类的输出目录。
2. 创建Model类
在项目的`com.example.model`包下创建一个继承自`com.jfinal.plugin.activerecord.Model`的Java类,例如:
```java
package com.example.model;
import com.jfinal.plugin.activerecord.Model;
public class User extends Model {
public static final User dao = new User();
}
```
这里我们创建了一个名为`User`的Model类,它继承自`Model`,并且定义了一个静态的`dao`对象,用来进行数据库操作。
3. 生成数据库表结构
然后,我们可以使用JFinal提供的`Generator`类来生成数据库表结构。在项目的`/src/main/java`目录下创建一个Java类,例如:
```java
package com.example;
import com.jfinal.plugin.activerecord.generator.Generator;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.kit.PathKit;
import java.util.ArrayList;
import java.util.List;
public class AppGenerator {
public static void main(String[] args) {
// 初始化数据库连接
DruidPlugin dp = new DruidPlugin("jdbc:mysql://localhost:3306/mydb", "root", "root");
dp.start();
// 配置Generator
Generator generator = new Generator(dp.getDataSource(), "com.example.model", PathKit.getWebRootPath() + "/src/main/java");
// 添加需要生成的Model类
generator.addIncludedTable("user");
// 设置生成的BaseModel类名
generator.setBaseModelName("BaseModel");
// 设置生成的Model类是否继承BaseModel
generator.setGenerateChainSetter(true);
问了chatGTP,得到了这个答案。
回复
zzutligang
2023-05-12 11:33
这个解决方案是通过数据库表结构自动生成Model,你是想通过Model逆向生成表结构。只能自己写了。
回复
杜福忠
2023-05-12 18:15
不划算,JF的Model并不是传统的JavaBean,手动编写getXXX、setXXX方法极不方便。Model没有成员变量属性,所以也用不上IDEA的属性生成get/set,而且就算反射拿到setXXX方法获取其参数类型,比如String类型,那也不知道应该设置多长varchar还是text还是其他。所以工具作用不大。
目前了解到的一个场景就是,老项目Model有生成setXXX方法,但是丢失数据库结构了,需要找回数据库表的时候,可以利用反射Model生成建表SQL,约定Java类型对应的数据库字段类型,建表后再微调数据库。。。但是感觉不如重新做一个各个框架都可以用上最新的了
回复
发送
我要反馈
热门反馈
扫码入社
1. 在项目的配置文件`config.properties`中添加以下配置项:
```
# 数据库连接信息
jdbcUrl=jdbc:mysql://localhost:3306/mydb
user=root
password=root
# model 生成器配置
model.packageName=com.example.model
model.template=/template/model_template.jf
model.baseModelPackageName=com.example.model.base
model.baseModelOutputDir=src/main/java/com/example/model/base
model.modelOutputDir=src/main/java/com/example/model
```
其中,`jdbcUrl`、`user`、`password`分别是你的数据库连接信息,`model.packageName`是生成的Model类的包名,`model.template`是生成Model类的模板文件路径,`model.baseModelPackageName`是生成的BaseModel类的包名,`model.baseModelOutputDir`是生成的BaseModel类的输出目录,`model.modelOutputDir`是生成的Model类的输出目录。
2. 创建Model类
在项目的`com.example.model`包下创建一个继承自`com.jfinal.plugin.activerecord.Model`的Java类,例如:
```java
package com.example.model;
import com.jfinal.plugin.activerecord.Model;
public class User extends Model {
public static final User dao = new User();
}
```
这里我们创建了一个名为`User`的Model类,它继承自`Model`,并且定义了一个静态的`dao`对象,用来进行数据库操作。
3. 生成数据库表结构
然后,我们可以使用JFinal提供的`Generator`类来生成数据库表结构。在项目的`/src/main/java`目录下创建一个Java类,例如:
```java
package com.example;
import com.jfinal.plugin.activerecord.generator.Generator;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.kit.PathKit;
import java.util.ArrayList;
import java.util.List;
public class AppGenerator {
public static void main(String[] args) {
// 初始化数据库连接
DruidPlugin dp = new DruidPlugin("jdbc:mysql://localhost:3306/mydb", "root", "root");
dp.start();
// 配置Generator
Generator generator = new Generator(dp.getDataSource(), "com.example.model", PathKit.getWebRootPath() + "/src/main/java");
// 添加需要生成的Model类
generator.addIncludedTable("user");
// 设置生成的BaseModel类名
generator.setBaseModelName("BaseModel");
// 设置生成的Model类是否继承BaseModel
generator.setGenerateChainSetter(true);
问了chatGTP,得到了这个答案。