• Mybatis动态建表


    在网上查了很多,都说Mybatis不支持动态建表,心凉了一节。还好找到这么一篇,找到了希望:http://www.zzzyk.com/show/ec5660d9cf1071b3.htm

    经过在mysql环境下验证,确实可用,不知道其他数据库是否支持,如下:

    Mapper.xml

      <update id="createNewTable">

        create table `${realTableName}`(

            `id` int(11) NOT NULL AUTO_INCREMENT,

            <foreach collection="newColumns" index="index" item="item">

            `${item.columnName}` varchar(1000) COMMENT #{item.columnComment},

            </foreach>

            PRIMARY KEY (`id`)

        )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT #{tableComment};

      </update>

    需要注意的是:

    1.      表名和列名都不能使用正常的#{},系统会报错。还好iBatis提供一个方法:用${}保证原样输出。

    2.      而且,表名和列名两边的引号不能少

    3.      COMMENT可以正常使用#{},而且不需要引号

    4.      另外,传递参数支持对象列表,很强大,学习了,呵呵。

    Dao.java

    void createNewTable(@Param("realTableName") String realTableName, @Param("newColumns") List<TitleName> newColumns, @Param("tableName") String tableComment);

     注:这里使用了之前的一篇文章:Mybatis传多个参数(三种解决方案),使用的是第三种方案。

    Service.java

    public void createNewTable(String realTableName, List<TitleName> newColumns, String tableComment);

    Test.java

    List<ColumnName> newColumns = new ArrayList< ColumnName >();

    newColumns.add(new ColumnName("col_1", "第1列"));

    newColumns.add(new ColumnName("col_2", "第2列"));

    newColumns.add(new ColumnName("col_3", "第3列"));

    service.createNewTable("test_new_table", newColumns, "测试动态建表");

    ColumnName.java

    private String columnName;

    private String columnComment;

    如果还有其他方法,欢迎交流指教,:)

  • 相关阅读:
    linux下文件编码转换
    linux下打开文件数
    从hive0.7.1升级到hive0.8.1
    hive使用过程中碰到的问题
    JVM和GC
    代码生成器开发设计
    开源代码生成器:SmartCode [转]
    byte与其他类型的转换
    测试版天思.net代码生成器
    [源码试]写xml的解析器
  • 原文地址:https://www.cnblogs.com/wangjuns8/p/7252985.html
Copyright © 2020-2023  润新知