使用mapper动态标签,创建Vo层是实现批量删除;
执行失败(DEBUG [main] - <== Updates: 0);
日志显示如下;
使用mapper代理开发(创建Vo层,PS;vo层和数据库没有任何的联系)是因为sql语句错误导致,
正确的sql语句应该如下;
<!--有起始的,结束的,item=id -->
<delete id="deleteOrders" parameterType="com.baidu.mybatis.vo.OrdersVo">
delete from orders
<where>
<foreach collection="ids" open="id in (" close=")" item="id" separator=",">
#{id}
</foreach>
</where>
</delete>
批量删除运行;
正确的结果(sql语句)如下;
附上VO层,Junit测试,utils代码;
vo层;
package com.baidu.mybatis.vo;
import com.baidu.mybatis.model.Orders;
import java.util.List;
/**
* @auther SyntacticSugar
* @data 2018/9/12 0012下午 5:03
*
* vo 是活跃在业务逻辑层,和数据库没有任何的关联
*
*/
public class OrdersVo {
public List<Integer> ids; //
//把id 封装到集合对象ids中,通过传递ids实现多条SQL语句的删除操作
public List<Integer> getIds() {
return ids;
}
public void setIds(List<Integer> ids) {
this.ids = ids;
}
}
单元测试;
@Test
public void test02() {
OrdersVo vo = new OrdersVo();
ArrayList<Integer> ids = new ArrayList<>();
ids.add(5);//删除id 为5 6的两条数据
ids.add(6);
//
vo.setIds(ids);
//调用实现类执行
OrdersServiceImpl os = new OrdersServiceImpl();
os.deleteOrders(vo);
}
Utils 封装工具类(获取会话session);
相对于封装 sqlSession 的工具类来讲,使用动态代理开发来讲,比起工具类来说更方便;这里不做详细介绍;
package com.baidu.mybatis.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
/**
* @auther SyntacticSugar
* @data 2018/9/12 0012上午 10:33
*/
public class MybatisUtils {
private static SqlSession session;
/**
* 获取会话工厂
*/
public static SqlSession getSqlSession() {
try {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
session = factory.openSession();
} catch (Exception e) {
e.printStackTrace();
}
return session;
}
}
实现类中关于增删改操作一定要手动提交事务;