SpringBoot 动态Sql语句Mybaties SqlProvider,采用注解返回新增之后的id

本文介绍如何在SpringBoot中使用MyBatis的注解方式替代XML配置,实现CRUD操作,并通过SqlProvider处理动态SQL,提高开发效率。

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

通常我们使用mysql,mybatis创建sql语句时都是采用xml,springboot很强大,可以全部采用注解的格式,这次我们使用Mybaties SqlProvider,完全脱离xml

 @Select("select * from video")
// 下划线转驼峰,太麻烦,配置文件解决
    /*@Results({
            @Result(column = "cover_img",property = "coverImg")
    })*/
    List<Video> finAll();

    @Select("select * from video where id=#{id}")
    Video findById(int id);

    //@Update("update video set title=#{title} where id=#{id}")
    @UpdateProvider(type = VideoProvider.class,method = "updateVideo")
    int update(Video video);

    @Delete("delete from video where id=#{id}")
    int delete(int id);

    @Insert("INSERT INTO `xdclass`.`video`(`title`, `summary`, `cover_img`, `view_num`, `price`, `create_time`, `online`, `point`) " +
            "VALUES ( #{title}, #{summary},#{coverImg} , #{viewNum}, #{price}, #{createTime}, #{online}, #{point});")
//    可以返回新增成功后这条数据的id,很有用
    @Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
    int save(Video video);

采用注解的形式可以完全脱离xml,但是当我们更新或者插入的时候,一些条件参数又如何添加,这时候SqlProvider出现了,我们上面的update语句就采用了。
新建VideoProvider类,新建方法

/**
     * 更新video动态语句
     * @param video
     * @return
     */
    public String updateVideo(final Video video){
        return new SQL(){{
            UPDATE("video");

            //条件写法.
            if(video.getTitle()!= null){
                SET("title=#{title}");
            }
            if(video.getSummary()!= null){
                SET("summary=#{summary}");
            }
            if(video.getCoverImg()!= null){
                SET("coverImg=#{coverImg}");
            }
            if(video.getViewNum()!= null){
                SET("viewNum=#{viewNum}");
            }
            if(video.getPrice()!= null){
                SET("price=#{price}");
            }
            if(video.getOnline()!= null){
                SET("online=#{online}");
            }
            if(video.getPoint()!= null){
                SET("point=#{point}");
            }

            WHERE("id=#{id}");
        }}.toString();
    }

这样的话,动态的参数,动态语句就可以创建了!

上面的insert语句,再使用了@Options(useGeneratedKeys = true,keyProperty = “id”,keyColumn = “id”)注解之后,当我们新增一条记录之后就可以获得到新增的id

 @Override
    public int save(Video video) {
        int save = videoMapper.save(video);
        System.out.println("保存对象的id是:===="+video.getId());
        return save;
    }

好文章学习:https://www.cnblogs.com/zhangminghui/p/4903351.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值