关于myabtis动态创建表

本文介绍如何使用MyBatis动态创建数据库表,通过Controller、Service、DAO及XML的配合,实现URL参数传递表名并生成对应表结构的过程。文章分享了实践中的常见问题与解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于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

### 关于狂神说 MyBatis 教程 #### 课程介绍 狂神说系列教程专注于通过实际案例讲解技术要点,使学习者能够快速上手并掌握核心技术。对于MyBatis的学习,该教程不仅涵盖了基础概念,还包括了如何集成到Spring框架以及更高级的主题如性能优化和缓存机制[^4]。 #### 主要内容概览 - **环境搭建**:指导学员设置开发环境,包括安装必要的工具和服务。 - **基本操作**:解释怎样执行简单的增删改查(CRUD)命令,并展示`SqlSession`的作用及其生命周期管理。 - **映射文件配置**:深入探讨XML映射文件的编写规则,说明如何指定SQL语句的位置以便让MyBatis识别它们[^2]。 - **动态SQL构建**:教授利用内置标签来创建灵活多变的查询逻辑的方法。 - **插件扩展功能**:介绍一些常用的第三方库与自定义拦截器的应用场景。 - **最佳实践分享**:基于作者多年经验总结出来的建议,帮助开发者写出高效稳定的持久层代码。 #### 实战项目演练 为了巩固所学的知识点,本课程还会引导学生完成几个小型实战练习,比如实现一个完整的用户管理系统,这有助于加深理解各个知识点之间的联系。 ```java @Test public void testQueryUserById(){ try (SqlSession session = MybatisUtils.getSession()) { UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.queryUserById(1); System.out.println(user); User user2 = mapper.queryUserById(2); System.out.println(user2); // 不同ID的对象实例不会相等 System.out.println(user == user2); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值