精华内容
下载资源
问答
  • 展开全部首先有几点声明:1、代码是在别人的基础进行改写的;2、大家32313133353236313431303231363533e59b9ee7ad9431333363393066有...//这个是做转换的类,里面的DB只是封装了数据库的连接,大家可以用自己的,随...

    展开全部

    首先有几点声明:

    1、代码是在别人的基础进行改写的;

    2、大家32313133353236313431303231363533e59b9ee7ad9431333363393066有什么改进的意见可以告诉我,也可以自己改好共享给其他人;

    3、刚刚毕业,水平有限,肯定有许多不足之处;

    4、希望刚刚学习java的同学能有所启发。

    //这个是做转换的类,里面的DB只是封装了数据库的连接,大家可以用自己的,随意

    package com.tt.util.gen.entity.tool;

    import java.io.File;

    import java.io.FileWriter;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.PrintWriter;

    import java.sql.Connection;

    import java.sql.DatabaseMetaData;

    import java.sql.DriverManager;

    import java.sql.PreparedStatement;

    import java.sql.ResultSet;

    import java.sql.ResultSetMetaData;

    import java.sql.SQLException;

    import java.util.ArrayList;

    import java.util.Date;

    import java.util.List;

    import java.util.Properties;

    import com.tt.util.DB;

    public class GenEntityMysql {

    private String packageOutPath;// 指定实体生成所在包的路径

    private String authorName;// 作者名字

    private String tablename;// 表名

    private String databasename;// 数据库名

    private List tablenames;// 拿到对应数据库中所有的实体类(实体类需要与其他表明做区分)

    private List colnames; // 列名集合

    private List colTypes; // 列名类型集合

    private boolean f_util = false; // 是否需要导入包java.util.*

    private boolean f_sql = false; // 是否需要导入包java.sql.*

    /*

    * 构造函数

    */

    public GenEntityMysql() {

    // 使用properties读取配置文件

    Properties prop = new Properties();

    try {

    InputStream genentity = getClass().getResourceAsStream(

    "/genentity.properties");

    prop.load(genentity);

    if (genentity != null) {

    genentity.close();

    }

    } catch (Exception e) {

    System.out.println("file " + "catalogPath.properties"

    + " not found!\n" + e);

    }

    this.databasename = prop.getProperty("databasename").toString();

    this.tablename = prop.getProperty("tablename").toString();

    this.packageOutPath = prop.getProperty("packageOutPath").toString();

    this.authorName = prop.getProperty("authorName").toString();

    }

    // 创建多个实体类

    private void genEntity(List tablenames, Connection conn) {

    // 使用第归生成文件

    for (String tablename : tablenames) {

    this.genEntity(tablename, conn);

    }

    }

    // 创建单个实体类

    private void genEntity(String tablename, Connection conn) {

    String sql = "select * from " + tablename;

    PreparedStatement pstmt = null;

    ResultSetMetaData rsmd = null;

    try {

    pstmt = DB.getPStmt(conn, sql);

    rsmd = pstmt.getMetaData();

    int size = rsmd.getColumnCount(); // 统计列

    colnames = new ArrayList();

    colTypes = new ArrayList();

    for (int i = 0; i < size; i++) {

    colnames.add(rsmd.getColumnName(i + 1));

    colTypes.add(rsmd.getColumnTypeName(i + 1));

    if (colTypes.get(i).equalsIgnoreCase("datetime")) {

    f_util = true;

    }

    if (colTypes.get(i).equalsIgnoreCase("image")

    || colTypes.get(i).equalsIgnoreCase("text")) {

    f_sql = true;

    }

    }

    System.out.println(colnames);

    System.out.println(colTypes);

    } catch (SQLException e1) {

    // TODO Auto-generated catch block

    e1.printStackTrace();

    } finally {

    DB.close(pstmt);

    }

    // 在内存中生成代码

    String content = parse(tablename);

    // 写入到文件中

    try {

    File directory = new File("");

    String outputPath = directory.getAbsolutePath() + "/src/"

    + this.packageOutPath.replace(".", "/") + "/";

    System.out.println("写出的路径:" + outputPath);

    // 检测路径是否存在,不存在就创建路径

    File path = new File(outputPath);

    if (!path.exists() && !path.isDirectory()) {

    path.mkdir();

    System.out.println(path.exists());

    }

    // 创建文件

    outputPath += initcap(tablename) + ".java";

    File file = new File(outputPath);

    if (!file.exists()) {

    file.createNewFile();

    }

    // 写出到硬盘

    FileWriter fw = new FileWriter(file);

    PrintWriter pw = new PrintWriter(fw);

    pw.println(content);

    pw.flush();

    pw.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    private void getAllEntityTable(Connection conn, List tablenames) {

    ResultSet rs = null;

    try {

    DatabaseMetaData dmd = (DatabaseMetaData) conn.getMetaData();

    /*

    * TABLE_CAT String => 表类别(可为 null)

    * TABLE_SCHEM String => 表模式(可为null)

    * TABLE_NAME String => 表名称

    * TABLE_TYPE String => 表类型

    */

    rs = dmd.getTables(null, null, "%", null);

    while (rs.next()) {

    tablenames.add(rs.getString("TABLE_NAME"));

    }

    } catch (SQLException e) {

    e.printStackTrace();

    } finally {

    try {

    rs.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    }

    /**

    *

    * @param tablename

    * @return

    */

    private String parse(String tablename) {

    StringBuffer sb = new StringBuffer();

    // 判断是否导入工具包

    if (f_util) {

    sb.append("import java.util.Date;\r\n");

    }

    if (f_sql) {

    sb.append("import java.sql.*;\r\n");

    }

    sb.append("package " + this.packageOutPath + ";\r\n");

    sb.append("\r\n");

    // 注释部分

    sb.append(" /**\r\n");

    sb.append(" * " + tablename + " 实体类\r\n");

    sb.append(" * " + new Date() + " " + this.authorName + "\r\n");

    sb.append(" */ \r\n");

    // 实体部分

    sb.append("\r\n\r\npublic class " + initcap(tablename) + "{\r\n");

    processAllAttrs(sb);// 属性

    processAllMethod(sb);// get set方法

    sb.append("}\r\n");

    return sb.toString();

    }

    /**

    * 功能:生成所有属性

    *

    * @param sb

    */

    private void processAllAttrs(StringBuffer sb) {

    for (int i = 0; i < colnames.size(); i++) {

    sb.append("\tprivate " + sqlType2JavaType(colTypes.get(i)) + " "

    + colnames.get(i) + ";\r\n");

    }

    }

    /**

    * 功能:生成所有方法

    *

    * @param sb

    */

    private void processAllMethod(StringBuffer sb) {

    for (int i = 0; i < colnames.size(); i++) {

    sb.append("\tpublic void set" + initcap(colnames.get(i)) + "("

    + sqlType2JavaType(colTypes.get(i)) + " " + colnames.get(i)

    + "){\r\n");

    sb.append("\t\tthis." + colnames.get(i) + "=" + colnames.get(i)

    + ";\r\n");

    sb.append("\t}\r\n");

    sb.append("\tpublic " + sqlType2JavaType(colTypes.get(i)) + " get"

    + initcap(colnames.get(i)) + "(){\r\n");

    sb.append("\t\treturn " + colnames.get(i) + ";\r\n");

    sb.append("\t}\r\n");

    }

    }

    /**

    * 功能:将输入字符串的首字母改成大写

    *

    * @param str

    * @return

    */

    private String initcap(String str) {

    char[] ch = str.toCharArray();

    if (ch[0] >= 'a' && ch[0] <= 'z') {

    ch[0] = (char) (ch[0] - 32);

    }

    return new String(ch);

    }

    /**

    * 功能:获得列的数据类型

    *

    * @param sqlType

    * @return

    */

    private String sqlType2JavaType(String sqlType) {

    if (sqlType.equalsIgnoreCase("bit")) {

    return "boolean";

    } else if (sqlType.equalsIgnoreCase("tinyint")) {

    return "byte";

    } else if (sqlType.equalsIgnoreCase("smallint")) {

    return "short";

    } else if (sqlType.equalsIgnoreCase("int")) {

    return "int";

    } else if (sqlType.equalsIgnoreCase("bigint")) {

    return "long";

    } else if (sqlType.equalsIgnoreCase("float")) {

    return "float";

    } else if (sqlType.equalsIgnoreCase("decimal")

    || sqlType.equalsIgnoreCase("numeric")

    || sqlType.equalsIgnoreCase("real")

    || sqlType.equalsIgnoreCase("money")

    || sqlType.equalsIgnoreCase("smallmoney")) {

    return "double";

    } else if (sqlType.equalsIgnoreCase("varchar")

    || sqlType.equalsIgnoreCase("char")

    || sqlType.equalsIgnoreCase("nvarchar")

    || sqlType.equalsIgnoreCase("nchar")

    || sqlType.equalsIgnoreCase("text")) {

    return "String";

    } else if (sqlType.equalsIgnoreCase("datetime")) {

    return "Date";

    } else if (sqlType.equalsIgnoreCase("image")) {

    return "Blod";

    }

    return null;

    }

    /**

    * 出口 TODO

    *

    * @param args

    */

    public static void main(String[] args) {

    new GenEntityMysql().start();

    }

    private void start() {

    // 创建连接

    Connection conn = DB.getConn();

    if (databasename != null && !databasename.equals("")

    && tablename != null && !tablename.equals("")) {

    System.out.println("databasename 和 tablename 不能同时存在");

    } else {

    // 如果配置文件中有数据库名字,则可以拿到其中所有的实体类

    if (databasename != null && !databasename.equals("")) {

    // 获取所有实体表名字

    tablenames = new ArrayList();

    getAllEntityTable(conn, tablenames);

    System.out.println(tablenames);

    // 为每个实体表生成实体类

    genEntity(tablenames, conn);

    } else {

    // 为指定实体表生成实体类

    genEntity(tablename, conn);

    }

    // 关闭数据库连接

    if (conn != null) {

    DB.close(conn);

    }

    }

    }

    }

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import ...

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.PreparedStatement;

    import java.sql.ResultSet;

    import java.sql.ResultSetMetaData;

    import java.sql.SQLException;

    import com.onedear.util.database.DataBaseType;

    /**

    * 数据库工具类

    *

    * @author onedear

    * @data:2010-10-21 下午06:12:39

    */

    public class DBUtil {

    public static final int SQLSERVER = 1;

    public static final int MYSQL = 2;

    public static final int ORACLE = 3;

    private static final String LINE = "\r\n";

    private static final String TAB = "\t";

    /**

    * 用于调试,懒得写相应的参数

    *

    * @return

    * @throws SQLException

    * @throws ClassNotFoundException

    */

    public static Connection getConnection() throws ClassNotFoundException, SQLException {

    return getConnection("192.168.0.161:1997", "ETForMonitor_V2", "sa",

    "password", DBUtil.SQLSERVER);

    }

    /**

    *

    * 通过jdbc获取相应的数据库链接connection

    *

    * @param ipport

    * ip+port ,eg.: 192.168.0.161:1997

    * @param dbName

    * databaseName ,eg. : ETForMonitor_V2

    * @param username

    * eg.:sa

    * @param password

    * eg. :password

    * @param type

    * 请看本类的静态变量

    * @return

    * @throws ClassNotFoundException

    * @throws SQLException

    */

    public static Connection getConnection(String ipport, String dbName,

    String username, String password, int type)

    throws ClassNotFoundException, SQLException {

    String jdbcString = null;

    if (type == SQLSERVER) {

    jdbcString = "jdbc:jtds:sqlserver://" + ipport + ";databaseName="

    + dbName;

    Class.forName("net.sourceforge.jtds.jdbc.Driver");

    } else if (type == MYSQL) {

    jdbcString = "jdbc:mysql://" + ipport + "/" + dbName;

    Class.forName("org.gjt.mm.mysql.Driver");

    } else if (type == ORACLE) {

    jdbcString = "jdbc:oracle:thin:@" + ipport + ":" + dbName;

    Class.forName("oracle.jdbc.driver.OracleDriver");

    }

    Connection connection = null;

    connection = DriverManager

    .getConnection(jdbcString, username, password);

    return connection;

    }

    /**

    * 数据库表生成相应的java类,生成规则

    * 类名= 表名(第一个字母大写)

    * 属性名= 数据库列名

    * get/set方法 = 根据标准生成

    * 其中生成的基本类型均为包装类,例如Integer , Long , Boolean , String

    * @param connection

    * @param tableName

    * @param dbType

    * @param path

    * @param isCreateFile

    * @return

    * @throws SQLException

    */

    public static String table2pojo(Connection connection, String tableName,

    int dbType, String path , boolean isCreateFile) throws SQLException {

    String sql = "select * from " + tableName + " where 1 <> 1";

    PreparedStatement ps = null;

    ResultSet rs = null;

    ps = connection.prepareStatement(sql);

    rs = ps.executeQuery();

    ResultSetMetaData md = rs.getMetaData();

    int columnCount = md.getColumnCount();

    StringBuffer sb = new StringBuffer();

    tableName = tableName.substring(0, 1).toUpperCase() +tableName.subSequence(1, tableName.length());

    sb.append("public class " + tableName + " {");

    sb.append(LINE);

    for (int i = 1; i <= columnCount; i++) {

    sb.append(TAB);

    sb.append("private "

    + DataBaseType.getPojoType(md.getColumnTypeName(i)) + " "

    + md.getColumnName(i) + ";");

    // System.out.println("name : " + md.getColumnName(i) +

    // " , type :"

    // + md.getColumnTypeName(i));

    sb.append(LINE);

    }

    for (int i = 1; i <= columnCount; i++) {

    sb.append(TAB);

    String pojoType = DataBaseType.getPojoType(md.getColumnTypeName(i));

    String columnName = md.getColumnName(i);

    String getName = null;

    String setName = null;

    if (columnName.length() > 1) {

    getName = "public "+pojoType+" get" + columnName.substring(0, 1).toUpperCase()

    + columnName.substring(1, columnName.length()) + "() {";

    setName = "public void set" + columnName.substring(0, 1).toUpperCase()

    + columnName.substring(1, columnName.length()) + "("

    + pojoType + " " + columnName + ") {";

    } else {

    getName = "public get" + columnName.toUpperCase() + "() {";

    setName = "public set" + columnName.toUpperCase() + "(" + pojoType

    + " " + columnName + ") {";

    }

    sb.append(LINE).append(TAB).append(getName);

    sb.append(LINE).append(TAB).append(TAB);

    sb.append("return " + columnName +";");

    sb.append(LINE).append(TAB).append("}");

    sb.append(LINE);

    sb.append(LINE).append(TAB).append(setName);

    sb.append(LINE).append(TAB).append(TAB);

    sb.append("this." + columnName + " = " + columnName +";" );

    sb.append(LINE).append(TAB).append("}");

    sb.append(LINE);

    }

    sb.append("}");

    System.out.println(sb.toString());

    if(isCreateFile)

    FileUtils.stringToFile(null,tableName +".java" , sb.toString());

    return null;

    }

    public static void main(String[] args) throws SQLException, ClassNotFoundException {

    Connection con = getConnection();

    table2pojo(con, "PlayBackVisitorControl", DBUtil.SQLSERVER, "" , true);

    }

    }

    展开全文
  • 介绍EasyCode是基于IntelliJ IDEA Ultimate版开发的一个代码生成插件,主要通过自定义模板(基于velocity)来生成各种你想要的代码。通常用于生成Entity、Dao、Service、Controller。如果你动手能力强还可以用于生成...

    前言

    一次偶然的机会发现了这个功能强大的idea插件,当时也就随手收藏了一下,没想到在后面的工作中给节省了很多时间。

    介绍

    EasyCode是基于IntelliJ IDEA Ultimate版开发的一个代码生成插件,主要通过自定义模板(基于velocity)来生成各种你想要的代码。通常用于生成Entity、Dao、Service、Controller。如果你动手能力强还可以用于生成HTML、JS、PHP等代码。理论上来说只要是与数据有关的代码都是可以生成的。

    使用环境

    IntelliJ IDEA Ultimate版(172+)

    功能说明:

    支持多表同时操作

    支持同时生成多个模板

    支持自定义模板

    支持自定义类型映射(支持正则)

    支持自定义扩展属性

    支持对表属性进行手动配置

    所有配置项目支持分组模式,在不同项目(或选择不同数据库时),只需要切换对应的分组,所有配置统一变化。

    安装和使用

    具体的安装和使用参照该插件作者的博客 https://gitee.com/hbyufan/EasyCode

    使用ORACLE注意事项

    我们公司用的都是oracle数据库,因此我当时下载这个插件之后也是使用了oracle数据库生成代码的,当我兴致勃勃的选中一张表点击Generate Code的时候发现,报个未知的错误类型,一脸懵,心想这玩意不支持oracle的number类型啊,有点灰心,然后又仔细的看了下作者的博客,发现原来类型是可以配置的,加上number的正则number(\(\*\))?,number(\(\d+\))?即可,其他缺少的类型只要加上对应的正则以及对应的javaType就可以了,配置如下

    生成包含注解的实体类

    解决好类型错误之后,终于可以生成对应的实体类了,生成的效果如下

    package com.chq.common.model.entity;

    import java.util.Date;

    /**

    * 城市管理表(XhsCityManage)表实体类

    *

    * @author chenhq

    * @since 2018-09-13 20:17:24

    */

    public class XhsCityManage {

    //主键

    private String id;

    //城市代码

    private String cityCode;

    //城市名称

    private String cityName;

    //入驻状态:0-未入住,1-已入驻

    private String status;

    //城市简介

    private String cityIntro;

    //创建时间

    private Date createTime;

    private Date updateTime;

    //是否展示企业详情页下载舆情报告按钮,0:显示, 1:不显示

    private String showButton;

    public String getId() {

    return id;

    }

    public void setId(String id) {

    this.id = id;

    }

    public String getCityCode() {

    return cityCode;

    }

    public void setCityCode(String cityCode) {

    this.cityCode = cityCode;

    }

    public String getCityName() {

    return cityName;

    }

    public void setCityName(String cityName) {

    this.cityName = cityName;

    }

    public String getStatus() {

    return status;

    }

    public void setStatus(String status) {

    this.status = status;

    }

    public String getCityIntro() {

    return cityIntro;

    }

    public void setCityIntro(String cityIntro) {

    this.cityIntro = cityIntro;

    }

    public Date getCreateTime() {

    return createTime;

    }

    public void setCreateTime(Date createTime) {

    this.createTime = createTime;

    }

    public Date getUpdateTime() {

    return updateTime;

    }

    public void setUpdateTime(Date updateTime) {

    this.updateTime = updateTime;

    }

    public String getShowButton() {

    return showButton;

    }

    public void setShowButton(String showButton) {

    this.showButton = showButton;

    }

    }

    生成的效果还是不错的,但是还没有得到我的预期,于是通过再次研究作者的文章发现这些都是也是可以配置的,使用velocit模板语言的语法去写的

    增加了一些空行,修改了注释的方式,增加了hibernate的注解,生成的效果如下,是不是清爽了许多,至此大功告成啦!除此之外,还可以生成dao、service、controller等等,都可以自己去配置,简直是太方便了~

    package com.chq.common.model;

    import java.util.Date;

    import javax.persistence.Column;

    import javax.persistence.GeneratedValue;

    import javax.persistence.Id;

    import javax.persistence.Table;

    import javax.persistence.Entity;

    import org.hibernate.annotations.GenericGenerator;

    import java.io.Serializable;

    /**

    * @description 城市管理表(XHS_CITY_MANAGE)表实体类

    * @author chenhq

    * @date 2018-09-13 20:23:58

    */

    @Entity

    @Table(name = "XHS_CITY_MANAGE")

    public class XhsCityManage implements Serializable {

    /**

    * 主键

    */

    private String id;

    /**

    * 城市代码

    */

    private String cityCode;

    /**

    * 城市名称

    */

    private String cityName;

    /**

    * 入驻状态:0-未入住,1-已入驻

    */

    private String status;

    /**

    * 城市简介

    */

    private String cityIntro;

    /**

    * 创建时间

    */

    private Date createTime;

    private Date updateTime;

    /**

    * 是否展示企业详情页下载舆情报告按钮,0:显示, 1:不显示

    */

    private String showButton;

    @Id

    @Column(name = "ID")

    @GenericGenerator(name = "system-uuid", strategy = "uuid.hex")

    @GeneratedValue(generator = "system-uuid")

    public String getId() {

    return id;

    }

    public void setId(String id) {

    this.id = id;

    }

    @Column(name = "CITY_CODE")

    public String getCityCode() {

    return cityCode;

    }

    public void setCityCode(String cityCode) {

    this.cityCode = cityCode;

    }

    @Column(name = "CITY_NAME")

    public String getCityName() {

    return cityName;

    }

    public void setCityName(String cityName) {

    this.cityName = cityName;

    }

    @Column(name = "STATUS")

    public String getStatus() {

    return status;

    }

    public void setStatus(String status) {

    this.status = status;

    }

    @Column(name = "CITY_INTRO")

    public String getCityIntro() {

    return cityIntro;

    }

    public void setCityIntro(String cityIntro) {

    this.cityIntro = cityIntro;

    }

    @Column(name = "CREATE_TIME")

    public Date getCreateTime() {

    return createTime;

    }

    public void setCreateTime(Date createTime) {

    this.createTime = createTime;

    }

    @Column(name = "UPDATE_TIME")

    public Date getUpdateTime() {

    return updateTime;

    }

    public void setUpdateTime(Date updateTime) {

    this.updateTime = updateTime;

    }

    @Column(name = "SHOW_BUTTON")

    public String getShowButton() {

    return showButton;

    }

    public void setShowButton(String showButton) {

    this.showButton = showButton;

    }

    }

    最后附上自己的entity配置

    #*

    说明文档:

    属性

    $packageName 选择的包名

    $author 设置中的作者

    $encode 设置的编码

    $modulePath 选中的module路径

    $projectPath 项目绝对路径

    对象

    $tableInfo 表对象

    obj 表原始对象

    name 表名(转换后的首字母大写)

    comment 表注释

    fullColumn 所有列

    pkColumn 主键列

    otherColumn 其他列

    savePackageName 保存的包名

    savePath 保存路径

    saveModelName 保存的model名称

    columnInfo 列对象

    obj 列原始对象

    name 列名(首字母小写)

    comment 列注释

    type 列类型(类型全名)

    ext 附加字段(Map类型)

    $tableInfoList 所有选中的表

    $importList 所有需要导入的包集合

    回调

    &callback

    setFileName(String) 设置文件储存名字

    setSavePath(String) 设置文件储存路径,默认使用选中路径

    工具

    $tool

    firstUpperCase(String) 首字母大写方法

    firstLowerCase(String) 首字母小写方法

    getClsNameByFullName(String) 通过包全名获取类名

    getJavaName(String) 将下划线分割字符串转驼峰命名(属性名)

    getClassName(String) 将下划线分割字符串转驼峰命名(类名)

    append(... Object) 多个数据进行拼接

    $time

    currTime(String) 获取当前时间,指定时间格式(默认:yyyy-MM-dd HH:mm:ss)

    *#

    ##设置包路径

    ##设置回调

    $!callback.setFileName($tool.append($tableInfo.name, ".java"))

    $!callback.setSavePath($tool.append($tableInfo.savePath, "/"))

    #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}#{end};

    #foreach($import in $importList)

    import $!import;

    #end

    import javax.persistence.Column;

    import javax.persistence.GeneratedValue;

    import javax.persistence.Id;

    import javax.persistence.Table;

    import javax.persistence.Entity;

    import org.hibernate.annotations.GenericGenerator;

    import java.io.Serializable;

    /**

    * @description $!{tableInfo.comment}($tableInfo.obj.getName())表实体类

    * @author $author

    * @date $!time.currTime()

    */

    @Entity

    @Table(name = "$tableInfo.obj.getName()")

    public class $!{tableInfo.name} implements Serializable {

    #foreach($column in $tableInfo.fullColumn)

    #if(${velocityCount} == 1)

    #end

    #if(${column.comment})

    /**

    * ${column.comment}

    */

    #end

    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};

    #end

    #foreach($column in $tableInfo.fullColumn)

    #if(${velocityCount} == 1)

    @Id

    @Column(name = "$column.obj.getName()")

    @GenericGenerator(name = "system-uuid", strategy = "uuid.hex")

    @GeneratedValue(generator = "system-uuid")

    #else

    @Column(name = "$column.obj.getName()")

    #end

    public $!{tool.getClsNameByFullName($column.type)} get$!{tool.firstUpperCase($column.name)}() {

    return $!{column.name};

    }

    public void set$!{tool.firstUpperCase($column.name)}($!{tool.getClsNameByFullName($column.type)} $!{column.name}) {

    this.$!{column.name} = $!{column.name};

    }

    #end

    }

    展开全文
  • 在Dao层,通过数据库表反向生成,可以节省我们很多的精力,把更多的精力投入复杂的业务中。数据库表反向生成,指的是通过数据库如mysql中的库schema生成dao层读写的基础代码,包括model(entity)和dao(mapper)。...

    在Dao层,通过数据库表反向生成,可以节省我们很多的精力,把更多的精力投入复杂的业务中。

    数据库表反向生成,指的是通过数据库如mysql中的库表schema生成dao层读写表的基础代码,包括model(entity)和dao(mapper)。

    在本文中我先介绍java中mybatis-generator的反向生成。我们在下一篇文章中会介绍django中ORM的反向生成。

    mybatis-generator的反向生成有两种方式

    1)源码打包生成mybatis-generator.jar,通过执行jar来生成代码,然后把代码拷贝到工程

    2)直接跟编辑器集成,例如IDEA。

    我们只说明第二种方式。

    1、在IDEA中创建一个maven工程

    2、在maven工程的pom文件中添加mybatis-generator-maven-plugin插件

    org.mybatis.generator

    mybatis-generator-maven-plugin

    1.3.2

    true

    true

    3、在src/main/resources目录下创建两个配置文件,generatorConfig.xml和generator.properties

    generatorConfig.xml文件

    内容请看注释,

    /p>

    PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"

    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

    generator.properties文件

    这个主要配置的是你的驱动程序和数据库链接,mybatis将去配置的数据库中扫描要生成的表。

    jdbc.driverLocation=/Users/didi/.m2/repository/mysql/mysql-connector-java/5.1.40/mysql-connector-java-5.1.40.jar

    jdbc.driverClass=com.mysql.jdbc.Driver

    jdbc.connectionURL=jdbc:mysql://localhost:3306/jazz?useUnicode=true&characterEncoding=utf-8

    jdbc.userId=root

    jdbc.password=123456

    4、在IDEA中添加Run选项,使用mybatis-generator-maven-plugin

    18404f0d3b6c49e9f5011b486efd59c1.png

    配置如下

    1)Name写generator会在run菜单生成一个名叫generator的选项;

    2)CommandLine写要执行的命令,mybatis-generator:generate  -e

    3)working directory写你pom所在的工程,我这里是区分模块开发的,所以在dao模块下。

    e8445c7ff45d67e712ebc520a7624eb4.png

    5、run -> generator执行

    这样就会生成对应的代码了

    我两张表的建表语句如下:

    CREATE TABLE`hiveTable` (

    `id`int(100) NOT NULL AUTO_INCREMENT COMMENT '库表唯一Id',

    `dbName`VARCHAR(100) COMMENT '库名',

    `tableName`VARCHAR(100) COMMENT '表名',

    `location`VARCHAR(500) COMMENT '路径',

    `createTime`DATETIME COMMENT '创建时间',

    `updateTime`DATETIME COMMENT '更新时间',PRIMARY KEY(`id`)

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE`hiveLocation` (

    `id`int(100) NOT NULL AUTO_INCREMENT COMMENT '路径唯一Id',

    `location`VARCHAR(500) COMMENT '路径',

    `size`INT(10) COMMENT '大小',

    `createTime`DATETIME COMMENT '创建时间',

    `updateTime`DATETIME COMMENT '更新时间',PRIMARY KEY(`id`)

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    生成的代码如图

    713009a7a6ee3a432226426864d50793.png

    我们展示一些生成的代码:

    HiveTable.java

    packagecom.xiaoju.dqa.jazz.dao.model;importjava.util.Date;public classHiveTable {/*** This field was generated by MyBatis Generator.

    * This field corresponds to the database column hiveTable.id

    *

    * @mbggenerated*/

    privateInteger id;/*** This field was generated by MyBatis Generator.

    * This field corresponds to the database column hiveTable.dbName

    *

    * @mbggenerated*/

    privateString dbname;/*** This field was generated by MyBatis Generator.

    * This field corresponds to the database column hiveTable.tableName

    *

    * @mbggenerated*/

    privateString tablename;/*** This field was generated by MyBatis Generator.

    * This field corresponds to the database column hiveTable.location

    *

    * @mbggenerated*/

    privateString location;/*** This field was generated by MyBatis Generator.

    * This field corresponds to the database column hiveTable.createTime

    *

    * @mbggenerated*/

    privateDate createtime;/*** This field was generated by MyBatis Generator.

    * This field corresponds to the database column hiveTable.updateTime

    *

    * @mbggenerated*/

    privateDate updatetime;/*** This method was generated by MyBatis Generator.

    * This method corresponds to the database table hiveTable

    *

    * @mbggenerated*/

    publicHiveTable(Integer id, String dbname, String tablename, String location, Date createtime, Date updatetime) {this.id =id;this.dbname =dbname;this.tablename =tablename;this.location =location;this.createtime =createtime;this.updatetime =updatetime;

    }/*** This method was generated by MyBatis Generator.

    * This method returns the value of the database column hiveTable.id

    *

    *@returnthe value of hiveTable.id

    *

    * @mbggenerated*/

    publicInteger getId() {returnid;

    }/*** This method was generated by MyBatis Generator.

    * This method returns the value of the database column hiveTable.dbName

    *

    *@returnthe value of hiveTable.dbName

    *

    * @mbggenerated*/

    publicString getDbname() {returndbname;

    }/*** This method was generated by MyBatis Generator.

    * This method returns the value of the database column hiveTable.tableName

    *

    *@returnthe value of hiveTable.tableName

    *

    * @mbggenerated*/

    publicString getTablename() {returntablename;

    }/*** This method was generated by MyBatis Generator.

    * This method returns the value of the database column hiveTable.location

    *

    *@returnthe value of hiveTable.location

    *

    * @mbggenerated*/

    publicString getLocation() {returnlocation;

    }/*** This method was generated by MyBatis Generator.

    * This method returns the value of the database column hiveTable.createTime

    *

    *@returnthe value of hiveTable.createTime

    *

    * @mbggenerated*/

    publicDate getCreatetime() {returncreatetime;

    }/*** This method was generated by MyBatis Generator.

    * This method returns the value of the database column hiveTable.updateTime

    *

    *@returnthe value of hiveTable.updateTime

    *

    * @mbggenerated*/

    publicDate getUpdatetime() {returnupdatetime;

    }

    }

    HiveTableMapper.java

    packagecom.xiaoju.dqa.jazz.dao.mapper;importcom.xiaoju.dqa.jazz.dao.model.HiveTable;import org.apache.ibatis.annotations.*;

    @Mapperpublic interfaceHiveTableMapper {/*** This method was generated by MyBatis Generator.

    * This method corresponds to the database table hiveTable

    *

    * @mbggenerated*/@Delete({"delete from hiveTable","where id = #{id,jdbcType=INTEGER}"})intdeleteByPrimaryKey(Integer id);/*** This method was generated by MyBatis Generator.

    * This method corresponds to the database table hiveTable

    *

    * @mbggenerated*/@Insert({"insert into hiveTable (id, dbName, ","tableName, location, ","createTime, updateTime)","values (#{id,jdbcType=INTEGER}, #{dbname,jdbcType=VARCHAR}, ","#{tablename,jdbcType=VARCHAR}, #{location,jdbcType=VARCHAR}, ","#{createtime,jdbcType=TIMESTAMP}, #{updatetime,jdbcType=TIMESTAMP})"})intinsert(HiveTable record);/*** This method was generated by MyBatis Generator.

    * This method corresponds to the database table hiveTable

    *

    * @mbggenerated*/

    intinsertSelective(HiveTable record);/*** This method was generated by MyBatis Generator.

    * This method corresponds to the database table hiveTable

    *

    * @mbggenerated*/@Select({"select","id, dbName, tableName, location, createTime, updateTime","from hiveTable","where id = #{id,jdbcType=INTEGER}"})

    @ResultMap("BaseResultMap")

    HiveTable selectByPrimaryKey(Integer id);/*** This method was generated by MyBatis Generator.

    * This method corresponds to the database table hiveTable

    *

    * @mbggenerated*/

    intupdateByPrimaryKeySelective(HiveTable record);/*** This method was generated by MyBatis Generator.

    * This method corresponds to the database table hiveTable

    *

    * @mbggenerated*/@Update({"update hiveTable","set dbName = #{dbname,jdbcType=VARCHAR},","tableName = #{tablename,jdbcType=VARCHAR},","location = #{location,jdbcType=VARCHAR},","createTime = #{createtime,jdbcType=TIMESTAMP},","updateTime = #{updatetime,jdbcType=TIMESTAMP}","where id = #{id,jdbcType=INTEGER}"})intupdateByPrimaryKey(HiveTable record);

    }

    HiveTableMapper.xml

    id, dbName, tableName, location, createTime, updateTime

    insert into hiveTable

    id,

    dbName,

    tableName,

    location,

    createTime,

    updateTime,

    #{id,jdbcType=INTEGER},

    #{dbname,jdbcType=VARCHAR},

    #{tablename,jdbcType=VARCHAR},

    #{location,jdbcType=VARCHAR},

    #{createtime,jdbcType=TIMESTAMP},

    #{updatetime,jdbcType=TIMESTAMP},

    update hiveTable

    dbName = #{dbname,jdbcType=VARCHAR},

    tableName = #{tablename,jdbcType=VARCHAR},

    location = #{location,jdbcType=VARCHAR},

    createTime = #{createtime,jdbcType=TIMESTAMP},

    updateTime = #{updatetime,jdbcType=TIMESTAMP},

    where id = #{id,jdbcType=INTEGER}

    想让xml文件生效,你可以在创建数据源的时候加入xml文件的路径

    例如其中的bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis-mapper/*.xml"));

    packagecom.xiaoju.dqa.jazz.dao.configuration;importorg.apache.ibatis.session.SqlSessionFactory;importorg.mybatis.spring.SqlSessionFactoryBean;importorg.mybatis.spring.SqlSessionTemplate;importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Primary;importorg.springframework.core.io.support.PathMatchingResourcePatternResolver;importorg.springframework.jdbc.datasource.DataSourceTransactionManager;importjavax.sql.DataSource;

    @Configuration

    @MapperScan(basePackages= "com.xiaoju.dqa.jazz.dao.mapper", sqlSessionTemplateRef = "jazzSqlSessionTemplate")public classJazzDataSource {

    @Bean(name= "jazzData")

    @ConfigurationProperties(prefix= "spring.datasource.jazz")

    @PrimarypublicDataSource jazzData() {returnDataSourceBuilder.create().build();

    }

    @Bean(name= "jazzSqlSessionFactory")

    @Primarypublic SqlSessionFactory jazzSqlSessionFactory(@Qualifier("jazzData") DataSource dataSource) throwsException {

    SqlSessionFactoryBean bean= newSqlSessionFactoryBean();

    bean.setDataSource(dataSource);

    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis-mapper/*.xml"));returnbean.getObject();

    }

    @Bean(name= "jazzTransactionManager")

    @Primarypublic DataSourceTransactionManager jazzTransactionManager(@Qualifier("jazzData") DataSource dataSource) {return newDataSourceTransactionManager(dataSource);

    }

    @Bean(name= "jazzSqlSessionTemplate")

    @Primarypublic SqlSessionTemplate jazzSqlSessionTemplate(@Qualifier("jazzSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throwsException {return newSqlSessionTemplate(sqlSessionFactory);

    }

    }

    展开全文
  • MyEclipse JavaPersistence进行了上面的 操作后会出现一个视图DB Brower:MyEclipse Derby,点击右键新建new一个在出现的面板Database Driver中,Drivertemplate中选择Oracle(ThinDriver)这里以oracle软件为例,如果是...
  • java表反向生成

    2021-04-17 09:24:39
    java表反向生成类环境:XP+JDK1.5+Oracle10g注意事项1 请确保你的用户有权限访问select * from DBA_COL_COMMENTS2 java类的属性名称一律小写3 所要jar为:commons-lang-2.4.jar,ojdbc14.jar4 请在src下放置jdbc....
  • idea 功能很强大,以前不知道有这样的提升工作效率的方法,虽然有的工具确实可以直接生成实体类,mapper文件,还有dao接口,但是个人觉得涉及到复杂业...
  • package ...import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.io.FileOutputStream;import java.lang.reflect.Field;import java.util.ArrayList;import ja...
  • 前言本章介绍使用mybatis结合mysql数据库自动根据实体类生成相关的数据库表。首先引入相关的pom包我这里使用的是springboot2.1.8.RELEASE的版本org.mybatis.spring.bootmybatis-spring-boot-starter2.1.0...
  • import java.sql.Date; /** * 第一种定义方式,使用@Table和@Column方式定义 * */ @Table(name = "test") public class Test extends BaseModel { @Column(name = "id",type = MySqlTypeConstant.INT,length = 11,...
  • 用过Django的人应该都熟悉下面两条...python manage.py migrate # 此时数据库就会自动生成我们Model对应的数据了 上面两条命令都是作用于全局的,但是如果我们只想改动的app下面的Model或者某个文件中的Model,那...
  • 第一步:添加Hibernate jar包,hibernate.cfg.xml写好数据源.... import java.util.Date; public class Business { private Integer uId;... } } 按照以上步骤,即可反向生成! 分享到: 2014-05-21 13:39 浏览 837 评论
  • 数据库反向生成实体类是dbdesigner的一个功能,现在很多开发工具也带有这样的功能。实现原理也很简单:先通过SQL语句获取所有数据库,再通过SQL语句获取的结构,最后根据的字段信息生成相应的hibernate实体类...
  • 首先我们要在sts中建立mysql的数据库连接1.当点击ok之后,如果没有报错的话就应该是建立好了,我们可以点击查看这个数据库中所有的我们就可以再sts进行数据库操作了,具体如下:点击如下按钮打开一个或者右键点击 ...
  • 本发明涉及计算机技术领域,具体涉及一种实用性强、基于数据库表结构自动生成增加修改删除查询功能及页面的方法。背景技术:程序开发过程中,无论是页面还是服务端代码,在编写时每一个功能仍然是由每一位编码工程师...
  • MyEclipse通过Oracle数据库表反转生成实体类,hibernate反向生成 要先确定已经设置ID主键 在开发项目的阶段,当项目的数据库表设计完毕之后,接下来就是要进行开发了。但是一个项目中的一般很多,开发的第一步...
  • @GeneratedValue(strategy = GenerationType.IDENTITY) 代表主键是自增 @Transient 表示忽略生成变量到数据库 @Column(length=20) 限制数据库中字段长度 @OneToMany 表示Banner 对BannerItem是一对多关系 @...
  • 前言:idea 功能很强大,以前不知道有这样的提升工作效率的方法,虽然有的工具确实可以直接生成实体类,mapper文件,还有dao接口,但是个人觉得涉及到复杂业务还是只生成实体类比较好,后面部分就自己搞定就可以了。...
  • hibernate5(5)实体映射注解配置[2]主键生成策略@GeneratedValue基本注解类型在上一篇文章中,我们... GenerationType.TABLES 当前主键的值单独保存到一个数据库中2. GenerationT...文章jeanheo2016-03-302421浏...
  • import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.DriverManager;import jav...
  • round 1:(一开始学习当然还是要一步...加载驱动jar包:mysql-connector-java-5.1.40.jar(我用的是这个版本,你们随意!)b.创建工程,把jar包导进工程中的lib下面,然后右击build path把jar包添加进工程中c.创建数据...
  • 数据库生成java实体类

    2021-01-27 01:22:06
    Database2Sharp2009 代码生成工具NHibernate、Castle-ActiveRecord和PetShop架构的C#代码生成工具 Database2Sharp文件大小:5655KB更新时间:2009-5-7下载地址:http://www.iqidi.co...文章walb呀2017-12-04776浏览...
  • Mybatis_generator逆向生成工具作用生成pojo实体类生成XXXmapper.java生成XXXmapper.xml逆向生成项目配置文件 GeneratorConfig.xml/p>PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"...
  • 我这里是通过idea插件对应的spring项目生成器https://start.spring.io,直接生成项目。如图:下一步,修改成对应项目的基本信息。如图:选择相应的依赖jar包。选择项目的位置完成创建温馨提示,之前需要安装好maven。...
  • 踩了很多坑,今天的总结一下。 1.先选择配置数据源 2.这步,DBMS选择对应的数据库,这里博主用的是ORACLE数据库,然后点击确定 ...Connection profile name:输入数据库连接文件名,它会自动加上后缀名.dc...
  • 本文将带你使用PowerDesigner反向生成ORACLE数据模型。 1.环境 环境说明: Windows7,Oracle11R2 32位。 PowerDesigner16.5 2.连接ORACLE数据库 打开PowerDesigner新建物理数据模型。 在菜单栏中点击 database—...
  • type必须是实体类类名,例如:com.aaa.aaaa.ddd.pojo.xxx,在生成的sql语句中可能出现LONGVARCHAR类型,可根据实际使用替换成VARCHAR或者TEXT package com.wcs.biz.assist; import java.io.BufferedReader; import ...
  • springboot+mybatis-plus+mysql 自动生成数据库表搭建项目只需五步 第一步创建springboot项目 第二步添加maven依赖 第三步修改application.yml文件 第四步修改AichengApplication主类,添加注解 第五步运行测试 查看...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,087
精华内容 13,634
关键字:

java通过数据库表反向生成

java 订阅