数据库:Mysql

在使用mybatis的过程中对执行sql的返回值产生疑问,顺手记录一下。

结论:

insert:   插入n条记录,返回影响行数n。(n>=1,n为0时实际为插入失败)

update:更新n条记录,返回影响行数n。(n>=0)

delete: 删除n条记录,返回影响行数n。(n>=0)

验证:

插入多条数据,mysql中可以使用如下sql:

insert into bill (TX_TYP,REMARK,NO) VALUES (?,?,?) , (?,?,?) , (?,?,?) ;

而对oracle的操作略有不同(两种方式 以及对应的mapper配置):

INSERT INTO BILL(NO,TX_TYP,REMARK) (SELECT ?,?,? FROM dual) UNION ALL (SELECT ?,?,? FROM dual);
--或者
INSERT ALL INTO bill(NO,TX_TYP,REMARK) values ( ?,?,? ) INTO bill(NO,TX_TYP,REMARK) values ( ?,?,? ) SELECT 1 FROM dual;
   <!--对应的mapper 此处必须设置useGeneratedKeys=false才能批量插入成功-->
<insert id="mulAddOracle" parameterType="java.util.ArrayList" useGeneratedKeys="false">
insert into bill (TX_TYP,REMARK,NO)
<foreach collection="list" item="bill" separator="UNION ALL">
(SELECT #{bill.txTyp},#{bill.remark},#{bill.no} from dual)
</foreach>
</insert>
<!-- 第二种-->
<insert id="mulAddOracle2" parameterType="java.util.ArrayList" useGeneratedKeys="false">
insert ALL
<foreach collection="list" item="bill" >
into bill (TX_TYP,REMARK,NO) values
(#{bill.txTyp},#{bill.remark},#{bill.no})
</foreach>
select 1 from dual
</insert>

为了更直观的查看sql运行情况,在mybatis-config.xml中配置加一个setting配置,将执行的sql打印到控制台。

<setting name="logImpl" value="STDOUT_LOGGING" />

定义实体类Bill,属性no,txTyp,remark,其中no为mysql数据库表bill自增主键。

Mapper接口

    //单条插入
int add(Bill bill);
//多条插入
int mulAdd(List list);
//更新
int upt(Bill bill);
//删除
int del(Bill bill);

Mapper.xml

   <!-- 插入单条记录-->
<insert id="add" parameterType="com.demo.bill1.domain.Bill" >
insert into bill(TX_TYP,REMARK) values(#{txTyp},#{remark})
</insert>
<!--一次插入多条记录 将所有信息插入bill表里面,传入参数为list,通过<foreach>来遍历list-->
<insert id="mulAdd" parameterType="java.util.ArrayList">
insert into bill (TX_TYP,REMARK,NO) VALUES
<foreach collection="list" item="bill" separator=",">
(#{bill.txTyp},#{bill.remark},#{bill.no})
</foreach>
</insert> <!-- 更新记录-->
<update id="upt" parameterType="com.demo.bill1.domain.Bill">
update bill set REMARK=#{remark} where NO=#{no}
</update> <!-- 删除记录-->
<delete id="del" parameterType="com.demo.bill1.domain.Bill">
delete from bill where TX_TYP=#{txTyp}
</delete>

开始测试:

①插入单条记录:

    @Test
public void add(){
Bill bill=new Bill();
bill.setTxTyp("1");
bill.setRemark("试试影响行数");
System.out.println(billMapper.add(bill));
}

sql执行结果与返回值:成功插入一条数据,返回影响行数:1。

②插入多条记录

    @Test //测试一次性插入多条记录
public void mulAdd(){
List list =new ArrayList<Bill>();
Bill bill1=new Bill();
bill1.setTxTyp("1");
bill1.setRemark("bill1");
Bill bill2=new Bill();
bill2.setTxTyp("1");
bill2.setRemark("bill2");
Bill bill3=new Bill();
bill3.setTxTyp("1");
bill3.setRemark("bill3");
list.add(bill1);
list.add(bill2);
list.add(bill3);
System.out.println(billMapper.mulAdd(list));
}

sql执行结果与返回值:成功插入三条数据,返回影响行数:3。

插入多条记录时,如果有记录主键冲突,则sql执行出错,抛出异常,此时未成功插入记录。

③更新语句

    @Test //根据no进行更新
public void upt(){
Bill bill=new Bill();
bill.setTxTyp("1");
bill.setRemark("修改一下");
bill.setNo(1);
System.out.println(billMapper.upt(bill));
}

sql执行结果与返回值:根据NO字段进行更新,数据库表中没有NO=1的行,返回影响行数:0。修改成表中有的值后,成功返回影响行数。

④删除语句

    @Test //根据txTyp进行删除
public void del(){
Bill bill=new Bill();
bill.setTxTyp("1");
System.out.println(billMapper.del(bill));
}

sql执行结果与返回值:先将txTyp设置成数据库中没有的值txTyp=a,执行后返回影响行数为0;设置为有4条记录的txTyp=1,执行后返回影响结果为4,成功删除4条记录。

Mybatis执行sql(insert、update、delete)返回值问题的更多相关文章

  1. 关于MyBatis mapper的insert, update, delete返回值

    这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...

  2. mybatis insert update delete返回都是整型 0,1,增,删,改要提交事物

    mybatis insert update delete返回都是整型 0,1, 没有扔 增,删,改要提交事物

  3. 动态执行SQL语句,接收返回值

    一.exec和sp_executesql介绍 当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句.比如,一个比较通用的分页存储过程,可能需要传入表名,字段,过滤条件, ...

  4. mybatis select/insert/update/delete

    这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...

  5. LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

    我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入( ...

  6. 用sp_executesql执行动态SQL语句及获得返回值

    过去我执行拼凑出来的动态SQL语句,都直接使用EXEC @sql 的方式.有好几次,都看到有资料说,应该尽量使用 sp_executesql. 究其原因,是因为仅仅参数不同的情况下,sp_execut ...

  7. JDBC基础篇(MYSQL)——使用statement执行DML语句(insert/update/delete)

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package day02_statement; import java.sql.Connection; import java.s ...

  8. sql中同一个Trigger里同时包含Insert,Update,Delete

    sql中同一个Trigger里同时包含Insert,Update,Delete SQLServer是靠Inserted表和Deleted表来处理的,判断一下就可以了,只不过比ORACLE麻烦一点 cr ...

  9. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  10. mybatis执行批量更新update

    Mybatis的批量插入这里有http://ljhzzyx.blog.163.com/blog/static/38380312201353536375/.目前想批量更新,如果update的值是相同的话 ...

随机推荐

  1. [ActionScript 3.0] 利用InteractivePNG.as类精确选择识别png图片有像素的区域

    用法:如果是把png直接导入flash转换成影片剪辑,只需在影片剪辑属性中勾选为ActionScript导出(x),并把基类里的flash.display.MovieClip替换成Interactiv ...

  2. 爬虫--python3如何安装scrapy?

    直接使用pip3 install scrapy会报很多错误,所以试试以下步骤. (1) https://www.lfd.uci.edu/~gohlke/pythonlibs/ 在这个python第三方 ...

  3. 关于web界面设计的整体可维护性的感悟

    1.表现与数据分开管理: 某些数据具备特殊的表现格式,比如颜色,大小等等.为了对这些格式表现分开管理进行 a.使用css定义该类型数据的表现形式: 定义数据的类别,通过该类别对数据格式进行统一定义 . ...

  4. 判断H5页面环境是否在小程序的webview中

    用小程序提供的wx.miniProgram.getEnv可以获取环境参数,但是它有个问题就是无法在非微信环境下判断.所以在使用wx.miniProgram.getEnv前得先判断是否在微信环境中. 解 ...

  5. Locust HTTP client

    Http client 默认是以安全模式运行的,任何由于连接错误.超时或者类似错误引起的异常,都会返回一个空的Response对象,这个请求将会再locust统计中标记为failure,返回的虚拟对象 ...

  6. 在 Linux 服务器上部署 nginx 之后不能访问

    原文地址:https://blog.csdn.net/lipeigang1109/article/details/73295373 解决办法:https://jingyan.baidu.com/art ...

  7. J15W-J45W全铜质截止阀厂家,J15W-J45W全铜质截止阀价格 - 专题栏目 - 无极资讯网

    无极资讯网 首页 最新资讯 最新图集 最新标签   搜索 J15W-J45W全铜质截止阀 无极资讯网精心为您挑选了(J15W-J45W全铜质截止阀)信息,其中包含了(J15W-J45W全铜质截止阀)厂 ...

  8. SpringCloud---消息总线---Spring Cloud Bus

    1.概述 1.1 在微服务架构的系统中,我们通常会使用   轻量级的消息代理  来  构建一个共同的消息主题   让系统中所有微服务实例都连接上来: 由于  该主题中产生的消息  会被所有实例监听和消 ...

  9. uipath接入Python

    安装UiPath.Python.Activities,然后会有五个.Activities,他们的功能分别如下: 本人原创,转发或引用请注明出处.

  10. Node.js Express4.x生成程序骨架

    express 4.x版本中将命令工具分出来了,需要再安装一个命令工具,执行命令“npm install -g express-generator”完成后再测试就可以了. 最后通过"expr ...