Spring Boot+MyBatis使用原生SQL,执行动态自定义SQL语句

因为项目中需要做一些操作,比如动态在数据库中创建表,动态给数据库添加字段等等;

当时网上找了很多资料没看懂,后来看了一篇文章总算来了灵感,但没保存链接,所以一时没法贴出来。

毕竟自己在做的过程中遇到了很多坎坷,所以就自己整理一下了。

----------------------------------   割背景   -------------------------------------------

其实MyBatis是可以支持原生的SQL的,而且不需要做什么额外的操作,比如我们要新增一条记录的时候,我们是:

<insert id="saveTableColumn" >
    insert into table_column (id,table_id,column_label,column_code)
    values (#{id},#{table_id},#{column_label},#{column_code})
</insert>

这种方式是我们常用的MyBatis新增记录的方式,如果我想给某张表添加一个字段的话,语句是:

alter table 表名 add column 字段名  + 字段类型等等……

同样地,在MyBatis中,我们也可以写成这样:

<insert id="addColumn"  parameterType="java.util.Map">
    alter  table ${table} add column ${column} ${type} ;
</insert>

注意这里是使用的是${},而不是上面的#{},而且多了一个

parameterType="java.util.Map"

这是因为如果我们使用#{}的时候,MyBatis会自动帮我们把我们的字段自动加上单引号'',使用${}的时候就不会。

使用Map传参,MyBatis可以直接根据你的key取值。

在DAO中,我们写个对应的方法名就可以了

public int addColumn(Map map);

那么在其他地方调用这个的时候,只需要直接往Map中put值就行。

map.put("table",操作的表名);
map.put("column",字段名称);
// 调用设置字段类型的方法
map.put("type",拼接字段类型);

我的字段类型是使用了一个方法,根据需要拼接为字符串即可,方法里面有项目资料,这里就不贴出来了。

执行增加字段的方法,可以看到输出的信息:


我的语句里字段类型给错了,大家不要介意,先实现,再优化哈!


补充:

利用上面的方法,如果想要完全地自定义SQL也是没有问题的,直接把你的语句写在${}里面就行了,比如

<insert id="addColumn"  parameterType="java.util.Map">
    ${sql};
</insert>

当然,如果要返回指定的类型,如结果集等,就在上面那里加上resultType="返回类型"就可以了。

另外就是,Mapper中的方法不一定是要<insert><update><delete>等等也可以,里面具体的原理我就不是很清楚了。

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Spring Boot中,如果你想进行多表联查,可以使用Mybatis-Plus来简化操作。Mybatis-Plus是一个基于Mybatis的增强工具,它提供了一些便捷的方法和功能来更方便地进行多表联查。 首先,你需要引入Mybatis-Plus的依赖。可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency> ``` 接下来,你需要配置Mybatis-Plus的配置文件。在application.properties或application.yml中添加以下配置: ```properties # Mybatis-Plus配置 mybatis-plus.mapper-locations=classpath*:mapper/**/*.xml ``` 然后,你需要创建Mapper接口和对应的XML文件。在Mapper接口中,你可以使用Mybatis原生语法,也可以自定义SQL语句来进行多表联查。在XML文件中,你可以编写对应的SQL语句来实现多表联查的逻辑。 例如,如果你要进行两张表的联查,可以在Mapper接口中定义一个方法,并在对应的XML文件中编写SQL语句。示例代码如下: ```java // Mapper接口 @Mapper public interface UserMapper extends BaseMapper<User> { List<User> selectUserAndRole(); } // XML文件 <select id="selectUserAndRole" resultType="User"> SELECT u.*, r.name AS role_name FROM user u LEFT JOIN role r ON u.role_id = r.id </select> ``` 在这个示例中,我们通过左连接将user表和role表进行联查,并在结果中包含了role表的name字段。 最后,你可以在你的Service层中调用Mapper接口的方法来实现多表联查的功能。 这就是在Spring Boot使用Mybatis-Plus进行多表联查的基本步骤。通过引入Mybatis-Plus的依赖,配置Mapper和XML文件,你可以更方便地进行多表联查操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值