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

### MyBatis联查实现方式 在MyBatis中处理多关联查询是一项常见需求,尤其是在关系型数据库中存储复杂实体关系时。为了满足这一需求,MyBatis 提供了多种实现方式。 #### 使用 `<association>` 和 `<collection>` 标签进行对象关系映射 对于一对一或多对一的关系,可以使用`<association>`标签;而对于一对多或集合属性,则可采用`<collection>`标签,在`<resultMap>`中定义这些标签以便于更精确的对象关系映射[^2]。 ```xml <!-- One-to-One Example --> <resultMap id="userRoleResultMap" type="User"> <id property="userId" column="user_id"/> <association property="role" javaType="Role"> <id property="roleId" column="role_id"/> <!-- other properties mapping... --> </association> </resultMap> <!-- One-to-Many Example --> <resultMap id="orderItemsResultMap" type="Order"> <id property="orderId" column="order_id"/> <collection property="items" ofType="Item"> <id property="itemId" column="item_id"/> <!-- other properties mapping... --> </collection> </resultMap> ``` #### 嵌套查询与手动SQL语句 除了利用上述标签外,还可以通过编写自定义的SQL语句来进行多连接操作,并将其封装成相应的接口方法调用。这种方式给予开发者更大的灵活性去控制查询逻辑。 ```sql SELECT u.*, r.* FROM users u LEFT JOIN roles r ON u.role_id = r.id; ``` 或者针对更加复杂的场景: ```java public interface VideoMapper { @Select({ "<script>", "SELECT", "v.id, v.title, v.summary, v.cover_img, v.price, v.point, v.create_time,", "c.id AS chapter_id, c.title AS chapter_title, c.ordered, c.create_time AS chapter_create_time,", "e.id AS episode_id, e.num, e.title AS episode_title, e.ordered AS episode_ordered, e.play_url, e.free", "FROM video v", "LEFT JOIN chapter c ON v.id = c.video_id", "LEFT JOIN episode e ON c.id = e.chapter_id", "</script>" }) List<Map<String,Object>> getVideoDetails(); } ``` 以上展示了如何基于MyBatis框架执行多联合检索并返回所需的数据结构[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值