关于myabtis动态创建表

关于myabtis动态创建表

之前从来没接触过mybatis的自动创建表,今天开了个脑洞,就想实现一下。

Controller代码

@RequestMapping("/insert/{tableName}")
	@ResponseBody
	private int insert(@PathVariable("tableName") String tableName){
		return bookService.createNew(tableName);
	} 

@PathVariable是为了能获取在url后面的参数 localhost:8080/xx/insert/想要创建的表名

service接口代码

int createNew(@Param("tableName")String tableName);

@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中

service实现类代码

@Override
public int createNew(String tableName) {
    return xxDao.createNew(tableName);
}

在这里return一下dao的方法

Dao是一个接口,与xml文件映射,xml是写sql语句的地方

int createNew(@Param("tableName")String tableName);

对应dao的xml

<update id="createNew" parameterType="String">
    CREATE TABLE ${tableName} (
        id     INT(20) unsigned NOT NULL AUTO_INCREMENT,
        name   VARCHAR(40),
        number INT,
        PRIMARY KEY (id)
    )DEFAULT CHARSET=utf8;
</update>

id与dao的方法名对应,${tableName}就是可以接受页面传过来的tableName,后面就是关于字段的配置,id int类型 主键 非空,字符集什么的。

遇到的坑:传参数时接收不到tableName

解决办法:加上@Param注解

遇到的坑:sql语句错误

解决办法:重新输入,细心一点

遇到的坑:红标处报错红标处报错

解决办法:在idea中选Alt+Enter第一个 选择database,然后在NOT NULL前面加上unsigned

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值