MyBatis构建sql时动态传入表名以及字段名并创建数据表

动态SQL解析与安全

在动态sql解析过程,#{}与${}的效果是不一样的:

  1. #{ } 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。
    如以下sql语句
    select * from user where name = #{name};
    会被解析为:
    select * from user where name = ?;
    可以看到#{}被解析为一个参数占位符?。

  2. ${ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换
     如以下sql语句:
    select * from user where name = ${name};
     当我们传递参数“sprite”时,sql会解析为:
    select * from user where name = “sprite”;
     可以看到预编译之前的sql语句已经不包含变量name了。
     
    综上所得, ${ } 的变量的替换阶段是在动态 SQL 解析阶段,而 #{ }的变量的替换是在 DBMS 中。

  3. #{}与${}的区别可以简单总结如下:

    #{}将传入的参数当成一个字符串,会给传入的参数加一个双引号
    KaTeX parse error: Expected 'EOF', got '#' at position 29: …成在sql中,不会添加引号 #̲{}能够很大程度上防止sql注…{}无法防止sql注入

建表语句:
CREATE TABLE ${tableName} (
TASK_ID varchar(50) NOT NULL COMMENT ‘唯一ID’,
ASSIGN_MAN varchar(50) DEFAULT NULL COMMENT ‘任务制定人’,
LEAD_MAN varchar(50) DEFAULT NULL COMMENT '牵头单位 默认为任务指定人, ',
EXECUTE_MEN varchar(50) DEFAULT NULL COMMENT ‘数组形式存储,调度开始后,根据每个参与单位在任务填报表中生成一条记录;当导入时,该字段需要用户自行配置,不支持导入。’,
CONFIG_STATUS tinyint NOT NULL COMMENT ‘审核状态 0: 未审核;1:审核通过;2:退回;3: 调整中。’,
TEMPLATE_ID varchar(50) NOT NULL COMMENT ‘模版ID 用于报表生成’,
HEAD_NAME1 varchar(50) NOT NULL COMMENT ‘牵头单位配置。字段为表头ID,对应于REPORT_LINE 的ID,以在生成报表的时候生成各种样式。’,
HEAD_NAME2 varchar(50) NOT NULL COMMENT ‘需要考虑数据库表头字符长度限制’,
HEAD_NAME3 varchar(50) NOT NULL COMMENT ‘需要考虑数据库表头字符长度限制’,
MODIFY_TIME datetime NOT NULL COMMENT ‘修改时间’,
CREATE_TIME datetime NOT NULL COMMENT ‘创建时间’,
PRIMARY KEY (TASK_ID)
)comment = '任务配置表 ’ ENGINE=InnoDB DEFAULT CHARSET=utf8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值