mybatis 动态添加表,查看表,添加数据
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 动态添加表,查看表,添加数据的更多相关文章
- pandas_使用透视表与交叉表查看业绩汇总数据
# 使用透视表与交叉表查看业绩汇总数据 import pandas as pd import numpy as np import copy # 设置列对齐 pd.set_option("d ...
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
C# DateTime的11种构造函数 别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...
- 如何给动态添加的form表单控件添加表单验证
最近使用jQuery Validate做表单验证很方便,api地址为http://www.runoob.com/jquery/jquery-plugin-validate.html 但是在使用的时候也 ...
- mysql 表注释的添加、查看 、修改
表创建时添加注释: create table user( id int not null default 0 comment '用户id', account varchar(20) not nul ...
- sql查询如何将A表数据name字段对应B表name字段得到对应的B表id主键然后添加A到表usel_id中
1.写这个的原因 最近在写公司项目的时候一个功能很是让我头疼如标题看到的一样,平时我们一般都只负责数据表的查询或者连表查询某一个字段和A表字段一起显示出来. 但是添加到A表还是头一次,第一天想了很久都 ...
- mybatis动态调用表名和字段名
以后慢慢启用个人博客:http://www.yuanrengu.com/index.php/mybatis1021.html 一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用 ...
- [转]MyBatis动态传入表名、字段名参数的解决办法
一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这 ...
- 【死磕jeesite源码】mybatis动态调用表名和字段名
本文转载自夏雪冬日 一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字 ...
- MyBatis动态传入表名,字段名参数的解决办法---statementType用法
statementType="STATEMENT" 要实现动态传入表名.列名,需要做如下修改 添加属性statementType="STATEMENT" 同时s ...
- Spring Boot:实现MyBatis动态创建表
综合概述 在有些应用场景中,我们会有需要动态创建和操作表的需求.比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等.这个时候就需要我们动态的生成和操作数据库表了. ...
随机推荐
- 让我怀疑人生的bug集合
bug1:一个人人都知道全局变量易污染,但是我就是污染不了的问题 解决:刚开始动用了session来存这个值,后来觉得太小题大做了,最后使用了闭包来解决,第一个function结束后开启第二个,起初没 ...
- TerminateProcess实现关闭任意程序
#include <Windows.h> #include <tchar.h> int WINAPI _tWinMain(HINSTANCE hInstance, HINSTA ...
- 数据结构与算法JS实现
行解算法题,没错,就是这么方便. 当然也可以使用 Node.js 环境来执行,具体参考Node.js官方文档即可. 二 对象和面向对象编程 js中5种数据类型,并没有定义更多的数据类型,但是运用j ...
- 打造RecyclerView的n级列表
先上效果图: 1.该多级列表的优势: 支持无限级列表展开 基于一个recyclerView实现 可以自定义每一级item的样式,定制化更强 2.设计的思路 数据结构List,ItemBean类中有变量 ...
- python 对excel操作用法详解
在python中,对excel表格读,写,追加数据,用以下三个模块: 1.wlrd 读取excel表中的数据 2.xlwt 创建一个全新的excel文件,然后对这个文件进行写入内容以及保存. 3.xl ...
- Linux 磁盘挂载分区
举例说明: 新增磁盘的设备文件名为 /dev/vdb 大小为100GB. #fdisk -l 查看新增的的磁盘 1.对新增磁盘进行分区 #fdisk /dev/vdb 按提示操作 p打印 n新增 d ...
- you've successfully authenticated, but Gitee.com does not provide she access.
如果都是正常的生成ssh的操作,还是会报这个错误,那么就是.... 你没更改文件夹的权限,这个坑跳了很久(汗...) sudo chmod 777 -r 文件夹
- C#winform窗体利用系统抓取关闭按钮事件
const int WM_SYSCOMMAND = 0x112; const int SC_CLOSE = 0xF060; const int SC_MINIMIZE = ...
- linux 命令中英文对照,收集
linux 命令中英文对照,收集 linux 命令英文全文 Is Linux CLI case-sensitive? The answer is, yes. If you try to run L ...
- 如何在页面上同时使用 jQuery 和其他框架?
Query 和其他 JavaScript 框架 正如您已经了解到的,jQuery 使用 $ 符号作为 jQuery 的简写. 如果其他 JavaScript 框架也使用 $ 符号作为简写怎么办? 其他 ...