1.动态添加表

mapper

 int dropExistTable(@Param("tableName") String tableName);//自动创建数据表

映射文件

   <update id="dropExistTable" parameterType="string" statementType="STATEMENT">
CREATE TABLE ${tableName} (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(100) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
`create_time` timestamp NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
</update>

controller

    @RequestMapping("/createtable")
@ResponseBody
public String createTable( String tableName){
Map<String, Object> reMap = new HashMap<String, Object>();
int res = userService.dropExistTable(tableName);
if (res == 0) {
reMap.put("code",1);
reMap.put("msg","创建成功");
logger.info("'tableNameString'+创建成功");
}else{
reMap.put("code",-1);
reMap.put("msg","创建失败");
logger.info("创建失败");
}
return JSONUtil.getJSON(reMap);
}
  • 添加属性statementType="STATEMENT"
  • 同时sql里的属有变量取值都改成${xxxx},而不是#{xxx}
  • statementType:STATEMENT(非预编译),PREPARED(预编译)或CALLABLE中的任意一个,这就告诉 MyBatis 分别使用Statement,PreparedStatement或者CallableStatement。默认:PREPARED。这里显然不能使用预编译,要改成非预编译。。

  • ${xxxx}:$将传入的数据直接显示生成在sql中,对于字符串数据,需要手动加上引号

2.动态查询数据表

 List<User> selecTable(@Param("tableName") String tableName);

项目中User表是个空表,里面跟动态创建的表结构,字段一致

映射文件 *mapper.xml

<select id="selecTable"  parameterType="java.lang.String" resultMap="BaseResultMap" statementType="STATEMENT">
select * from ${tableName}
</select>

controller

	@RequestMapping("/selecTable")
public String showSelecTable(String tableName){
List<User> objects = userService.selecTable(tableName);
System.out.println("user::::"+objects);
logger.info("成功");
return JSONUtil.getJSON(objects);
}

 

#和$符号的区别
#{ }表示一个占位符号, 可以实现preparedStatement向占位符中设置值,自动加粗样式进行java类型和jdbc类型转换。#{}可以有效防止sql注入。#{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

$ { } 表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, 可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值, {}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,{}括号中只能是value。

注意:对于order by 后面的排序规则,表名等数据库对象名,如果要传入,也应该使用${……}

3.动态表数据添加 

 int insertTable(@Param("user")User user,@Param("tableName") String tableName);
insertTable() 方法中是两个参数,一个参数是tabelName , 另一个参数 是User对象, 所以<insert > 标签中不能有parameterType 参数, 而是使用 @Param(“”) 进行修饰, 使用的时候要注意, 
@Param  是 import org.apache.ibatis.annotations.Param;, 不要导错包了。

mapper.xml

  <insert id="insertTable" >
insert into ${tableName} ( name, password, create_time)
values (#{user.name}, #{user.password}, #{user.createTime})
</insert>

 controller实现方法

@RequestMapping("/addTable")
@ResponseBody
public String addTable( String name,String password,String tableName){
Map<String, Object> reMap = new HashMap<String, Object>();
User user= new User();
user.setName(name);
user.setPassword(password);
user.setCreateTime(new Date());
System.out.println("传入的user参数"+user);
int res = userService.insertTable(user,tableName);
if (res > 0) {
reMap.put("code",1);
reMap.put("msg","成功");
logger.info("'tableNameString'+成功");
}else{
reMap.put("code",-1);
reMap.put("msg","失败");
logger.info("失败");
}
return JSONUtil.getJSON(reMap); }

 

 

mybatis 动态添加表,查看表,添加数据的更多相关文章

  1. pandas_使用透视表与交叉表查看业绩汇总数据

    # 使用透视表与交叉表查看业绩汇总数据 import pandas as pd import numpy as np import copy # 设置列对齐 pd.set_option("d ...

  2. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  3. 如何给动态添加的form表单控件添加表单验证

    最近使用jQuery Validate做表单验证很方便,api地址为http://www.runoob.com/jquery/jquery-plugin-validate.html 但是在使用的时候也 ...

  4. mysql 表注释的添加、查看 、修改

    表创建时添加注释: create table user( id  int not null default  0 comment '用户id', account varchar(20) not nul ...

  5. sql查询如何将A表数据name字段对应B表name字段得到对应的B表id主键然后添加A到表usel_id中

    1.写这个的原因 最近在写公司项目的时候一个功能很是让我头疼如标题看到的一样,平时我们一般都只负责数据表的查询或者连表查询某一个字段和A表字段一起显示出来. 但是添加到A表还是头一次,第一天想了很久都 ...

  6. mybatis动态调用表名和字段名

    以后慢慢启用个人博客:http://www.yuanrengu.com/index.php/mybatis1021.html 一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用 ...

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

    一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这 ...

  8. 【死磕jeesite源码】mybatis动态调用表名和字段名

    本文转载自夏雪冬日 一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字 ...

  9. MyBatis动态传入表名,字段名参数的解决办法---statementType用法

    statementType="STATEMENT" 要实现动态传入表名.列名,需要做如下修改 添加属性statementType="STATEMENT" 同时s ...

  10. Spring Boot:实现MyBatis动态创建表

    综合概述 在有些应用场景中,我们会有需要动态创建和操作表的需求.比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等.这个时候就需要我们动态的生成和操作数据库表了. ...

随机推荐

  1. FB面经Prepare: Find Longest Path in a Multi-Tree

    给的多叉树, 找这颗树里面最长的路径长度 解法就是在子树里面找最大的两个(或一个,如果只有一个子树的话)高度加起来. 对于每一个treenode, 维护它的最高的高度和第二高的高度,经过该点的最大路径 ...

  2. Nodejs在Ubuntu的部署和配置 samba

    在Ubuntu上安装samba 在10.04上安装samba时,先把samba卸载,不然会影响后面的安装. 0.卸载samba sudo apt-get remove samba-common sud ...

  3. 【转载】SVN使用教程总结

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  4. Spring Cloud Gateway Ribbon 自定义负载均衡

    在微服务开发中,使用Spring Cloud Gateway做为服务的网关,网关后面启动N个业务服务.但是有这样一个需求,同一个用户的操作,有时候需要保证顺序性,如果使用默认负载均衡策略,同一个用户的 ...

  5. Kindle:自动追更之发送邮件

    @echo off setlocal enabledelayedexpansion set from=Kindlekindle设置好信任的邮箱set pw=密码 set to=Kindle邮箱 cd ...

  6. 模块cv2的用法

    一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志  cv2.IMREAD_COLOR:默认参数 ...

  7. Lua table遍历

    工作中,栽了一个“坑”,特此备录. [1]遍历table1,每次结果可能都不同 -- 获取value ", addr="xian"} for k, v in pairs( ...

  8. redis 在 php 中的应用(key篇)

    本文为我阅读了 redis参考手册 之后结合 博友的博客 编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: KEY(键) DEL           ...

  9. Original Autel MaxiSys Pro MS908P support 2 Year Free Update Online

    You can get 2 Year Free Update Online once you place an order on Autel MS908P. Software Version: Eve ...

  10. Redis的持久化

    Redis的持久化有两种方式: RDB方式(默认支持):在指定的时间间隔内将内存中的数据集快照写入磁盘 优势 整个Redis数据库将只包含一个文件,对于文件备份来说是完美的,系统出现灾难性的故障时容易 ...