Mybatis注解的方式,如何实现MySQL ,update后,返回更新后的值

如题所示,最笨的方法都是先单独写条修改语句,然后在写条查询语句,但这样频繁连接数据库未免太浪费资源

基于Mybatis ,能否实现@Update之后,返回值是更改后的目标值,或者像@Insert哪样,再加个@option啥的,把插入后的数据以实体类的形式返回

阅读 23.8k
3 个回答
  1. 如果你查看mybatis的源码你就会发现mybatis实现update操作是这样做的
  @Override
  public int update(Statement statement) throws SQLException {
    PreparedStatement ps = (PreparedStatement) statement;
    ps.execute();
    int rows = ps.getUpdateCount();
    Object parameterObject = boundSql.getParameterObject();
    KeyGenerator keyGenerator = mappedStatement.getKeyGenerator();
    keyGenerator.processAfter(executor, mappedStatement, ps, parameterObject);
    return rows;
  }

返回的为int类型的参数,所以如果你想使用<update>这样的标签实现这种功能估计是不可能的,

  1. 如果实在想返回参数,可以尝试这这么做:

    • 定义一个方法
    List<Object> updateReturn();
    • xml中编写代码
    <select id="updateReturn" resultMap="BaseResultMap" >
    
      update table_name
        set status=1
        where a='demo';
      select * from table_name limit 10;
    </select>
但是这种方法不适合维护,还是很不建议这么做

你update前不是也是需要查么。。查出来的set完需要改的属性,再调用update么。。
那根本不需要返回,因为你代码里本来就有改好的实例啊。

你在一个事务里调用不就得了。。
你担心的不就是2条语句用了2条连接嘛,你在一个事务里执行的语句都是在一个连接下的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题