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;

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

时间: 2024-10-13 07:57:09

Mybatis动态建表的相关文章

Mysql + Mybatis动态建表

service层业务 package com.zx.common.service.impl; import com.zx.common.entity.SysUser; import com.zx.common.mapper.SysUserMapper; import com.zx.common.service.SysUserService; import com.zx.common.util.DateUtil; import org.springframework.beans.factory.a

[转]MyBatis动态传入表名,字段名参数的解决办法

一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这种情况下,就需要构建sql来动态传入表名.字段名了.现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助. 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先

动态建表的学习总结

在没有学习js之前,当遇到需要建表时,往往都是比较麻烦的,而且不容易根据新的需求来更改.自从学了js之后,再也不用担心这个问题辣.使用js动态建表,在一个页面中出现多个表格时,还可以通过其函数多次调用来快速实现,简直不要太愉快~ 献上代码,有不足的地方还请指正. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Tit

Spring JdbcTemplate框架(2)——动态建表

本篇博客使用Spring JdbcTemplate实现动态建表.前面介绍了,它封装了数据库的基本操作,让我们使用起来更加灵活,下面来实战. 1.准备工作 引入jar包 2.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi

反射动态建表

SQLiteHelper定义一个接口SQLiteDataTable,里边重写onCreate和onUpgrade方法.在SQLiteDaoBase基类去实现这个SQLiteDataTable接口方法. 然后UserDao继承了SQLiteDaoBase这个基类,实现抽象类里的oncreate和onUpgrade两个方法,在oncreate方法里创建user表,写sql语句. 在SQLiteHelper里的onCreate方法里通过反射获得任意一个实现了SQLiteDataTable接口的实例,再

如何在数据库动态建表

动态建表首先需要了解Statement类 Statement 对象用 Connection 的方法createStatement 创建,例如 //创建连接对象Connection connection = DBUtil.getConnection();//创建Statement对象Statement statement=connection.createStatement(); 创建完之后通过执行以sql语句为参数的Statement的方法,来执行sql语句完成对数据库的操作. Statemen

mybatis动态调用表名和字段名

一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这种情况下,就需要构建sql来动态传入表名.字段名了.现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助. 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先

mybatis动态传入表名、列名

原文:http://luoyu-ds.iteye.com/blog/1517607 要实现动态传入表名.列名,需要做如下修改 添加属性statementType="STATEMENT" (可省略) 同时sql里的属有变量取值都改成${xxxx},而不是#{xxx} <delete id="deleteTableData" parameterType="java.util.Map" statementType="STATEMENT&

mybatis 动态添加表,查看表,添加数据

1.动态添加表 mapper int dropExistTable(@Param("tableName") String tableName);//自动创建数据表 映射文件 <update id="dropExistTable" parameterType="string" statementType="STATEMENT"> CREATE TABLE ${tableName} ( `id` int(11) NOT