博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
纯jfinal实现,数据库表自动创建实体类
阅读量:5759 次
发布时间:2019-06-18

本文共 4281 字,大约阅读时间需要 14 分钟。

hot3.png

 

这段时间在修改毕设的架构,之前用的是springmvc+hibernate,越到项目后头,hibernate越来越不受控制,个人还是比较喜欢用sql来处理表与表直接的关联,于是我想到了jfinal,之前用过jfianl,所以这次把项目迁移到jfianl上仅仅花了一天的时间。

昨天无意中看到社区有人写了个为jfianl生成实体类的工具,但细看了一下,里面使用的是jdbc代码,个人比较倾向jfianl的简洁,所以用纯jfianl的方式也写了个工具类。

package org.piaohao.util.database;import com.jfinal.kit.StringKit;import com.jfinal.plugin.activerecord.Db;import com.jfinal.plugin.activerecord.DbKit;import com.jfinal.plugin.c3p0.C3p0Plugin;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.util.List;/** * 此工具类,可以根据数据库表自动生成实体类,生成的实体类包含静态dao引用,以及各列字段, 生成的列字段对应了java的数据类型 Created on : * 2013-5-6, 21:58:11 * * @author piaohao */public class AutoCreateEntity {    private static final String url = "jdbc:mysql://localhost/transport_safe";    private static final String name = "root";    private static final String password = "root";    /**注册jfinal数据库插件*/    static {        C3p0Plugin cp = new C3p0Plugin(url, name, password);        cp.start();//启动插件        DbKit.setDataSource(cp.getDataSource());    }    /**     * 根据数据库表,自动生成实体文件     *     * @param path 文件存放路径     * @param packageName 包名     * @param withField 是否生成属性字段     */    public static void process(String path, String packageName, boolean withField) {        try {            List objs = Db.query("select table_name from information_schema.tables where table_schema=?",                    "transport_safe");//查询所有表名            for (int i = 0; i < objs.size(); i++) {                String tableName = (String) objs.get(i);                String className = StringKit.firstCharToUpperCase(tableName);                String result = "package " + packageName + ";\n\n";                result += "import com.jfinal.plugin.activerecord.Model; \n\n";                result += "public class " + className + " extends Model<" + className + ">{\n\n";                result += "    public static final " + className + " dao = new " + className + "();\n\n";                if (withField) {                    result += "    /**表名**/ \n";                    result += "    public static String TABLE = \"" + tableName + "\";\n";                    List records = Db.query("select * from information_schema.columns where table_schema=? and table_name=?",                            "transport_safe", tableName);//查询表中所有列名                    for (int j = 0; j < records.size(); j++) {                        String fieldName = (String) ((Object[]) records.get(j))[3];//数组的第4个元素为列名                        String fieldType = (String) ((Object[]) records.get(j))[7];//数组的第8个元素为列类型                        fieldType = convert(fieldType);                        result += "    public static " + fieldType + " " + StringKit.firstCharToLowerCase(fieldName) + ";\n";                    }                }                result += "\n }";                //写文件                File f = new File(path, className + ".java");                if (!f.exists()) {                    f.createNewFile();                }                BufferedWriter bw = new BufferedWriter(new FileWriter(f));                bw.write(result);                bw.close();            }        } catch (Exception e) {            e.printStackTrace();        }    }    private static String convert(String fieldType) {        if (fieldType.equalsIgnoreCase("varchar") || fieldType.equalsIgnoreCase("char")                || fieldType.equalsIgnoreCase("blob") || fieldType.equalsIgnoreCase("text")) {            return "String";        } else if (fieldType.equalsIgnoreCase("int") || fieldType.equalsIgnoreCase("smallint")) {            return "Integer";        } else if (fieldType.equalsIgnoreCase("bit")) {            return "Boolean";        } else if (fieldType.equalsIgnoreCase("float") || fieldType.equalsIgnoreCase("double")) {            return "Double";        } else if (fieldType.equalsIgnoreCase("bigint")) {            return "Long";        } else if (fieldType.equalsIgnoreCase("datetime")) {            return "java.sql.TimeStamp";        } else {            return "String";        }    }    /**     *     * @param args     */    public static void main(String[] args) {        AutoCreateEntity.process("d:/", "piaohao.entity", true);    }}

写的不好之处,请多多见谅,等答辩完之后,我会开放系统的源代码。

系统使用extjs4.X+jfinal实现。

转载于:https://my.oschina.net/piaohao/blog/128213

你可能感兴趣的文章
Cocos2d-x3.2 Ease加速度
查看>>
[EntLib]关于SR.Strings的使用办法[加了下载地址]
查看>>
中小型网站架构分析及优化
查看>>
写shell的事情
查看>>
负载均衡之Haproxy配置详解(及httpd配置)
查看>>
标准与扩展ACL 、 命名ACL 、 总结和答疑
查看>>
查找恶意的TOR中继节点
查看>>
MAVEN 属性定义与使用
查看>>
shell高级视频答学生while循环问题
查看>>
使用@media实现IE hack的方法
查看>>
《11招玩转网络安全》之第一招:Docker For Docker
查看>>
hive_0.11中文用户手册
查看>>
hiveserver2修改线程数
查看>>
oracle体系结构
查看>>
Microsoft Exchange Server 2010与Office 365混合部署升级到Exchange Server 2016混合部署汇总...
查看>>
Proxy服务器配置_Squid
查看>>
开启“无线网络”,提示:请启动windows零配置wzc服务
查看>>
【SDN】Openflow协议中对LLDP算法的理解--如何判断非OF区域的存在
查看>>
纯DIV+CSS简单实现Tab选项卡左右切换效果
查看>>
栈(一)
查看>>