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动态创建表
综合概述 在有些应用场景中,我们会有需要动态创建和操作表的需求.比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等.这个时候就需要我们动态的生成和操作数据库表了. ...
随机推荐
- Leetcode Articles: Insert into a Cyclic Sorted List
Given a node from a cyclic linked list which has been sorted, write a function to insert a value int ...
- The world is in my hands
Null项 其实我还是比较希望你能理解我的心情 无聊666回味
- JS对象、构造器函数和原型对象之间的关系
一.基本概念 1.对象:属性和方法的集合,即变量和函数的封装.每个对象都有一个__proto__属性,指向这个对象的构造函数的原型对象. 2.构造器函数:用于创建对象的函数,通过new关键字生成对象. ...
- Sitecore 8.2 页面架构设计:模板与组件
介绍 Sitecore的开放式架构和众多API意味着在Sitecore中实施网站可能会在很多方向上发生偏差.架构的一个特别重要的方面涉及页面构建 - 如何构建Sitecore中的网页? Sitecor ...
- Linux 故障问题处理
一. Debian 网卡问题 原因: 网卡提示 Device Not Managed 处理方法: . 编辑/etc/NetworkManager/NetworkManager.conf: 将其 ...
- jquery的cookie插件
一.JS文件 /*! * jQuery Cookie Plugin v1.4.1 * https://github.com/carhartl/jquery-cookie * * Copyright 2 ...
- Vue入门:Vue环境安装
安装环境 操作系统:Windows 10 64位 安装Node.js 1. 下载系统对应版本安装包 下载地址:https://nodejs.org/en/download/ 2. 安装 除安装地址外其 ...
- Windows 安装配置MongoDB
1.安装 下载安装包 直接下一步. 2.添加环境变量 3.bin同级目录下新建data文件夹,data文件夹下新建db和log文件夹 4.输入命令启动mongodb服务 mongod --dbpath ...
- 如何在Ubuntu 16.04上安装PythonGDAL 2.1?
sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable sudo apt update sudo apt upgrade # if yo ...
- sublime 使用链接
链接 :http://www.cnblogs.com/gaosheng-221/p/6108033.html https://www.zhihu.com/question/24896283 http ...