Mybatis 的过程中对执行 sql 的返回值的分析
结论
mybatis 执行 insert,update,delete 返回的都是实际操作影响的行数
insert: 插入n条记录,返回影响行数n。(n>=1,n为0时实际为插入失败)
update: 更新n条记录,返回影响行数n。(n>=0)
delete: 删除n条记录,返回影响行数n。(n>=0)
示例
insert
insert into bill (TX_TYP,REMARK,NO) VALUES (?,?,?) , (?,?,?) , (?,?,?) ;
insert
into bill (TX_TYP,REMARK,NO)
(SELECT #{bill.txTyp},#
{bill.remark},#{bill.no} from dual)
insert
ALL
into bill (TX_TYP,REMARK,NO) values
(#{bill.txTyp},#{bill.remark},#{bill.no})
select 1 from dual
打印日志
为了更直观的查看 sql 运行情况,在 mybatis-config.xml 中配置加一个 setting 配置,将执行的 sql 打印到控制台。
定义实体类 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 into bill(TX_TYP,REMARK) values(#{txTyp},#{remark})
insert into bill (TX_TYP,REMARK,NO) VALUES (#{bill.txTyp},#{bill.remark},#{bill.no})
update bill set REMARK=#{remark} where NO=#{no}
delete from bill where TX_TYP=#{txTyp}
测试
1、插入单条记录:
@Test
public void add(){
Bill bill=new Bill();
bill.setTxTyp("1");
bill.setRemark("试试影响行数");
System.out.println(billMapper.add(bill));
}
sql 执行结果与返回值:成功插入一条数据,返回影响行数:1。
2、插入多条记录
@Test //测试一次性插入多条记录
public void mulAdd(){
List list =new ArrayList();
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 执行出错,抛出异常,此时未成功插入记录。
3、更新语句
@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。修改成表中有的值后,成功返回影响行数。
4、删除语句
@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 条记录。